Notes from the framework floor.
Release notes, implementation essays, and plugin field reports from the Umbral codebase. Less launch theater, more useful detail.
From GraphQL to Private Media - What Shipped in Umbral Since v0.0.6 - v0.0.11
Five releases in three weeks. A full GraphQL API derived from your models, a generated TypeScript client, admin dashboards, a security-hardening sweep, and media that's finally private by default. A tour of what landed after July 9.
Read the latestTwenty-one plugins, one contract: a tour of the Umbral toolbox
Auth, admin, REST, background jobs, realtime, storage, multi-tenancy — in Umbral they're all plugins, structurally identical to one you'd write yourself. Here's the whole toolbox, and why 'it's just a plugin' is the most important sentence in the framework.
Ship a SaaS this weekend, in Rust, without the boilerplate
You have an idea and two free days. Here's how a batteries-included Rust framework takes you from an empty repo to a real multi-tenant app — auth, an admin, a REST API, background jobs — before Sunday night. No DTOs, no glue code, no yak-shaving.
The week we tried to break our own framework
A batteries-included framework makes a quiet promise: the easy path is the safe path. So we spent a week attacking our own defaults — and shipped a stack of fixes. Here's what 'secure by default' actually costs, and why it's the feature you never see.
Forms, admin, and REST without the boilerplate
One model declaration drives the form, the admin CRUD, and the REST resource. Here's how the same struct powers server-rendered forms with validation, an auto admin, and a JSON API — each an opt-in plugin.
The plugin contract: batteries as real plugins
Dependencies point inward toward the core; control flows outward through a trait. That single rule is what lets you keep the official auth, swap it for your SSO, or build a project-specific plugin — all behind the same boundary.
Managed migrations: the loop that is the product
Autodetection diffs your models against the last snapshot and emits ordered, reversible operations. inspectdb ports an existing database in. Here's how the declare → migrate → change → migrate loop actually works.
Building the Umbral website with Umbral
The best proof that a framework can build a real, content-heavy site is to build one. This site — directory, reviews, discussions, admin, forms — is an Umbral project using the same apps, migrations, and plugins it documents.
Why Umbral exists
Rust has fast routers and solid ORMs. What it didn't have was the batteries-included feeling: declare your data and get migrations, an admin, forms, and a REST API almost for free. Umbral is that feeling, rebuilt on Rust's guarantees.