Skip to main content
All articles

Swiftly-CMSKit Early Beta

Ben Van AkenCo-Founder & CTO4 min read
Swiftly-CMSKit Early Beta

A Vapor headless CMS is a thing the server-side Swift world has not had many of, which is a bad reason to pretend one is finished. Swiftly-CMSKit is ours, it is open source, and the repository's own banner is the first sentence that matters: the project is in early beta, APIs may change, features may be incomplete, breaking changes can happen between releases, and it is not yet recommended for production use.

We are publishing this article anyway, because "early" is easier to trust when the warning and the tag agree. The only tag we recorded on 10 October 2026 was v0.1.0, from 23 February 2026. The star count recorded the same day was zero. The README's install example depends on the main branch, not on a version. That is the beta, written as a package line. If you pin it, pin it knowing the next push to main can break your call sites.

What the Vapor headless CMS actually includes

CMS.configure registers the built-in modules, their migrations and their routes. The README's table lists 26. Grouped, rather than retyped:

  • Content: a blog with RSS, hierarchical pages with revisions, a job board, a form builder, menus, and taxonomies.
  • Finding it: PostgreSQL full-text search, and an SEO module that emits a sitemap, robots.txt, redirects and JSON-LD.
  • Media: a library with storage in the database or on S3-compatible storage, and image variants.
  • Several sites from one process, isolated by a site key, with roles and a long permission list.
  • Access: sessions, TOTP, API tokens, and OAuth the README describes as supported.
  • Operations: email through SMTP, Mailgun or SendGrid; a privacy-first analytics dashboard; an in-memory response cache; a job queue view; webhooks signed with HMAC.

The admin UI is server-rendered HTML, Elementary plus HTMX, with a light and dark theme. That is the same family of tools these sites use, and it is not these sites. swiftly-developed.com, the marketing site, the consulting site and Workspace's marketing site are this repository's kits. They do not run on CMSKit. Putting the production marketing sites on a library whose own README says "not yet" would make the warning decorative.

Swift
import CMSKit

try CMS.configure(for: app)
try await app.autoMigrate()

A second site is a registration with its own key and its own admin prefix. The README is clear that the data is isolated per site. Plugins implement a separate protocol and boot after configure. The demo target ships with the package for local development. I am not repeating its seed password here. If you run the demo, read the README and change it.

Why publish a beta in 2026

Answer engines and the agents that fetch pages for a person read HTML. They do not assemble your site from a client-side framework. A CMS that stores content and then renders it on the server is aligned with that, and the SEO module's sitemap and JSON-LD are the ordinary machine-readable half. SwiftlyBotKit, the package that records which agents fetched you, is the measurement half. CMSKit does not include it, and this article does not claim a plugin that is not in the table.

The interesting part of shipping a beta under those conditions is the warning, not the module count. Twenty-six modules on a single tag from February, with the install line tracking main, is a lot of surface for something we are telling you not to bet a company site on. The module list is the map of what we are willing to break in public. Treat missing behaviour as missing, not as "coming next month", unless the repository says so. This article does not add a roadmap.

Swiftly-CMSKit on GitHub

Which AI agents visit your site?

How this sits next to the other kits

Swiftly-PDFKit draws documents. SwiftlyBotKit records agent traffic. CMSKit wants to be the content store and the admin for a Vapor site. All three are MIT, all three are under github.com/Swiftly-Developed, and they are at very different levels of boredom. PDFKit's newest recorded tag is v0.3.0. BotKit's latest release as of late September 2026 is 0.11.0, and we run that one on these sites. CMSKit is the one whose README still has to open with the warning. Use it to learn the shape, or to build something you can afford to migrate. Do not point a client's production domain at main.

If you want a Vapor site that is already the shape we ship for ourselves, you are looking at the wrong package. This website is the example. CMSKit is the experiment we are doing in the open, labelled as one.

Comments

Loading comments…

Got a build in mind?

We ship native iOS, Android, and server-side Swift for teams that care about craft. Book a call and let's scope it.