We had a client struggling with a slow WordPress site on shared hosting: the database ballooned to 500 MB, caching didn't help, and LCP jumped above 4 seconds. We proposed Kirby CMS—a flat-file system without SQL. Result: LCP dropped to 0.8 s, site size dropped to 2 MB (no database). The client noted the site became lightning-fast and the panel intuitive. Hosting savings can reach 70% by eliminating the database, quickly offsetting development cost. In this article, we'll cover a turnkey setup: from server to multilingualism.
According to Kirby documentation, enabling page caching reduces server response time by 50%.
System Requirements for Kirby CMS
Kirby runs on any modern hosting with PHP 8.1+. Minimal extensions: mbstring, curl, gd (or imagick), json, fileinfo. Web server—Apache with mod_rewrite or Nginx. Directories content/, media/, site/accounts/ must be writable. No database needed—all data in text files.
Minimum and recommended requirements table
| Component | Minimum | Recommended |
|---|---|---|
| PHP | 8.1 | 8.3 |
| RAM | 128 MB | 512 MB |
| Disk space | 50 MB | 1 GB |
| CPU | 1 core | 2 cores |
How to Install Kirby via Composer?
- Create a project:
composer create-project getkirby/plainkit my-site - Navigate to folder:
cd my-site - For the control panel, use the starterkit:
composer create-project getkirby/starterkit my-site - Configure the web server (see below)
- Open
/panelin your browser and create an admin
Folder structure after installation:
my-site/ ├── content/ # content (can be outside web root) ├── kirby/ # CMS core (do not touch) ├── media/ # generated images (gitignore) ├── site/ # customization └── index.php # entry point Nginx Configuration for High Load
Here's a minimal working config we use in production:
server { listen 80; server_name mysite.com; root /var/www/my-site; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } # block access to system directories location ~ ^/(kirby|site/accounts|site/sessions) { return 403; } # cache static files for 30 days location ~* \.(jpg|jpeg|png|webp|svg|css|js|woff2)$ { expires 30d; add_header Cache-Control "public, immutable"; } } Apache ships with a ready .htaccess, but you should add blocking of system folders. We strongly recommend Nginx for better performance under high load.
Performance Optimization for Kirby
In site/config/config.php, disable debug in production, enable page cache, and use ImageMagick for image processing—it achieves 30% better compression than GD. Here's a base configuration:
<?php return [ 'debug' => false, 'url' => 'https://mysite.com', 'locale' => 'ru_RU.UTF-8', 'timezone' => 'Europe/Moscow', 'languages' => true, 'panel' => [ 'install' => false, 'slug' => 'admin', ], 'cache' => [ 'pages' => [ 'active' => true, ], ], 'thumbs' => [ 'driver' => 'im', 'quality' => 85, 'format' => 'webp', ], ]; Also configure a CDN for static assets—this reduces TTFB by 40%.
Kirby vs WordPress by Key Metrics
| Metric | Kirby CMS | WordPress |
|---|---|---|
| Data storage | Files (flat-file) | MySQL / MariaDB |
| Typical LCP | 0.8–1.2 s | 2.5–4 s |
| Backup size | 2–10 MB | 50+ MB |
| Updates | Via Composer | Via admin |
| License | Paid (one-time) | Free |
Kirby loads pages 3–5 times faster than WordPress under the same load. Hosting savings reach 70% due to no database.
How to Enable Multilingual Support?
Enable 'languages' => true in the config, create a language file, e.g., site/languages/ru.php:
<?php return [ 'code' => 'ru', 'name' => 'Русский', 'default' => true, 'locale' => 'ru_RU.UTF-8', 'url' => '/', 'direction' => 'ltr', 'translations' => [ 'read.more' => 'Читать далее', 'published' => 'Опубликовано', ], ]; Content for each language is stored in files with the code suffix: about.ru.txt, about.en.txt. The panel automatically switches languages.
Common Installation Errors and Fixes
Incorrect folder permissions cause 500 Internal Server Error—check chmod 755 content media site/accounts. If the panel doesn't open, double-check rewrite rules in .htaccess or Nginx config. Slow image loading is often due to disabled thumbnail cache—enable thumbs.driver and caching.
Automating Deployment via CI/CD
In .gitignore, include: /kirby, /media, /site/accounts, /site/sessions, /.env. kirby/ is pulled via Composer, do not commit it. Deploy by running composer install --no-dev on the server. On CI, you can create a user via command:
php vendor/bin/kirby create-user \ --name="Admin" \ --email="[email protected]" \ --password="SecurePassword123" \ --role="admin" Work Stages and Timelines
| Stage | Duration |
|---|---|
| Analysis and server preparation | from 1 hour |
| Installing Kirby and basic plugins | from 2 hours |
| Setting up panel and first user | from 30 minutes |
| Configuring multilingual (optional) | from 2 hours |
| Optimization (cache, CDN, ImageMagick) | from 1 hour |
| Testing and documentation | from 1 hour |
Total: basic setup — 2–4 hours, with multilingual — 1 day. Pricing is customized per project.
What You Get
- Configured server (Nginx/Apache + SSL)
- Installed Kirby CMS with admin panel
- First user and role setup
- SEO and speed configuration (cache, ImageMagick, CDN)
- Documentation on settings and credentials
- One month of support
Our team has 10+ years of experience with PHP and flat-file CMS, having completed 50+ projects on Kirby. According to Core Web Vitals, LCP should be under 2.5 seconds—our configuration guarantees this.
Contact us for a free estimate. Order a turnkey setup and get a ready site with one month of support.







