Skip to content

v0.20.0 — Stage 1 FTUX + Polish & Trust

Choose a tag to compare

@abdulwahed-sweden abdulwahed-sweden released this 25 May 01:11
· 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 for startproject. Identical files, same exit codes. The Builder bootstrap that used to live in this slot moved to rustio builder new.
  • Interactive TTY wizard — calm three-prompt flow: project name → project type → database name. Auto-generates .env with a working local DATABASE_URL. Bypassed under --no-interactive, non-TTY stdin/stdout, or CI=1.
  • Welcoming rustio --help — beginner-surface welcome banner above the full command list; full surface preserved untouched below.
  • Four-part humanised onboarding errorsProblem / Why / Fix / Retry shape with the verbatim sqlx text preserved in an indented Details: 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, doctor connect). 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 via include_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.rs now calls Admin::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_with sets client_min_messages = warning on every pooled connection. First-boot log drops from 65 lines to 2. WARNING / ERROR / LOG bands unaffected.
  • Duplicate listening log removed. Server::run no longer emits its own rustio 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 run2. First model3. Admin usage4. Common commands5. Advanced topics) matching the new wizard reality. Drops the cp .env.example .env and cargo install rustio-admin-cli steps the wizard already handles.

Project identity

  • Default scaffold is neutral. src/post.rs and migrations/0001_create_posts.sql moved into the blog preset. A clinic / school / inventory / custom project ships zero domain modelsrustio 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 as DESIGN_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-admin

Recommended (one-line opt-in to project ownership): chain .app_name("Your Project") onto your Admin::new() call.


Full per-PR detail in CHANGELOG.md.