Kagi News lets users blur or hide articles on topics they would rather not encounter. These personal content filters are powered by keyword lists defined inDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/kagisearch/kite-public/llms.txt
Use this file to discover all available pages before exploring further.
contentFilters.json, which is open source and community editable. Contributing a new filter or improving an existing one helps all users maintain the healthy, low-stress news diet that Kagi News is designed to support.
Content filters are applied client-side in the Kagi News web app. No filtering happens on the server — the full keyword lists are shipped with the app and evaluated locally in the browser when articles are displayed.
How filters work
Each filter has a unique ID, a display label shown in the app’s settings UI, and a set of keyword lists keyed by language code. When the user enables a filter, any article whose title or summary contains one of the matching keywords for their display language is blurred or hidden. Adefault keyword list is used as a fallback for languages that don’t yet have a dedicated translation.
Filter entry structure
| Field | Description |
|---|---|
id | Unique identifier for the filter. Use lowercase letters, hyphens, or underscores only (e.g. "health", "sexual-misconduct"). |
label | Human-readable display name shown in the app settings. |
keywords.default | Fallback keyword list used when no language-specific list exists. |
keywords.<lang> | Language-specific keyword list. The key is a BCP 47 language code (e.g. "en", "zh-Hans"). |
Existing filter categories
The following filters are currently defined incontentFilters.json:
| ID | Label | Description |
|---|---|---|
politics | Politics | Political figures, parties, elections, and government |
conflicts | Conflicts | Wars, military actions, and armed conflicts |
health | Health Crises | Pandemics, outbreaks, vaccines, and epidemics |
violence | Violence | Shootings, murders, and other violent events |
tabloid | Tabloid Sources | Articles from known tabloid domains |
crypto | Cryptocurrency | Bitcoin, Ethereum, blockchain, and crypto markets |
celebrities | Celebrity News | Entertainment gossip and celebrity coverage |
sports | Sports | Sports results, leagues, and championships |
ai | AI & Tech Hype | AI model announcements and generative AI coverage |
climate | Climate Anxiety | Climate change, extreme weather, and environmental crises |
sexual-misconduct | Sexual Misconduct | Sexual assault, harassment, and related topics |
Adding a new filter
Choose a unique ID
Pick a short, descriptive identifier using lowercase letters and hyphens or underscores only. For example:
"financial_crisis" or "natural-disasters". The ID must not already exist in contentFilters.json.Set a clear label
Write a concise display name that describes what the filter hides. Users see this label in the app settings, so keep it plain and unambiguous.
Write the keyword lists
Add a
default array and an en array as a minimum. Then add translations for as many of the supported languages as possible. The default list is used for any language not explicitly listed, so make it as broadly applicable as you can.Add the entry to contentFilters.json
Open
contentFilters.json and append your new filter object inside the top-level "filters" array. Ensure the JSON is valid before committing.Improving an existing filter
To add missing keywords or translations to an existing filter, find the relevant entry incontentFilters.json and:
- Add keywords to any existing language array, or
- Add a new language key with a translated keyword array.
Keyword guidelines
- Be specific. Choose keywords that reliably identify articles about the intended topic without creating excessive false positives.
- Cover the topic broadly. Include synonyms, related terms, and common proper nouns that appear in headlines for the topic.
- Translate for all supported languages. The more languages a filter covers, the more useful it is to the global user base.
- Multi-word phrases are allowed. Entries like
"death toll"or"climate change"are valid keyword values.
Supported language codes
The following language codes are currently used as keys in thekeywords object. Provide translations for as many as you can:
en pt it fr es de nl zh-Hans zh-Hant ja hi ru uk et sv