fvBlog (Fast Visual Blog) is a free, open-source blogging platform built for speed and visual impact. Server-rendered PHP with HTMX and Alpine.js keeps page loads instant on low-cost shared hosting — no Node.js needed on the server.
Free & open source · GPL-3.0 · PHP 8.1+ · MySQL or MariaDB
Why fvBlog instead of a heavyweight CMS
- Server-rendered PHP with a built-in page and fragment cache serves guests near-static HTML, backed by strong ETags and instant 304 Not Modified responses.
- No Node.js runtime, no build step and no query-heavy page loads: the whole platform runs comfortably on a budget shared hosting account using less than 16 MB per request.
- You own everything: content, themes and plugins live in your own folders, with GPL-3.0 source code, an exportable database and no vendor lock-in.
Features
- Ultra-lightweight and fast: server-rendered PHP, minimal dependencies and a file-based page and fragment cache for guests with gzip HTML, strong ETags and instant 304 Not Modified responses.
- Built for budget hosting: PHP 8.1 – 8.5, Apache (.htaccess) or Nginx and MySQL/MariaDB on any standard shared host, VPS or container.
- High visual impact with installable themes: sandboxed Latte templates, light/dark mode, modular block slots (header, nav, hero, content, sidebar, footer, credits), a theme gallery, previews and four bundled designs.
- Reactive front end with HTMX: infinite scroll, instant search and tag filtering with zero page reloads.
- Flexible visual story editor: WYSIWYG editing with safe HTML sanitization, a raw code toggle and a full-screen desktop workspace.
- Media library with optimized uploads: multi-file upload, SSRF-guarded URL import, instant search, captions and automatic WebP conversion with responsive derivatives.
- Organized admin settings: site identity, story URL format, SEO and OpenGraph defaults, custom robots.txt directives, debug mode, environment switch and one-click cache purge.
- Rock-solid security: OWASP Top 10 defenses, admin and contributor roles, CSRF tokens on HTMX requests, secure sessions and an automated theme scanner.
- Extensible plugin system: action and filter hooks for analytics, widgets and custom authentication such as OAuth with Google, Microsoft or Apple.
- Headless publishing API: token-authenticated REST endpoints for automated, multi-platform story publishing.
- Multilingual by design: the public site and the admin panel support independent languages, and stories, tags, navigation menus and system strings can all be translated.
- Mobile-first responsive design: the public blog and the entire admin panel are engineered for phones, tablets and desktops.
- First-run installation wizard and one-click updates: a 4-step browser setup checks the host, tests the database, creates the administrator and locks the installer, while versioned migrations upgrade the schema in place.
Tech stack
| Layer | Purpose |
|---|---|
| PHP 8.1 – 8.5 | Backend interpreter, CI-verified on every supported version |
| Flight PHP | Micro-framework for routing and dependency injection |
| HTMX | Infinite scroll, instant search and partial page swaps without an SPA |
| Alpine.js | Lightweight reactive state for menus, theme switching and modals |
| MySQL / MariaDB | Relational storage through PDO prepared statements |
| Apache or Nginx | Standard .htaccess rewriting or a provided Nginx server block |
Installation
Try it locally with Docker
- Download the fvBlog release and unpack it into a working folder
- Copy src/config/config.example.php to content/config.php
- Start the stack with docker compose up -d
- Open https://localhost:8889 and finish the setup wizard
cp src/config/config.example.php content/config.php
docker compose up -dThe Docker stack ships PHP 8.1 with Apache and MySQL 8.0; any supported version from 8.1 to 8.5 is one build argument away.
Install on shared hosting
- Upload the fvblog codebase and make content/ writable (chmod -R 775 content)
- Point the document root to src/public and enable mod_rewrite (Apache) or use the provided Nginx block
- Open your site: without content/config.php, fvBlog redirects to /install automatically
- Complete the 4-step wizard (environment, database, administrator and provisioning) and start publishing
The installer checks the requirements itself, and schema migrations are applied automatically after every update.
Requirements
- PHP 8.1 to 8.5 with pdo_mysql, mbstring, curl, gd or imagick, openssl, json and fileinfo
- MySQL 5.7+ or MariaDB 10.3+ (MySQL 8.0 recommended)
- Apache 2.4+ with mod_rewrite, or Nginx 1.18+
- 256 MB of available RAM and around 100 MB of disk for the core installation
Frequently asked questions about fvBlog
What is fvBlog?
fvBlog (Fast Visual Blog) is a free, open-source blogging platform written in PHP. It combines server-rendered pages, an internal cache and HTMX interactivity to stay fast on inexpensive shared hosting, while offering a modern visual editor and an installable theme system.
Is fvBlog free?
Yes. fvBlog is released under the GPL-3.0 license, so you can download it, self-host it, modify it and use it commercially at no cost. The only costs are your own hosting and domain.
Do I need Node.js or a build step to run fvBlog?
No. fvBlog runs on PHP and MySQL/MariaDB only. The front-end assets are pre-built and served directly, so no Node.js runtime, bundler or package manager is needed on the server — you just upload the files.
Can I write and publish without touching code?
Yes. The admin panel covers stories with a visual editor, tags, media, navigation, users, themes and site settings. Raw HTML editing is available for advanced layouts, and every self-hosted install gets a first-run wizard and one-click updates.
Can I customize the design?
Themes are sandboxed Latte template packages with a theme.json manifest, color tokens, custom CSS and opt-in JS. You can upload a zip, duplicate a theme, create one from the built-in design, preview it and switch the active theme from the gallery at /admin/themes. Four themes ship by default.
Does fvBlog support multiple languages?
Yes. The public site and the admin panel each support their own languages, and stories, tags, navigation menus and system strings can be translated independently. Plugins can add automated translation providers such as Google Translate or DeepL.
Can I publish stories from scripts or other apps?
Yes. The headless REST API uses per-key token authentication with rate limiting, so you can create and manage stories from automation scripts or external applications without opening the admin panel.

