Feeds and plaintext
Last updated
At a glance#
| What | URL | Format |
|---|---|---|
| Blog, RSS | https://gpuninja.com/blog/feed.xml | RSS 2.0 |
| Blog, Atom | https://gpuninja.com/blog/atom.xml | Atom 1.0 |
| Blog, JSON Feed | https://gpuninja.com/blog/feed.json | JSON Feed 1.1 |
| Daily digest | https://gpuninja.com/digest/feed.xml | RSS 2.0 |
| Data changes | https://gpuninja.com/api/v1/changes | JSON |
| Guide for AI agents | https://gpuninja.com/llms.txt | Plain text (llms.txt) |
| Plaintext pages | the page's path plus .txt | Plain text |
| Sitemap | https://gpuninja.com/sitemap.xml | XML sitemap |
| Crawler rules | https://gpuninja.com/robots.txt | robots.txt |
Every file here is static, needs no key, and is cached for up to 5 minutes, so a new post or digest can take a few minutes to appear after it goes live.
Blog feeds#
The blog at /blog publishes the same posts in three formats. Use whichever your reader prefers:
- RSS 2.0 at
https://gpuninja.com/blog/feed.xml - Atom 1.0 at
https://gpuninja.com/blog/atom.xml - JSON Feed 1.1 at
https://gpuninja.com/blog/feed.json
Each feed, titled "GPU Ninja Blog", carries the 20 most recent posts, newest first, with the full text of every post, its author, its tags and its description. Links and images inside posts are absolute. Each item has its publication date, and Atom and JSON Feed items also carry when the post was last updated. Every blog page also advertises all three feeds in its HTML head, so most readers find them if you give them the address https://gpuninja.com/blog.
Feed dates come from the posts themselves, never from when the site was built, so a redeploy doesn't make old posts look new.
Docs and legal pages are not in any feed.
Daily digest feed#
https://gpuninja.com/digest/feed.xml is an RSS 2.0 feed of the daily digest. It holds the 30 most recent editions, newest first. Each item:
- is titled with the date and the day's headline, such as "4 Oct 2026 — ASUS ROG Astral RTX 5080 added";
- links to that day's page, such as
https://gpuninja.com/digest/2026-10-04; - summarises the counts of changes, such as "16 changes: 1 new board, 4 price moves, 6 stock changes, 5 new benchmarks";
- carries that day's changes as the email shows them, so a busy day ends with "…and N more changes" and the full list is on the day's page.
Each edition covers the changes merged in the 24 hours up to 14:00 UTC on its date, and a date gets an item only if those changes gave the digest something to report. The feed's dates come from when the changes were merged, never from when the site was built, so a redeploy never makes old items look new.
Data changes in JSON#
If you want changes as data rather than prose, https://gpuninja.com/api/v1/changes lists every reviewed change merged in the last 30 days. The desktop app uses it to notify you about boards you watch. See Changes.
llms.txt#
https://gpuninja.com/llms.txt is a single plaintext guide for AI agents, following the llms.txt format. It starts with a short description of GPU Ninja, the API and the MCP server, then lists, in sections:
- Site: the home page;
- Docs: every documentation page;
- API: the search index, the changes file and each of the six API collections;
- Chips, Boards, Chassis and Models: each catalog and every entity in it, with discontinued entries marked "Discontinued";
- Blog: the blog's RSS feed, then every post, newest first;
- Optional: legal pages, the digest feed and every digest edition, newest first, for agents that have room for them.
Every page entry links to the plaintext .txt version of its page rather than the HTML, so an agent reads it at a fraction of the token cost; API entries link the JSON, and feed entries the feed. A section with nothing in it is left out. If the list grows past 1,000 entries, the largest groups (a hardware catalog, the blog posts or the digest editions) are folded, one at a time, into a single entry that points at their catalog or feed, gives the count and gives the URL pattern for individual pages. Site, Docs, API and the legal pages are never folded.
Plaintext page companions#
Almost every page on the site has a plaintext twin at the same path with .txt on the end. Each is served as text/plain in UTF-8 and has the same content as the page, rendered from the same source, so the two never disagree.
| Page | Plaintext companion |
|---|---|
Home page / | /index.txt |
Catalogs, such as /boards | /boards.txt (later pages: /boards/page/2.txt) |
Entity pages, such as /boards/<slug> | /boards/<slug>.txt |
Documentation, such as /docs/mcp | /docs/mcp.txt (the docs home is /docs.txt) |
Legal pages, such as /legal/privacy | /legal/privacy.txt (the legal home is /legal.txt) |
| Blog index and its later pages | /blog.txt, /blog/page/2.txt |
| Blog posts | /blog/<slug>.txt |
| Blog tags, tag pages and archive | /blog/tags.txt, /blog/tags/<tag>.txt (later pages: /blog/tags/<tag>/page/2.txt), /blog/archive.txt |
Digest editions, such as /digest/2026-10-04 | /digest/2026-10-04.txt |
The buyer's guide, the digest archive at /digest and the 404 page have no companion. Every link inside a companion is a full https://gpuninja.com/… address.
Plaintext companions write times as absolute UTC timestamps, never "3 days ago", so a cached copy never misleads you about how fresh it is. When an AI assistant looks up a single board or chip through the MCP server, the readable answer it gets is this same companion.
Sitemap and robots.txt#
https://gpuninja.com/sitemap.xmllists every HTML page on the site for search engines, with a last-modified time where one is known. Plaintext companions, JSON, feeds and the 404 page are left out. A hardware page's last-modified time is when its data last changed, not when it was last re-verified; the buyer's guide has none. If the site ever outgrows a single sitemap (50,000 addresses or 50 MB), this URL becomes an index pointing at parts under/sitemaps/.https://gpuninja.com/robots.txtallows every crawler everywhere and names the sitemap.
Syndicated posts#
Blog posts and the digest also appear beyond gpuninja.com. An hourly job does the posting, never the deploy itself. Nothing is posted until the original is live on the site, and nothing is posted twice.
| Platform | What appears | When |
|---|---|---|
| dev.to | Full copies of blog posts (a post can opt out) | At least 24 hours after the post first goes live |
| Hashnode | Full copies of blog posts (a post can opt out) | At least 24 hours after the post first goes live |
| X | Short excerpts the author wrote for a post (up to five), and the daily digest summary | Excerpt 1 from 72 hours after the post goes live, excerpt 2 from 144 hours, and so on; the digest from 14:00 UTC on its date |
| The same excerpts and digest summary | As for X |
Copies on dev.to and Hashnode always name the original on gpuninja.com as the canonical version and end with "Originally published at GPU Ninja". When the original changes, the copy is updated about 24 hours after the new version goes live.
Each social post links back to the post or digest page on gpuninja.com. GPU Ninja posts at most one blog excerpt and one digest summary a day (UTC) on each social platform, and never combines the two. An excerpt that can't go out within 14 days of its time is dropped, and a digest summary is posted only for the newest edition, within 24 hours of 14:00 UTC on its date. Social posts are never edited or deleted afterwards, even if the excerpt changes. A post without excerpts gets no social posts.
The version on gpuninja.com is always the original. If a copy elsewhere differs, the original is right.