v0.20.0 — Stage 1 FTUX + Polish & Trust
·
180 commits
to main
since this release
Headline release of Stage 1. The first-time-developer experience overhaul, plus the Polish & Trust runtime fixes from the Stage 1 Reality Audit, shipped together so external users see a coherent new experience from cargo install rustio-admin-cli.
No API breaks. Existing 0.19.0 projects update by bumping rustio-admin = "0.19.0" to "0.20.0" in their Cargo.toml. Schema unchanged.
First-time developer experience
rustio new <name>— friendly alias forstartproject. Identical files, same exit codes. The Builder bootstrap that used to live in this slot moved torustio builder new.- Interactive TTY wizard — calm three-prompt flow: project name → project type → database name. Auto-generates
.envwith a working localDATABASE_URL. Bypassed under--no-interactive, non-TTY stdin/stdout, orCI=1. - Welcoming
rustio --help— beginner-surface welcome banner above the full command list; full surface preserved untouched below. - Four-part humanised onboarding errors —
Problem / Why / Fix / Retryshape with the verbatim sqlx text preserved in an indentedDetails:block. Covers the five onboarding-critical failures: DATABASE_URL missing, PostgreSQL unreachable, database missing, migration SQL failure, invalid--role. - Calm progress spinner — ASCII
| / - \on stderr during long ops (Db::connect,migrate apply,doctorconnect). One sober ✓ / ✗ marker on completion. Respects--quiet,--no-progress,CI,NO_COLOR, non-TTY. Feedback, not theatre. - First-boot homepage at
/— calm 130-line inline-CSS landing page baked into the binary viainclude_str!. Three CSS custom properties at the top (--brand,--text,--muted) make re-skinning a 3-line edit. - Project-type-aware subtitle — wizard's project_type choice (custom / clinic / school / inventory / blog) drives a single
{{type_phrase}}line on the homepage. - Project name in admin chrome — scaffolded
main.rsnow callsAdmin::new().app_name(...). Login tab title, login h1, and dashboard tab title carry the project name instead of generic "Admin".
Operational trust (Polish & Trust)
- Postgres NOTICE chatter silenced.
Db::connect_withsetsclient_min_messages = warningon every pooled connection. First-boot log drops from 65 lines to 2. WARNING / ERROR / LOG bands unaffected. - Duplicate
listeninglog removed.Server::runno longer emits its ownrustio listening on …. Scaffolded projects already log their canonical URL with conflicting paths was an audit finding. - Admin empty-state CLI handshake. Dashboard's "No models registered yet" now leads with
rustio startapp <name>before the Rust line. - Scaffold README restructured into five layered sections (
1. First run→2. First model→3. Admin usage→4. Common commands→5. Advanced topics) matching the new wizard reality. Drops thecp .env.example .envandcargo install rustio-admin-clisteps the wizard already handles.
Project identity
- Default scaffold is neutral.
src/post.rsandmigrations/0001_create_posts.sqlmoved into theblogpreset. A clinic / school / inventory / custom project ships zero domain models —rustio startapp <name>adds the first when the developer decides what they're actually building.
Terminal compatibility
- Spinner switched from Braille to ASCII. Braille (U+2800-U+28FF) triggered font fallback in some mixed RTL/LTR locales.
- Em-dashes in CLI strings reduced to
--. Two ASCII hyphens — conventional em-dash substitute. Doc comments and documentation untouched.
Doctrine
- New:
docs/design/DESIGN_ONBOARDING.md— Stage 0 constitution governing the FTUX surface. Same shape asDESIGN_AUDIT.md/DESIGN_SESSIONS.md. PRs against the onboarding stack are reviewed against this doctrine.
Upgrade
# Cargo.toml
[dependencies]
rustio-admin = "0.20.0"cargo update -p rustio-adminRecommended (one-line opt-in to project ownership): chain .app_name("Your Project") onto your Admin::new() call.
Full per-PR detail in CHANGELOG.md.