Skip to main content

Documentation 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.

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 in 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. A default keyword list is used as a fallback for languages that don’t yet have a dedicated translation.

Filter entry structure

{
  "id": "politics",
  "label": "Politics",
  "keywords": {
    "default": ["trump", "biden", "election", "democrat", "republican", "congress", "senate", "parliament", "minister", "government", "politician"],
    "en": ["trump", "biden", "election", "democrat", "republican", "congress", "senate", "parliament", "minister", "government", "politician"],
    "fr": ["trump", "biden", "élection", "démocrate", "républicain", "congrès", "sénat", "parlement", "ministre", "gouvernement", "politicien"],
    "de": ["trump", "biden", "wahl", "demokrat", "republikaner", "kongress", "senat", "parlament", "minister", "regierung", "politiker"]
  }
}
FieldDescription
idUnique identifier for the filter. Use lowercase letters, hyphens, or underscores only (e.g. "health", "sexual-misconduct").
labelHuman-readable display name shown in the app settings.
keywords.defaultFallback 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 in contentFilters.json:
IDLabelDescription
politicsPoliticsPolitical figures, parties, elections, and government
conflictsConflictsWars, military actions, and armed conflicts
healthHealth CrisesPandemics, outbreaks, vaccines, and epidemics
violenceViolenceShootings, murders, and other violent events
tabloidTabloid SourcesArticles from known tabloid domains
cryptoCryptocurrencyBitcoin, Ethereum, blockchain, and crypto markets
celebritiesCelebrity NewsEntertainment gossip and celebrity coverage
sportsSportsSports results, leagues, and championships
aiAI & Tech HypeAI model announcements and generative AI coverage
climateClimate AnxietyClimate change, extreme weather, and environmental crises
sexual-misconductSexual MisconductSexual assault, harassment, and related topics

Adding a new filter

1

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.
2

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.
3

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.
4

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.
5

Submit a pull request

Push your branch and open a pull request. Describe the filter, explain why it is a useful addition, and note any languages you were unable to translate.

Improving an existing filter

To add missing keywords or translations to an existing filter, find the relevant entry in contentFilters.json and:
  • Add keywords to any existing language array, or
  • Add a new language key with a translated keyword array.
Then submit a pull request with a brief description of what you changed and why.

Keyword guidelines

All keywords must be lowercase. Matching is case-insensitive in the app, but the source values in contentFilters.json must be stored in lowercase to keep the file consistent.
  • 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 the keywords 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

Build docs developers (and LLMs) love