# The whole site in two files

No server or plugin chores: just the Eile program and an SQLite database. There’s no PHP or MySQL to install, and one command runs the site and its manager.

$ `curl -fsSL https://github.com/a-sharapov/eile/releases/latest/download/install.sh | bash`

[Download](https://github.com/a-sharapov/eile/releases/latest) [GitHub](https://github.com/a-sharapov/eile) [Cookbook](https://eile.site/en/cookbook)

Linux and macOS, x64 and arm64 v0.1.0-alpha.9.1 *alpha* GPL-3.0

![The Eile manager: the page tree on the left, a kitchen studio project page with title, address, summary and text on the right](https://eile.site/media/screens/editor-en-light.webp?v=df41a512bf39c521)  ![The Eile manager: the page tree on the left, a kitchen studio project page with title, address, summary and text on the right](https://eile.site/media/screens/editor-en-dark.webp?v=fd3ccb09e6503c6c)

[How to build a site · 1:24 video](https://eile.site/media/video/howto-en.mp4?v=4ee6374d9d10ac51)

Screenshots show the kitchen studio site from the cookbook.

## Where the time usually goes

The site itself comes together quickly. The time goes on everything around it: servers, plugins, moves and edits the user asks for by phone. Here is what Eile takes off your hands.

- Before a user sees anything, you set up a web server, PHP and MySQL. Eile installs with one command and runs the site and its manager with another.
- A plugin update breaks the layout or takes the admin down. SEO, forms, search, backups and HTTPS are built in. There is one update, cms update, and it checks the new version first.
- Moving to another host eats an evening: a database dump, files, configs. The whole site is two files, the program and an SQLite database. Copy them, and the site runs on the new server.
- One typo in a template, and visitors get an error instead of the site. A template with an error won’t save: the manager points at the line, and the site keeps the previous version.
- The user is afraid to touch the admin and calls you about every comma. A clear page tree, text in blocks and revision history: any version comes back with one click.
- Leads from the site get lost in email. Form entries land in the manager with statuses and ping you in Telegram or by email.

## What the two files replace

A usual site rests on a web server, PHP, a database and a dozen plugins, each with its own updates and failures. In Eile the whole site is an executable and an SQLite database. Those two are all you update, move and back up.

### Usually

a typical PHP CMS site

1. Web server and its config
2. PHP with extensions
3. Database server
4. The CMS itself
5. Cache plugin
6. SEO and sitemap plugin
7. Forms plugin
8. Backup plugin
9. Cron for background jobs
10. Certbot for HTTPS

Every layer brings its own updates, settings and ways to break.

### Eile

the whole site

`cms`executable server, manager, Svelte compiler, migrations, HTTPS

`site.db`SQLite database pages, templates, media, users, form entries

`cms backup copy.db` backs up the whole site into one file. To move, copy two files.

## A fast site without a cache plugin

No cache, CDN or compression to tune. The server sends a page as ready HTML from memory, the cache clears exactly where something changed, and JavaScript reaches the page only when it has to.

0.1 ms1 ms10 ms100 ms1 s **0.23 ms** a page from cache**≈0.5 ms** first render of a page, CPU time**16.7 ms** one frame of a 60 Hz screen**100 ms** below this a response feels instant

Measured on a 3,000-page site: median (p50), server time without network. Logarithmic scale. [How it was measured: docs/roadmap.md](https://github.com/a-sharapov/eile/blob/main/docs/roadmap.md)

**This page runs on Eile too** Measured by your browser, right now. HTML… island scripts… server reply incl. network…

Two-phase cache The whole page sits in memory, while live parts such as forms or a cart are drawn on every request.

Precise invalidation Editing a page or a component clears only the pages that depend on it.

ETag, br and gzip Compressed copies are prepared ahead; a repeat visit gets a 304 with no body.

JavaScript only in islands A page without islands ships no script at all. This one has three islands (copy, menu and the probe above) and one line in the head that remembers your theme.

## Users edit on their own, and any edit can be undone

The whole site shows as a tree, the way it nests. Text is built from blocks, pictures come from the media library, and a page goes live at once or on a schedule. If an edit goes wrong, the history brings back any version with one click.

![Site overview in the manager: every page in one table, with address, template, menu and publishing edited right in the row](https://eile.site/media/screens/overview-en-light.webp?v=d1cd442d9dc3a936)  ![Site overview in the manager: every page in one table, with address, template, menu and publishing edited right in the row](https://eile.site/media/screens/overview-en-dark.webp?v=b2781f4197a1eae4)

Page tree An id on every page, drag and drop, and drafts in italics.

Text in blocks Paragraphs, headings and images mixed with components; the parameter form builds itself.

Scheduled publishing A page goes live and comes down on its own at the set time.

Revision history Word-level diffs between versions and a one-click restore.

Quick jump Ctrl K takes you to any page, element or file in a couple of keystrokes.

Media library Smaller copies of each picture for different screens are made for you, and the alt text fills in when you insert it.

## Layouts with no build and no deploy

Templates are plain Svelte, edited right in the browser. Save, and the site has changed: no npm, no bundler, no upload. A template with an error won’t save, so a typo can’t take the site down.

Blog template

```
<script>
  import Layout from '$components/Layout';
  import { link, listing } from '$core';

  let { page, site } = $props();
  const posts = listing(page.id, { perPage: 10 });
</script>

<Layout {page}>
  <h1>{page.longTitle || page.title}</h1>
  {#each posts.items as post (post.id)}
    <a href={link(post.id)}>{post.title}</a>
  {/each}
  <p>{site.custom.phone}</p>
</Layout>
```

Edits go live at once Templates and components compile on save, with no build and no deploy.

A mistake can’t take the site down If it doesn’t compile, the save is rejected with the error’s location and the site keeps the previous version.

JavaScript on demand Pages go out as plain HTML. An island component hydrates in the browser only when included as one.

## A first draft from a few words

An empty field no longer holds up the work. The wand by a field drafts a title, a description, page text or even a Svelte template. Say what you need, look at the draft, then insert it or ask for another.

![The “Generate with AI” box in the template editor with a request to add a booking button](https://eile.site/media/screens/ai-en-light.webp?v=194e8a027738178d)  ![The “Generate with AI” box in the template editor with a request to add a booking button](https://eile.site/media/screens/ai-en-dark.webp?v=3ecff12a30a6420b)

1. Click the wand by a field or press Alt+I.
2. Write a few words: “shorter”, “a one-line summary”, “add a booking button”.
3. Look at the draft, then click Insert or Another one.

Text and code Titles, descriptions, page text, and also templates, components and plugins.

Knows your site The request carries the site name and language, the field and where it sits, so a few words are enough.

Your model DeepSeek, OpenAI or any model with the same API, even a local one. The key stays on the server and never goes into a site backup.

Your rules Set the tone and writing rules once in settings, and they go with every request.

## Everything you’d install plugins for is built in

SEO and AI discoverability, forms with an inbox, search, backups, HTTPS and translations. Nothing to pick, combine and update one by one: they come and update together with Eile.

Usually installed In Eile

### Discoverability

an SEO plugin canonical, Open Graph and JSON-LD with no setup

a sitemap plugin sitemap.xml and robots.txt with rules for AI bots

usually not there at all llms.txt and a Markdown version of every page for AI

a redirects plugin old addresses redirect to new ones automatically after a rename

### Forms and inbox

a forms plugin a form is plain HTML5 markup, entries land in the manager with statuses

an SMTP plugin and a bot notifications to Telegram and email

a CAPTCHA spam protection without a CAPTCHA: honeypot, stamp and rate limit

### Site search

a search plugin or an external service search that knows Russian word forms («книги» finds «книгу»), with highlighted snippets

### Peace of mind

a revisions plugin revision history with diffs and restore

a backup plugin and cron scheduled backups of the whole site

checking links by hand diagnostics: broken links, pages without a description, images without alt

### Server

Certbot and a proxy HTTPS on its own through Let’s Encrypt, no proxy needed

updating files over FTP cms update fetches a new version and checks SHA256

a monitoring service failure alerts to Telegram and email

### Languages

a multilingual plugin site branches in different languages and translation dictionaries in the manager

## Your first site today

One command sets up a ready site: a blog, a portfolio, a company site, a showcase or a shop.

1. 1 Install `curl -fsSL …/install.sh | bash` The script picks the build for your system, checks SHA256 and puts cms on your PATH.
2. 2 Create a site `cms new blog --db site.db` Starters: blog, portfolio, company, showcase, shop. Without one you get an empty database with a welcome page.
3. 3 Run `cms --db site.db` The site and manager open on localhost:8080. On first start the server prints a link to create the admin.

Step by step, from an empty folder to a site online: [Cookbook](https://eile.site/en/cookbook)

$ `curl -fsSL https://github.com/a-sharapov/eile/releases/latest/download/install.sh | bash`

[Download](https://github.com/a-sharapov/eile/releases/latest) [GitHub](https://github.com/a-sharapov/eile) [Cookbook](https://eile.site/en/cookbook)

Linux and macOS, x64 and arm64 v0.1.0-alpha.9.1 *alpha* GPL-3.0

This is an alpha: you can build sites today, but breaking changes may land before 1.0. Run cms backup before updating.