Skip to content

What is Skriva?

Skriva (Swedish for "to write") is a lightweight, single-binary personal blog engine written in Go. It's designed for developers who want a full-featured blog with modern web standards, zero operational complexity, and complete ownership of their stack.

Core Principles

  • Single binary — The Go binary embeds default themes, admin UI, and all assets
  • Two volumes only/data/content (posts, pages, media, themes) and /data/config (settings, secrets, database)
  • Read-only container — The container filesystem is read-only; all writes go to the two mapped volumes
  • No external dependencies — No CDN, no external JS/CSS, no tracking. Everything is self-contained
  • Hot-reload — File changes in content/config are detected and applied without restart
  • Migration = copy two directoriesscp the two volumes to a new server, run the container, done

Features at a Glance

CategoryFeatures
ContentMarkdown + YAML frontmatter, GFM tables, syntax highlighting, TOC, series, scheduled posts
AdminDashboard with stats, live-preview editor, comment moderation, bulk operations
NewsletterCompose in Markdown, schedule, A/B testing, open/click analytics, SMTP sending
Securitybcrypt + TOTP + WebAuthn, CSRF, rate limiting, IP lockout, SSRF protection, audit trail
IndieWebActivityPub, Webmention, IndieAuth (PKCE), Micropub (CRUD + media)
Themes4 bundled (Classic, Newsletter, GitHub, Editorial), custom theme support, dark mode
SEOSitemap, RSS, Open Graph, Twitter Cards, JSON-LD, canonical URLs, auto OG images
OpsDocker, auto-TLS, Prometheus metrics, health checks, versioned DB migrations

Tech Stack

ComponentChoiceRationale
LanguageGo 1.25+Single binary, fast, stdlib HTTP
HTTP Servernet/http (stdlib)No framework dependency
DatabaseSQLite via modernc.org/sqliteNo CGO, embedded, portable
Markdowngoldmark + ChromaCommonMark compliant, syntax highlighting
Templatinghtml/template (stdlib)Secure by default
ConfigYAMLHuman-readable
Containergcr.io/distroless/staticMinimal attack surface

Performance

MetricTarget
Cold start< 500ms
Page render< 10ms
Memory (idle)< 30MB
Container image< 30MB
Lighthouse> 95 all categories

Released under the MIT License.