README.md
tinymash is a flat-file CMS and publishing platform for PHP 8.4+. It stores content on disk, does not require a database server, and ships with both a public site and an admin interface.
It is built for self-hosted publishing: pages, posts, author spaces, themes, plugins, media, tags, feeds, maintenance tasks, and a CLI for day-to-day operations.
What tinymash is for
tinymash is a good fit if you want:
- a database-free CMS
- a small self-hosted publishing stack
- pages and blog posts in the same system
- multiple authors without adding a lot of platform weight
- a PHP application that stays readable and easy to deploy
What ships with it
The shipped runtime includes:
- a web-based admin interface
- flat-file content, draft, user, and media storage
- public themes and theme settings
- plugin support
- media uploads for editor and site imagery
- feeds, tags, menus, search, backup/export, imports, and housekeeping tooling
- a CLI for cache management, deploy builds, housekeeping, imports, backups, and other maintenance work
Normal installation path
The normal production path is to run tinymash from a prepared runtime tree and point your web server at public/.
If you are holding a tinymash deploy package, the short version is:
- copy the runtime tree to the server
- point the web root at
public/ - make
data/,users/, andtmp/writable by the PHP/web-server user - create
app/config/tinymash.jsonfromapp/config/tinymash.json.exampleif it does not already exist, then review it - create the first admin user
- set up housekeeping from cron
The full step-by-step version is in INSTALL.md.
Runtime requirements
- PHP
8.4or newer - a web server such as Nginx or Apache
- PHP-FPM or another supported PHP SAPI
- writable
data/,users/, andtmp/directories
Required PHP extensions:
mbstringjsondomsessionopensslfileinfo
Recommended PHP extensions for full feature coverage:
curlgdorimagicksimplexmlexifintlzip
First admin user
Before you can use /admin/login, create at least one local admin user:
php8.4 bin/tinymash.php user set-password admin strong-password-here superadmin
Command line
Common operator commands are documented in CLI.md
Sample files
Public sample files live under samples/:
samples/server/nginx.sample.confsamples/server/apache.sample.confsamples/server/php-fpm.sample.confsamples/server/php-opcache-production.inisamples/server/php-opcache-development.inisamples/cron/tinymash.cronsamples/deploy/rsync-deploy.sh
Files and paths
public/: web rootapp/config/tinymash.json: main runtime configuration; deploy packages shipapp/config/tinymash.json.exampleas the safe starting pointdata/: content, drafts, media, caches, plugin/theme datausers/: user recordstmp/: temporary runtime filesbin/tinymash.php: CLI entrypoint
Source checkouts
If you are running tinymash directly from a source checkout instead of a prepared runtime tree, install the PHP dependencies first and treat that as a developer/operator workflow rather than the normal end-user install path.
License
tinymash is licensed under AGPL-3.0-or-later. See LICENSE.
Copyright 2026 Joaquim Homrighausen; all rights reserved.
Credits
tinymash uses a small set of bundled third-party packages and frontend assets, including:
- Bootstrap
- Bootstrap Icons
- highlight.js
- emoji-picker-element and bundled emoji picker data
flightphp/coreflightphp/runwaylatte/latteleague/commonmarksymfony/mailer