Documentation

Last updated: 2026-09-27

Backend families

Backends are where Everlock's service logic lives. They should stay transport-agnostic and avoid depending directly on SSH, HTTP, SMTP, or other frontend libraries.

Implemented families

BackendWhat it handles
backend-git-sshGit wire operations over the SSH transport
backend-git-httpGit wire operations over HTTPS (smart HTTP), plus the repository web UI and workflow runs
backend-ai-sshEmbedded AI prompting through the admin SSH session, plus image captioning for backend-image-http
backend-site-httpStatic files and rendered Markdown sites from git-backed stores
backend-image-httpImage and video storage plus gallery-like HTTP behavior, including an e-paper photo frame endpoint
backend-admin-ssh / backend-admin-http / backend-admin-mcpAdmin interaction surfaces — thin outlets over the shared everlock-admin-core command engine
backend-dns-dnsGlobal authoritative DNS record logic served through frontend-dns
backend-oci-httpOCI distribution-compatible registry with Everlock auth and store-backed persistence
backend-mail-smtpInbound mail storage, forwarding, and submission-backed delivery rules
backend-mail-imapRead/write IMAP access on top of the SMTP backend's mail store, sharing the same versioned storage
backend-calendar-httpCalDAV calendars with Everlock auth and versioned .ics storage
backend-contacts-httpCardDAV contacts with Everlock auth and versioned .vcf storage
backend-oauth-httpOAuth2 / OIDC token issuance with versioned client and key storage
backend-vault-httpBitwarden-compatible, end-to-end-encrypted password vault with versioned per-instance storage
backend-files-httpWebDAV file shares with Everlock auth and one versioned store per share

backend-dns-http holds the capability trait for a DNS management API; DNS records are managed through the admin console (/dns) today.

Shared resource components

Some resources live in their own component so several backends share one copy — a heavy runtime that should be loaded once, or protocol machinery that would otherwise be written twice:

CrateOwned resourceConsumers
everlock-mail-storageMail tree layout, IMAP UID allocator, MailEventBusbackend-mail-smtp, backend-mail-imap
everlock-ai-runtimeEmbedded GGUF model + self-developed gguf-runner worker threadbackend-ai-ssh, backend-image-http
everlock-acmeACME account + challenge handlingfrontend-http
everlock-davWebDAV responses, the lock table, property parsing, and the conformance suite each surface runs against itselfbackend-files-http, backend-calendar-http, backend-contacts-http
everlock-backend-gitGit protocol sessions, pack handling, merges, git.gc, and retentionbackend-git-ssh, backend-git-http
everlock-admin-coreThe admin command registry and every command's typed inputbackend-admin-ssh, backend-admin-http, backend-admin-mcp
everlock-markupMarkdown rendering and syntax highlightingbackend-site-http, backend-git-http

Multi-instance model

Backends differ in whether they can serve multiple independent instances from a single Everlock process, each on its own vhost.

BackendModelInstances managed via
backend-site-httpMulti-instance, multi-vhost/site create / /site set — applies live
backend-image-httpMulti-instance, multi-vhost/image create / /image set — applies live
backend-oci-httpMulti-instance, multi-vhost/oci create / /oci set — applies live
backend-calendar-httpMulti-instance, multi-vhost/calendar create / /calendar set — applies live
backend-contacts-httpMulti-instance, multi-vhost/contacts create / /contacts set — applies live
backend-vault-httpMulti-instance, multi-vhost/vault create / /vault set — applies live
backend-files-httpMulti-share, multi-vhost/files create / /files set — applies live
backend-git-sshMulti-repo, single backend/git repo create — repositories within one backend
backend-git-httpMulti-repo, single backendserves the same repositories; pins its vhost via the git.http.vhost server setting — applies live
backend-mail-smtp / backend-mail-imapSingle shared store, multi-domain/mail domains create — domains within one store
backend-dns-dnsGlobal, single instance/dns zones create — zones within one backend

Where the table says applies live, the command builds the instance and swaps it in while the process runs, and the answer says so — active immediately. The one path that asks for a restart is a command run while the backend itself is not running: the change is written to config and takes effect when the backend next starts. A .local vhost is announced over mDNS the moment the command returns. | backend-admin-ssh / backend-admin-http / backend-admin-mcp | Single instance | CLI flags; the HTTP outlets pin their vhost via the admin.http.vhost / admin.mcp.vhost server settings | | backend-ai-ssh | Single instance | CLI flags only |

Hot-reload means vhost routing updates take effect immediately without restarting Everlock. Backends that require restart do so because their instance initialisation involves async startup work (spawning workers, opening connections) that cannot be done inline in a command handler.

Design rule

A backend should expose domain operations and storage rules. It should not own SSH packet parsing, HTTP routing, or SMTP session handling. Those live in frontends.

For a broader summary, continue with Frontends or Primitives.

backends reference