rkn / cms
Flat-file CMS for shared hosting — Markdown, Twig, Yoyo reactive components, PSR-7/11/15/16, no database required.
Requires
- php: ^8.2
- ext-mbstring: *
- clickfwd/yoyo: ^0.14
- laminas/laminas-httphandlerrunner: ^2.10
- league/commonmark: ^2.8
- nikic/fast-route: ^1.3
- nyholm/psr7: ^1.8
- nyholm/psr7-server: ^1.1
- phpmailer/phpmailer: ^6.9
- psr/container: ^2.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
- psr/simple-cache: ^3.0
- spatie/yaml-front-matter: ^2.1
- symfony/console: ^7.0
- symfony/process: ^7.0
- symfony/var-dumper: ^7.0
- symfony/yaml: ^7.0
- twig/twig: ^3.8
- vlucas/phpdotenv: ^5.6
Requires (Dev)
- pestphp/pest: ^3.0
- phpstan/phpstan: ^1.10
Suggests
- phpseclib/phpseclib: Pure-PHP SFTP fallback when system `rsync` binary is not available (^3.0)
This package is auto-updated.
Last update: 2026-06-18 23:06:42 UTC
README
The flat-file PHP CMS that deploys to shared hosting in minutes.
RakunCMS is a blazing fast, flat-file CMS built for shared hosting environments — powered by Markdown, Twig, Yoyo reactive components, and PSR standards. Content can live in flat Markdown files or a database — no heavyweight stack required.
Why RakunCMS?
We built RakunCMS as an alternative to CMSs like WordPress, Grav, Statamic, and Kirby. Our core philosophy is simplicity, performance, and accessibility.
- Flat-file or database: content lives in Markdown files (folder = site structure) by default, or in MySQL via the opt-in content store — same Query API either way.
- Runs on $3/mo shared hosting (cPanel/Plesk): Deploy effortlessly via FTP/cPanel. No persistent processes, no VPS required.
- No Node.js or Docker required: Everything runs in a pure PHP ecosystem.
- Composer-installable: Manage your site easily with Composer.
- Reactive components without writing JavaScript: Build interactive UIs with PHP components that update seamlessly without full page reloads, powered by Yoyo (htmx).
- PSR-7/11/15/16 compliant: Built on a custom micro-framework with under 5MB of total dependencies.
Installation & Quick Start
Getting started with RakunCMS is incredibly fast:
# 1. Create a new site via Composer composer create-project rkn/cms my-website cd my-website # 2. Initialize the site structure php rakun init # 3. Start the built-in development server php rakun serve
Open http://localhost:8080 in your browser to see your site running!
Core Features
- Flat-File Architecture (default): By default, everything is stored in Markdown and YAML — no MySQL configuration, no database backups. Opt in to a MySQL content store by setting
content.driver: mysqlin config, powered byContentStorageFactoryselecting betweenFileContentStorageandMysqlContentStoragevia theContentStorageinterface. A SQLite-backed content index (setindex.driver: sqlite) is also available for large collections where a PHP-array index would be memory-intensive. - Reactive Yoyo Components: Build interactive, stateful PHP components (similar to Livewire) using HTMX under the hood.
- Built-in SEO Engine: Automatically generates Open Graph tags, JSON-LD markup, handles consent management, and integrates with WebMCP.
- Full-Text Search: Features an integrated inverted index for blazing fast search capabilities without needing external services like Algolia or Elasticsearch.
- Native i18n: Out-of-the-box support for multi-locale routing and content localization.
- Multi-Level Caching: Achieve 1-3ms response times in production using static HTML full-page caching coupled with OPcache.
- CLI Tools: Integrated
rakuncommand-line tool to easily clear the cache, make components, or run background queue workers. - Static Export:
bin/rakun buildrenders every published entry todist/<url>/index.htmland generatessitemap.xml/rss.xml/robots.txt— source-agnostic and fully compatible with bothfileandmysqlcontent stores. Deploy to any cheap or static host. - Optional Admin Panel:
rakuncms-adminis a separate, optional Laravel + Filament application that manages one or more RakunCMS sites over the HTTP content API. Flat-file sites can still be edited by hand or via Git with no admin panel required.
Developer Experience (DX)
- Laravel Herd Integration: Includes a custom Valet driver (
RakunCmsValetDriver) and thephp rakun herd:installcommand for automatic site discovery and blazingly fast local development on macOS. - Clean Architecture: Built on a highly optimized, custom PSR-compliant micro-framework. Total production dependencies are kept strictly under 5MB, ensuring a lightweight footprint for any hosting environment.
How It Works
- Write Content: Create or edit
.mdfiles directly in thecontent/directory. - Customize Design: Edit the
.twigtemplates located intemplates/to match your brand. - Add Interactivity: Build stateful Yoyo components in
src/Components/with matching views intemplates/yoyo/.
Deployment — Plesk via Git + GitHub webhook
RakunCMS sites deploy cleanly on Plesk using Plesk's built-in Git integration pulling from
GitHub, with a GitHub webhook that triggers a deploy on every push. This is the canonical
reference for the RakunCMS ecosystem (the sites built on top of rkn/cms follow the same flow).
Flow: GitHub push → webhook → Plesk pulls the branch → Plesk runs the deployment actions
(composer install + cache/sitemap warmup) → the new code is live under the domain's document root.
1. Prepare the domain in Plesk
- Create or choose the subscription/domain that hosts the site.
- Hosting Settings → PHP: select PHP 8.2+ (8.3 recommended) with
mbstringenabled. - Ensure the Git component is installed (Plesk → Tools & Settings → Updates → Add Components → Git).
2. Connect the GitHub repository — Websites & Domains → Git → Add Repository
- Repository URL:
- Public repo:
https://github.com/<org>/<repo>.git - Private repo: use SSH
git@github.com:<org>/<repo>.gitand add the deploy key Plesk shows to GitHub → repo → Settings → Deploy keys (read-only access is enough).
- Public repo:
- Branch:
main. - Deployment path: the folder Plesk publishes to (e.g. the domain's
httpdocs).
3. Point the document root at public/
RakunCMS serves from the public/ front controller. Set Hosting Settings → Document root to
<deployment-path>/public (e.g. httpdocs/public).
4. Enable automatic deployment + actions
In the repository's settings in Plesk:
- Deployment mode: Automatic (deploy when the repository is updated) — this is what the webhook drives.
- Additional deployment actions (run after each pull, from the repo root):
/opt/plesk/php/8.3/bin/php /usr/lib/plesk-9.0/composer.phar install --no-dev --optimize-autoloader --no-interaction /opt/plesk/php/8.3/bin/php vendor/bin/rakun cache:clear /opt/plesk/php/8.3/bin/php vendor/bin/rakun cache:warmup /opt/plesk/php/8.3/bin/php vendor/bin/rakun sitemap:generate # If the site uses the SQLite/MySQL content index, also run: # /opt/plesk/php/8.3/bin/php vendor/bin/rakun index:rebuild
Use the explicit Plesk PHP 8.3 binary (
/opt/plesk/php/8.3/bin/php) — the defaultphpin deployment actions can be an older version. Adjust thecomposer.pharpath to your Plesk install (or use acomposeravailable onPATH).
5. Add the GitHub webhook
Plesk shows a Webhook URL for the repository once Automatic deployment is on. Copy it, then in GitHub → repo → Settings → Webhooks → Add webhook:
- Payload URL: the Plesk webhook URL.
- Content type:
application/json. - Which events: Just the push event.
- Save. Pushing to
mainnow calls Plesk and deploys automatically.
6. Writable paths & config
- Ensure
cache/andstorage/are writable by the subscription's web user. - Site config lives in
config/rakun.yaml; keep secrets (API keys, mail, payment keys) in environment variables /.envon the server — never commit them. - First deploy of a brand-new site only: scaffold the structure with
php bin/rakun init.
RakunCMS also ships its own
deploy:*commands (atomic FTP/SSH deploys for shared hosting without Git). The Plesk + GitHub webhook flow above is the recommended path when the host runs Plesk.
Documentation
Full documentation, guides, deployment instructions, and API reference can be found at:
https://rakuncms.com/docs
Contributing
We welcome all contributions from the community! If you're looking to help out, report bugs, or understand how RakunCMS works under the hood, please read our Contributing Guide which includes an in-depth Architecture Overview.
License
GPL-3.0-or-later