Introducing plym
A markdown-first CMS for the AI-native web. Static-page performance, config-file flexibility, and content that agents can read without parsing your HTML.
Today we're releasing plym as open source. It's a CMS built from the ground up for two audiences that used to be one: people reading your site in a browser, and the growing number of agents reading it on their behalf.
Why another CMS?
There are hundreds of them, from WordPress to Hugo, so this is a fair question to open with.
Existing tools fall into two camps.
- Dynamic CMSes (WordPress, Ghost, Strapi) give editors and configuration flexibility, but they render pages per request and keep a database and a runtime on the hot path.
- Static site generators (Hugo, Jekyll, Astro) give you fast pages, but you own the build pipeline and the editing story is a text file in a git repo.
plym takes the output model of a static generator and the editing and configuration model of a dynamic CMS, and it adds the one thing neither camp was designed for: serving your content to machines that don't want HTML.
Speed
The mechanism is straightforward. plym pre-renders each page to disk ahead of the request, including both its HTML and its Markdown representation. Your reverse proxy (nginx, Caddy, or anything else) serves those files directly. Requests for published pages never reach the plym process.
The result is sub-2ms TTFB from the origin on a warm page served from local disk.
Because the application is off the request path, the same design scales sideways. Point your proxy at object storage or a CDN instead of local disk and nothing about the model changes.
SEO
The argument that SEO is dying assumes people will ask a model instead of searching. But a model only knows what was written and published. If most sites stop producing and updating content, the systems that depend on that content go stale. Content, and its reach, matters more now, not less, because more things are reading it.
plym is built for reach on both ends, for search engines and for people, without a plugin marketplace:
- Meta tags generated from your content
- Sitemap and
llms.txtproduced automatically - Layout and rendering designed around Core Web Vitals (LCP, CLS, and the rest) rather than retrofitted after the fact
Content for agents
This is the part existing CMSes don't do.
When an agent fetches one of your pages with Accept: text/markdown, plym serves the Markdown source instead of the rendered HTML. Same URL, negotiated by the request. No separate API, no scraping, no HTML-to-text heuristics on the agent's side.
$ curl -H "Accept: text/markdown" https://yoursite.com/blog/some-post
# Some Post
The clean source, exactly as it was written.
...
Markdown is far cheaper to read than the equivalent rendered page. Stripping navigation, wrappers, and markup cuts token usage by up to 70% for the same content, which matters both for cost and for context budget when agents read your site at scale.
Every page also exposes its Markdown at a stable URL, and llms.txt gives agents a map of what's available.
Everything included, nothing required
plym ships with an editor, templates, and defaults. None of it is load-bearing.
- Bring your own templates and design. The defaults are a starting point, not a lock-in. Check the templating guide for creating your own templates in your brand language.
- Run it behind any proxy.
- Deploy at a subdomain, a subdirectory, or the site root.
- Move page storage to S3 or a CDN when you outgrow local disk.
Every part of that is set through plain config files, so the whole system is inspectable and version-controllable.
Reliability and plym Cloud
Because published pages are static artifacts sitting behind a CDN, your site keeps serving even when the origin does not. If plym goes down, everything already published stays up.
That property is the foundation of plym Cloud, the managed version, which runs this architecture for you.
Getting started
The source is on GitHub: github.com/plym-io/plym.
If you run a blog, docs site, or any content site and you care about how it performs for both browsers and agents, clone it and point your proxy at it. Alternatively, you can checkout the cloud version and skip servers and config.
Frequently asked