Kagi News aggregates content from RSS and Atom feeds organised into categories. The feed list is open source and community-maintained, which means you can add new regional or topical categories or improve existing ones by submitting a pull request. The more high-quality feeds a category has, the better the coverage Kagi News can offer.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.
Feed files
There are two files that define the feeds powering Kagi News:kite_feeds.json— Community-curated categories. This is where regional news (e.g. “Australia | Victoria”), local city news, and niche topical feeds live. Anyone can submit a PR to add or edit entries here.core_feeds.py— Kagi-maintained core categories covering World News, Business, Technology, Science, Sports, Culture, Politics, and other broad topics. These are primarily maintained by the Kagi team for quality and consistency, but community pull requests with improvements are welcome.
Entry structure
Each entry inkite_feeds.json follows this shape:
| Field | Description |
|---|---|
category_type | Describes the kind of category: "region" for geographic areas, "city" for city-level coverage, or "topic" for subject-based categories. |
source_language | The language code for the majority of feeds in this category (e.g. "en", "de"). The exact value is not critical — it is used as a hint, not an enforcer. |
display_names | A map of language codes to localised category names shown in the app UI. |
feeds | An array of RSS or Atom feed URLs. |
Adding a new category
Fork and clone the repository
Fork kagisearch/kite-public on GitHub, then clone your fork locally:
Edit kite_feeds.json
Open
kite_feeds.json and add a new top-level key for your category. Follow the entry structure shown above. Make sure the JSON remains valid — no trailing commas, proper nesting.Add at least 25 feeds
Populate the
feeds array with at least 25 working RSS or Atom feed URLs. Verify each one loads correctly and contains recent articles published daily or near-daily.Run the validation script
Check your feeds for broken URLs, stale content, and duplicate entries before opening a PR:The script fetches each feed you added (it compares against the base branch in CI), checks for HTTP errors, stale dates, thin headline-only content, and duplicate URLs within a category. Errors and warnings are printed to stderr with the feed URL and reason.
Adding feeds to an existing category
To add one or more feeds to a category that already exists, simply append the feed URL(s) to itsfeeds array and submit a pull request. No minimum count applies when adding to an existing category.
Feed quality guidelines
- RSS/Atom only. Kagi News does not scrape websites. Only include URLs that point to valid, publicly accessible RSS or Atom feeds.
- Working and active. Each feed must return a valid response and have content published at least daily. Stale feeds (last item older than 90 days) are flagged by the validator.
- Quality sources. Choose sources with substantive editorial content. Avoid low-quality, gossip, or SEO-farm content.
- No banned hosts. Feeds from
rsshub.appandnitter.netare blocked by the validator and will be flagged automatically.
Validation script reference
Thescripts/validate-feeds.ts script validates all feeds in kite_feeds.json (or only the feeds changed in the current branch when run in CI). It checks for:
| Check | Severity |
|---|---|
| HTTP 404 response | Error — exit code 1 |
| Other non-2xx HTTP response or fetch error | Error |
| Non-XML content type | Error |
| Response is not RSS/Atom XML | Error |
| Duplicate feed URL within a category | Warning |
| No items in feed | Warning |
| Thin/headline-only content | Warning |
| Latest item older than 90 days | Warning |
Banned host (rsshub.app, nitter.net) | Warning |