⌘K

If you like the project, please give it a Star on Github! ⭐


SynaptikCMS

A full-featured flat-file PHP CMS built for speed and simplicity. JSON storage, no database, no dependencies — just upload to any server and go.

Live Demo · Download Themes · Download Plugins · Documentation · Changelog · Report a Bug


What is SynaptikCMS?

SynaptikCMS is a flat-file content management system built in PHP. Content is stored as individual JSON files — no database engine, no configuration overhead, no moving parts.

It was built for developers, designers, artists, creative professionals, writers, bloggers, or anyone who want a CMS that is fast by default, easy to deploy anywhere, and simple enough to theme from scratch without fighting a framework.

Installed footprint: ~2MB. Zero runtime dependencies beyond PHP.


Why SynaptikCMS?

SynaptikCMSWordPressGravKirbyBluditTypemill
Database requiredMySQL
Admin panel includedPlugin
WYSIWYG + Markdown
Theme system✓ hooks/filters✓ Twig
Plugin system
One-click updates✓ core/themes/plugins
Built-in i18n✓ EN/FR/ESPlugin
Image optimization✓ built-inPluginPluginPluginPluginPlugin
Built-in analytics✓ pluginPluginPluginPluginPluginPlugin
Composer required
Install footprint~2 MB~86 MB~52 MB~20 MB~9 MB~10 MB
LicenseMIT freeGPL freeMIT freePaidMIT freeMIT free
Install time~2 min~10 min~5 min~5 min~3 min~5 min

SynaptikCMS is not trying to replace WordPress at scale. It is the right tool when you want a real admin panel with no database — for portfolios, documentation sites, small business sites, personal blogs or any project where simplicity and load speed matter.


Features

Content

  • 3 content types — Articles, Pages, Projects (Portfolio)
  • WYSIWYG and Markdown editors — switch per post, content preserved
  • Draft system — autosave at user-defined intervals, one-click publish
  • Scheduled publication — set a future date, CMS publishes automatically
  • Categories and Tags — hierarchical categories (up to 3 levels), tag management, merge and purge orphans
  • Custom Fields — define extra fields per content type, use them in your theme
  • Related Content — manual selection or automatic suggestions based on shared tags and categories
  • Image Galleries — one or more galleries per post, 4 layouts: grid, masonry, justified, carousel
  • Shortcodes[toc], [gallery], [callout], [quote], [button], [recent_articles], [recent_projects], [articles_by_tag], [contact_form]

Admin Panel

  • Media Manager — upload, browse, rename, move with drag and drop, batch compression
  • Menu Builder — drag and drop custom navigation, nested items, external links
  • Template Editor — live-edit your active theme files with automatic backup before each save
  • SEO Overview — audit meta titles, descriptions and keywords across all content in one view
  • Alt Text Assistant — bulk-edit alt text and captions for gallery images
  • Sitemap Generator — one-click XML sitemap, submit URL shown inline
  • Backup and Restore — full ZIP backup of /data/, /files/ and settings; restore in one click
  • Automatic Updates — one-click updates for the CMS core, themes, and plugins, with an automatic safety backup before each update
  • Translation Editor — add or edit translations with the built-in editor (both for back-end and front-end), or simply customize the text strings displayed on your site

Themes

Plugins

  • Self-contained extensions under /plugins/ — own routing, data storage, and admin screens, with zero core file edits required
  • Plugin pages render inside the real admin panel (sidebar entry, standard layout) once activated
  • Install by uploading a .zip from Admin → Tools → Extensions, activate and deactivate with one click
  • Activation state tracked separately from installation — deactivating a plugin preserves its data
  • Official plugins can be downloaded at https://synaptikcms.com/plugins/
  • Full plugin developer documentation at https://synaptikcms.com/docs/tools/plugin-system/

SEO and Performance

  • Meta title, description, keywords per content item
  • Open Graph and Twitter Card tags
  • JSON-LD schema markup
  • Canonical URLs
  • RSS feed auto-injected in <head>
  • Per-request cache for settings and content indexes
  • Split-file architecture — single item pages load exactly one JSON file

