Plinth

A full-stack personal website platform you can operate yourself.

Run a Leptos-powered site with server-side rendering, WASM hydration, Postgres-backed content, semantic search, Typst publishing, image proxying, and reproducible Nix deployment.

SSR plus WASM hydration

Serve fast first loads through Leptos SSR, then hydrate client-side islands for interactive navigation and controls.

Postgres and pgvector

Keep content in a relational database with pgvector-backed semantic search for posts, portfolio entries, activity, and tags.

Typst and Markdown publishing

Author posts in Markdown or Typst; the CLI handles frontmatter, image references, HTML rendering, embeddings, and publishing.

Immich image proxy

Upload images through the CLI, store them in Immich, and serve them through Plinth with cache-friendly proxy URLs.

Declarative NixOS deployment

Build reproducible packages and run Plinth through a NixOS module with systemd hardening and reverse-proxy support.

Operational visibility

Configure OpenTelemetry export and privacy-friendly Plausible analytics without turning observability into an application rewrite.

From clone to local site

The development flow is intentionally direct: enter the Nix shell, start the local services, run the Leptos watcher, and publish content through the CLI.

1

Clone

git clone https://codeberg.org/caniko/plinth.git && cd plinth

2

Enter Nix

nix develop

3

Start Postgres

./scripts/dev-db.sh start

4

Run the site

cargo leptos watch

5

Publish content

cargo run --package plinth-cli -- publish my-post.md

Built for ownership

Plinth is meant for operators who want a personal site that is inspectable, reproducible, and integrated with the infrastructure they already control.

Reproducible outputs

Nix builds produce the server package, CLI, static assets, documentation, and this marketing site from the same repository.

Typed Rust workspace

Shared domain types connect the server, client, CLI, and project-site tooling without stringly-typed boundaries.

Docs stay authoritative

The marketing page stays concise while the full mdBook documentation remains available under /docs/.