Typemill: a flat-file CMS aimed at documentation, not pages
Typemill is a flat-file CMS based on Markdown and designed for informational websites like documentation, manuals, and handbooks.
At a glance
- What is it?
- Typemill stores a site as Markdown files on disk and needs no database, which is why its install instructions are about folder permissions rather than credentials. It is a Slim and Vue application with a Twig templating layer, a block editor for authors, and an eBook plugin that exports the same source to PDF and ePUB.
- Who is it for?
- Use Typemill if your site is documentation shaped: manuals, a knowledge base, a handbook, or an eBook where the source should stay in version control as Markdown. Skip it if you need multi-author editing with roles or a database-backed content model.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 16 days ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 6, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Flat file means five writable folders and no database
The defining choice is that content lives in files. There is no database to provision, no connection string, and no migration step. The install instructions are a list of five directories that must be writable: `/cache`, `/content`, `/data`, `/media` and `/settings`.
That list is the whole operational footprint, and it is worth reading as a description of how the CMS works. Content is Markdown on disk, media is uploaded files, settings are configuration, data is whatever the application persists, and cache is generated output. If your host gives you a read-only document root with a writable uploads directory, you will spend your time solving that rather than installing anything.
The type of site is stated plainly too. Typemill is aimed at informational sites, with user manuals, documentation, knowledge bases, wikis and handbooks named as the common cases. That is a narrow target and it is why the feature list spends its words on eBook output rather than on commerce, forms or multi-author workflows.
Three install routes, and only one needs a shell
Installation guidance is split by how you get the files onto the server.
The ZIP and FTP route is the one aimed at shared hosting. Download the latest zip from the project website, upload all files, check the permissions, then visit `www.your-typemill-website.com/tm/setup` and create an admin user. There is no configuration file to edit before that point; the setup route handles it.
The GitHub route assumes you can reach a shell:
git clone https://github.com/typemill/typemill.gitthen Composer for the server side libraries:
composer updateThe Docker route uses an official image on Docker Hub, and the documentation page for it is linked from the README. That third option matters more than it first appears, because the image resolves the permission and extension problems for you rather than leaving them as steps.
Whichever route you take, the outcome is the same: an admin account created through `/tm/setup`, and a site whose content you then edit as Markdown.
The stack is Slim with Vue and Tailwind on the front
The server side is Slim PHP with the Symfony event dispatcher, templates are Twig, and definitions are YAML. The front end is Vue.js styled with Tailwind CSS. That combination is the reason the project can claim to be lightweight without being austere: the CMS is a normal PHP application with a modern asset pipeline rather than a templating engine of its own.
The size claim is specific. Typemill is described as only 2MB gzipped, which is what you would expect from a system that ships no database driver and keeps its own content as text.
The requirements list is short and concrete: a web server, either Apache or Nginx, PHP 8.1 or higher, and the standard PHP libraries including mod_rewrite, gd, mbstring, fileinfo, session and iconv. Note that Apache and Nginx are both listed as the web server even though the URL example uses an Apache style path, and note that `gd` is a hard requirement because it handles image processing for media.
If you are on shared hosting, that extension list is the part that most often ends an install.
Two editors, and plugins extend from YAML definitions
Authoring is offered two ways: a visual block editor and a raw markdown editor. That pairing is the practical reason Typemill suits both audiences, because a documentation editor can be handed to someone who will not write Markdown while the Markdown stays available for anyone who wants it in version control.
Extension is three ways, all of them first class. Plugins add functionality, themes change the presentation, and custom eBook layouts are supported for people who need a different reading order or page structure in the exported book.
The developer-facing surface is deliberately conventional rather than novel: Twig templates mean an existing Twig skill transfers, and the Symfony event dispatcher means plugins hook into named events instead of monkey-patching. YAML definitions cover the parts that should be data rather than code, which is what lets a theme or a plugin be partly configured.
None of this is framework lock-in to guess at. It is a small PHP application with conventional seams, which is the design a small team can maintain.
Single source publishing means the eBook is the same Markdown
The eBook plugin converts content to PDF and ePUB. What makes that feature worth having is the word single source: the book is not a separate authoring workflow that has to be kept in step with the site, it is an export of the same files.
That works because the content model is structured. Markdown files carry metadata, and the site already knows about ordering, sections and navigation, so the export has something to follow. The alternative, where a documentation site and a downloadable PDF are maintained by hand, is the failure mode this feature exists to remove.
Custom eBook layouts are the escape hatch. If the default reading order does not suit a particular manual, you can define your own rather than restructuring the site.
For the project itself, this is also the argument that Typemill is not just a CMS with an export bolted on. Flat files plus a structured content model plus a deterministic export is one design, and the PDF and ePUB outputs are what fall out of it.
The default branch is v2.x and the package manifest is from v1
Two things in the repository are out of step with the rest of it, and both are worth checking before you rely on them.
The default branch is `v2.x` rather than main, and the newest releases are V2.27.0, a Soloprint theme, on 2026-09-20, V2.26.2 fixing the setup script on 2026-08-24, and V2.26.1 on 2026-08-23. The branch name therefore carries the major version, which is unusual and useful to know before you clone the wrong default.
The package manifest says version 1.0.0, which describes no current release, and its licence field reads ISC while the licence file in the repository root and the README both say MIT. The `author` field is an empty string. None of this affects the CMS, since the PHP side is built by Composer and this manifest exists for the Tailwind and PostCSS toolchain, but it is exactly the kind of metadata you should not quote as authoritative.
The last push to the default branch is dated 2026-09-20, the same day as the newest release.
The Docker image is php:8.5-apache with six volumes
The Dockerfile shows the deployment assumptions more clearly than the README does. It starts from `php:8.5-apache`, installs git, unzip and the zlib, PNG and JPEG development libraries, enables the Apache rewrite module and writes a `ServerName`, and then configures GD with JPEG support and installs it as a PHP extension. That is the extension list from the requirements section, resolved for you.
Two steps are unusual enough to notice. An environment variable, `TYPEMILL_PROXY_DETECTION=true`, is set for deployments behind a reverse proxy. And there is a conditional step that checks for the Vue development and production builds and, when both exist, moves the production file over the development one, so a Composer update in the image does not leave the editor running against a development build.
The image then installs Composer from the bundled `docker-utils/install-composer` script and runs `composer.phar update`.
Six volumes are declared, covering settings, media, cache, plugins and the web root, and the image pre-creates default copies of content, themes, media and settings so a first run with empty volumes still has something to serve.
Editorial conclusion
Use Typemill if your site is documentation shaped: manuals, a knowledge base, a handbook, or an eBook where the source should stay in version control as Markdown. Skip it if you need multi-author editing with roles or a database-backed content model. Before you deploy, set the five directory permissions, check that your PHP has the extensions listed rather than assuming a modern image has them, and read licence.md yourself, since the package manifest and the licence file disagree.
Frequently asked questions
What is Typemill?
An open-source flat-file CMS for websites and eBooks built from Markdown files, with no database required. It is aimed at informational sites such as user manuals, documentation, knowledge bases, wikis and handbooks.
What does Typemill need to run?
A web server, either Apache or Nginx, PHP 8.1 or higher, and the standard PHP libraries including mod_rewrite, gd, mbstring, fileinfo, session and iconv. The application itself is described as only 2MB gzipped.
How do I install Typemill?
Upload the latest ZIP and visit /tm/setup to create an admin user, or clone the repository and run composer update, or use the official Docker image. The default branch is v2.x rather than main, so check that before cloning.
Which folders have to be writable in Typemill?
Five: /cache, /content, /data, /media and /settings. Because the CMS is flat file, these are the whole operational footprint, and nothing else needs configuring.
What licence is Typemill published under?
Typemill itself is MIT licensed, as the licence file and the README both state. Plugins, themes and services are published under MIT and commercial licences. The package manifest lists ISC, so read the licence file rather than the manifest.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/typemill-typemill)