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 an estimate. Order a turnkey setup and get a ready site with one month of support.







