2026
- 2026-08-201.15.6 — A deploy stops waiting for a cron tick, and stops lying about the job that did it
A single-node release spent most of its tail doing nothing: after the app was already serving, the deploy killed the job engine that was running it and then waited up to a full minute for a once-a-minute cron entry to start a replacement. That wait is the entire difference between the fastest and sl…
- 2026-08-201.15.5 — Error pages that look like your product
Every project now ships styled error pages — 400, 403, 404, 500, 503 and an honest "nothing published here yet" root — in the same visual language as the hosted auth pages, light and dark. Browsers get a real page; API clients receive byte-for-byte the JSON they received before. And a fresh install…
- 2026-08-201.15.4 — The Deploys tab loads; Edge can serve HTTPS-only
A patch release with one fix that matters more than its size: the app Deploys tab read releases and deploy history from two URLs that do not exist, so it had never loaded since it shipped — the panel simply stayed empty. 1.15.3 made that visible by rendering an error instead of nothing; this release…
- 2026-08-201.15.3 — A click that does work changes the screen; provisioning survives a partial teardown
A patch release. The admin portal gets a shared responsiveness contract: a click that goes and does work paints a pending state, a panel whose data fails to load says what broke and offers a retry instead of leaving the previous screen in place, and a mutating action cannot be double-submitted. The…
- 2026-08-201.15.2 — Custom domains, name-only web apps, durable deploy evidence
1.15.2 completes the web-app overhaul: create an app from just a name, upload a build straight from the browser, and attach a custom domain from the app's page — automatic when the domain's DNS is managed here, at most two records to publish when it isn't. Deployment failures become diagnosable: a f…
- 2026-08-201.15.11 — Fix the staging pre-filter 1.15.10 broke
1.15.10 moved the `$connection_upgrade` map out of the rendered http base and into the node bootstrap, but did not add it to the staging harness — the self-contained config the unprivileged `nginx -t` pre-filter validates against, which stands in for the node's own nginx.conf. So on 1.15.10 every ed…
- 2026-08-201.15.10 — A node can serve a classic vhost and the edge plane at once
The rendered http base declared the `$connection_upgrade` map, which made a hybrid node impossible: one that serves a classic `conf.d` vhost alongside the edge plane has to declare that map itself, because the vhost proxies through `asgi.inc` and references it before any generation exists. Declared…
- 2026-08-191.15.1 — Delete a web app that never got an address; no 500 on the framework update
A patch release with two admin-portal fixes: a web app stuck at "No address yet" can now be deleted from the portal, and the "update django-mojo" action no longer returns a 500.
- 2026-08-191.15.0 — Bootstrap provisioning end to end, messaging management, fleet drift
django-mojo 1.15.0 takes an empty AWS account to a serving, HTTPS-enabled deployment with a first admin login link — eight prompts, then init/apply/configure/admin — and makes email and SMS first-class citizens of the admin portal: dashboard rows, management pages, connection tests, and test sends d…
- 2026-08-191.14.0 — Capacity buttons and an external-infrastructure switch
django-mojo 1.14.0 adds guarded capacity actions to the admin portal — add or remove an app node, an RDS read replica, or a cache replica without opening the AWS console — and one file-only INFRASTRUCTURE_MODE switch that turns off every portal infrastructure mutation for installations whose infrast…
- 2026-08-191.13.0 — The admin portal, redesigned
django-mojo 1.13.0 rebuilds the built-in admin portal end to end: a calm dashboard that only turns red for real outages, one Deployments lane for web apps, the API and the framework, CloudWatch metrics and applyable infrastructure upgrades without the AWS console, plain-language settings, and a diss…
- 2026-08-181.12.4 — The Admin Platform page loads again, and reauthentication stays in the portal
django-mojo 1.12.4 fixes the serialization error that made the Admin Platform page unloadable for any WebApp with a release or deployment, and keeps admin reauthentication inside the portal — a modal confirms your password or passkey and retries the blocked action, instead of navigating away to the…
- 2026-08-181.12.3 — Admin-managed fleet GeoIP and SMS providers
django-mojo 1.12.3 adds guided Mojo provider setup to the built-in Admin, so a literal superuser can test and configure GeoIP and system SMS without SSH while restart-bound GeoIP settings continue through the encrypted S3/config-sync fleet plane.
- 2026-08-181.12.2 — Healthy deploys no longer roll back for housekeeping
django-mojo 1.12.2 narrows rollback to real release failures, keeps healthy canaries serving when auxiliary systems or deployment bookkeeping fail, and preserves durable failure evidence for the incidents that do roll back.
- 2026-08-181.12.1 — Automatic hosted authentication for Edge WebApps
django-mojo 1.12.1 makes same-origin MojoAuth routing part of every Edge-hosted WebApp, preserves SPA sign-in callbacks, and automatically repairs existing WebApp vhosts during Edge startup.
- 2026-08-181.12.0 — Permission-gated graphs and safer fleet convergence
django-mojo 1.12.0 makes named REST graphs explicit and permission-aware, hardens single-node and fleet deployment finalization, strengthens MojoSec health and RPM ownership checks, and prevents GoDaddy’s recursive DNS cache from breaking automated ACME issuance.
- 2026-08-171.11.12 — URL-first WebApps and opt-in MojoSec shadow cases
django-mojo 1.11.12 makes WebApp onboarding start with the address a person wants, adds external-DNS and day-2 management, and introduces disabled-by-default MojoSec shadow correlation backed by trusted per-VHost evidence. It also updates sqlparse to resolve four dependency security alerts.
- 2026-08-171.11.11 — Enrolled MojoSec nodes can deploy again, and deploy stderr is privileged
django-mojo 1.11.11 unblocks every enrolled MojoSec fleet: 1.11.9 and 1.11.10 could not complete a deploy at all, because the packaged post-deploy program declared a MojoSec control-state file in its own trusted-change journal — a path that journal rejects by design — aborting before MojoSec's obser…
- 2026-08-141.11.9 — MojoSec becomes an observer on the deploy path — convergence can never abort a deploy
django-mojo 1.11.9 makes deploy-time MojoSec convergence observe-and-report by design: a convergence surprise restores prior state, records exactly what was skipped, and lets the deploy finish — it can never again fail a fleet deploy. It also completes audit-state adoption: seed rules are classified…
- 2026-08-141.11.8 — Audit convergence adopts never-enrolled nodes — second fleet-deploy blocker cleared
django-mojo 1.11.8 clears the second and final 1.11.6-era fleet-deploy blocker: the Linux Audit convergence introduced in 1.11.6 now adopts nodes whose audit rules directory is empty, instead of failing every deploy — and every rollback — on long-lived fleets at required criticality.