Internationalisation

  • Front-end and admin panel fully localised
  • Ships with English, French, Spanish
  • Add a new language by dropping a JSON file in /lang/ or by using the built-in translation editor

System Requirements

Server

RequirementMinimumNotes
Web serverApache 2.2+Nginx works but requires manual rewrite config
PHP7.4+8.0+ recommended
DatabaseNone required

PHP Extensions

Required

ExtensionUsed for
jsonAll read/write on .json data files
mbstringSearch, contact form validation, UTF-8 string ops
hashHMAC tokens (CSRF, theme preview signing)
sessionAdmin authentication
pcreSlug sanitisation, HTML purification, content parsing
filterEmail validation in contact form
fileinfoMIME type detection on file uploads

Required for image features

ExtensionUsed for
gdImage resizing, thumbnails, JPEG/PNG/GIF optimisation
GD + JPEGHandling .jpg/.jpeg uploads
GD + PNGHandling .png uploads

Optional

ExtensionUsed for
GD + WebPWebP conversion — gracefully disabled if absent
ZipArchiveTheme and plugin upload, and automatic updates

Apache

Required modules: mod_rewrite, mod_authz_core
Required directive: AllowOverride All on the document root

The CMS ships with a root .htaccess handling URL routing, security headers and cache rules:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]

Nginx (not officially supported)

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
location ~ ^/(data|bckps)/ { deny all; }
location ~ (settings\.json|admin-credentials\.php)$ { deny all; }

Filesystem Permissions

The following paths must be writable by the PHP process:

PathRequired for
/settings.json, install.lock during setup
/data/All content read/write
/files/Media uploads
/bckps/Backups, CSRF secret
/admin/Credentials, draft autosave
/theme/Theme ZIP upload
/plugins/Plugin ZIP upload and each plugin's own data storage

Recommended: 755 for directories, 644 for files.

Browser (Admin Panel)

BrowserMinimum
Chrome / Edge80+
Firefox75+
Safari13.1+

Internet Explorer is not supported.

Setup Checklist

[ ] Apache 2.2+ with mod_rewrite enabled
[ ] AllowOverride All on the document root
[ ] PHP 7.4+ (8.0+ recommended)
[ ] Extensions: json, mbstring, hash, session, pcre, filter, fileinfo
[ ] GD with JPEG and PNG support
[ ] ZipArchive recommended (theme/plugin upload, auto-updates)
[ ] Root .htaccess in place
[ ] Write permissions on: /, /data/, /files/, /bckps/, /admin/, /theme/, /plugins/

Theming

Themes live in /theme/{theme-name}/. A minimal theme requires:

theme/
└── my-theme/
    ├── css/
    │   └── style.css
    ├── header.php
    ├── footer.php
    └── home.php

Optional overrides: content-articles.php, content-pages.php, content-projects.php, content-list.php, 404.php, functions.php, page-templates/, partials/.

The Theme API exposes hooks (add_action), filters (add_filter), and helpers (render_site_logo, render_header_scripts, render_navigation, etc.). See the documentation for the full reference.


Plugin Development

Plugins live in /plugins/{plugin-name}/. A minimal plugin requires:

plugins/
└── my-plugin/
    ├── plugin.json
    └── my-plugin-init.php

Unlike themes, plugins are not tied to the active theme — once activated from Admin → Tools → Extensions, a plugin runs regardless of which theme is in use, and can register its own admin sidebar entry and full admin page rendered inside the standard admin layout. See the plugin system documentation for the full developer reference: the plugin API, admin page rendering, front-end shortcode integration, session reuse, CSRF, i18n, and how to package a plugin for distribution.


License

MIT — free for personal and commercial use. See LICENSE.md.


Contributing

Issues and pull requests are welcome. Please open an issue before submitting a large PR to discuss the change.


Made with ❤️ by @synaptikcms