Repository navigation
Migrating From Rails
Status: not executed end to end. No Rails app has been cut over by following this page yet; it flips to executed on evidence from an adopter's measured run.
The concept map for a Rails app. The runbook — phases, exit conditions, stop conditions — is
Migrating an existing app; this page says what each Rails term
becomes. As of 2026-11, against Rails 8 (guides.rubyonrails.org).
| Rails | Ultimate |
|---|---|
config/routes.rb + a controller action that renders |
a route file: Routes and render modes |
| a controller action that writes | an action: Actions
|
| an Active Record model | an entity(): Entities and migrations
|
a scope, a where chain |
a query: Queries and live queries
|
db/migrate/*.rb, schema.rb
|
x db gen "<name>", then x db migrate
|
rails generate |
x g <kind> <name> (CLI reference) |
| Active Job, Sidekiq | a job: Jobs and workflows
|
whenever, sidekiq-cron
|
a task: Scheduled tasks
|
Devise, has_secure_password
|
Auth |
| Pundit, CanCanCan | a policy: Policies and authz
|
| Action Cable, Turbo Streams | a live query: Realtime |
| Action Mailer | |
| Active Storage | Storage and uploads |
| ActiveAdmin, Administrate | Admin dashboard |
config/locales/*.yml |
one flat catalog per locale: I18n |
| RSpec, Minitest | Testing |
bin/rails server |
x dev |
bin/rails test + CI |
x verify |
| Rails | Why |
|---|---|
| Ruby and its gems | Bun only. Nothing runs Ruby; a gem's behaviour is rewritten or bought as a service |
| MySQL, SQLite | Postgres only, by design: Home |
| ERB, Hotwire, Stimulus | pages render with SolidJS; interactive parts are islands (Routes and render modes). No converter |
model callbacks (before_save, after_commit) |
no implicit hooks: the write is an action or a mutator that says what it does (Actions) |
SAML (devise_saml_authenticatable) |
not shipped: put an OIDC bridge in front (Auth) |
Rails ids are bigint sequences and timestamps are created_at / updated_at. Phase 1 of the
runbook declares the existing tables as entities with the physical-name overrides and type map it
gives, then x db gen until x verify --only drift agrees: Migrating an existing app.
| Rails stores | Branch |
|---|---|
password_digest (has_secure_password) or Devise's encrypted_password — bcrypt by default |
proceed: verified natively, rewritten as argon2id on first login (Migrating an existing app) |
the session: an encrypted cookie keyed by secret_key_base
|
bridge it with your own verifier behind configureAuthenticator(), or keep the Rails login until every user has signed in once (Auth) |
Ultimate — v29.4.0 As of 2026-10. The full-stack framework where the primary developer is an AI agent: bunx create-ultimate myapp → Getting started · live demo. MIT licensed. What npm serves is npm view @ultimat3/core version, never this line, and this footer is the only page that stamps a version.
Repository · Issues · Changelog · llms.txt
Edits to these pages are synced from wiki/ in the repository — change the file there, not the wiki, or the next sync overwrites it.
Start
- Getting started
- Installation
- Shapes
- Bare VM
- Project layout
- Migrating an existing app
- Compared to other stacks
Tutorials
- 1 · First app
- 2 · First feature
- 3 · Auth and admin
- 4 · Jobs and realtime
- 5 · Deploy free
- 6 · Growing up
Primitives
- The eight primitives
- Building your own base
- Actions
- Entities and migrations
- Policies and authz
- Queries and live queries
- Client data
- Jobs and workflows
- Scheduled tasks
- Routes and render modes
Capabilities
- Realtime
- Caching and invalidation
- Batching and preloading
- N+1 detection
- PWA and offline
- Client navigation
- MCP and AI
- Agents
- Admin dashboard
- Scraping
- Auth
- Notify
- Storage and uploads
- Feature flags
- SEO
- Static assets
Cross-cutting
- I18n
- Theming
- UI components
- Interface rules
- Timezones and dates
- Money
- Outbound HTTP
- Resource management
- Migrations and backfills
- Testing
- CI: the gate across parallel jobs
Reference