RustyRoad is under active development. For day-to-day use, prefer the latest released version on crates.io.
In loving memory of Rusty (2014–2023), a wonderful loving pup. I am forever grateful for the time I had with him.
What is RustyRoad?
RustyRoad is a Rust CLI + generator toolkit inspired by Ruby on Rails.
It focuses on:
- generating a consistent project structure
- generating controllers/routes/models
- generating and running database migrations
- providing a few productivity-focused database commands
Under the hood, generated projects use Actix for HTTP, Tera for templates, and SQLx for database support.
If you're curious about the motivation, there's a short write-up here: https://rileyseaburg.com/posts/rust-needs-a-rails
Features
- Project generator (
rustyroad new) - Generators (
rustyroad generate ...) - Database migrations (
rustyroad migration ...) - Database inspection / queries (
rustyroad db ...,rustyroad query ...) - MCP Server for AI agent integration (
rustyroad-mcp) - Optional GrapesJS feature (drag-and-drop editor) via
rustyroad feature add grapesjs
Install
From crates.io
From source
Quick start
Create a new project:
Generate a route/controller:
Configuration
How rustyroad.toml is used
RustyRoad reads your database settings from a TOML file in your project root.
- Default (dev): RustyRoad reads
./rustyroad.toml - If
ENVIRONMENTis set and notdev: RustyRoad reads./rustyroad.<ENVIRONMENT>.toml
Examples:
ENVIRONMENT=prod→ readsrustyroad.prod.tomlENVIRONMENT=test→ readsrustyroad.test.toml
There is no special rustyroad.dev.toml—dev is the plain rustyroad.toml file.
Tip: You can also use ENV=prod as a shorthand for ENVIRONMENT=prod.
If you're unsure what RustyRoad is going to read on your machine, run:
(It prints ENVIRONMENT=..., the config filename, and a sanitized view of the parsed database settings.)
Migrations
RustyRoad expects migrations in this exact location (do not create a plain ./migrations/ folder):
./config/database/migrations/<timestamp>-<name>/up.sql
./config/database/migrations/<timestamp>-<name>/down.sql
Migration Commands
List migrations:
Run all migrations (up) in order:
Run a single migration by name (the name is the part after the timestamp in the folder name):
Rollback a migration:
Generate a migration (folder + files):
Auto-convert Rogue Migrations
If you (or an AI agent) accidentally created migrations in the wrong location (like ./migrations/), RustyRoad can detect and convert them:
# Preview what would be converted
# Convert and keep source files
# Convert and remove source files
RustyRoad will also warn you when running any migration command if it detects rogue migrations.
Database commands
Inspect schema:
Run ad-hoc queries:
MCP Server (AI Agent Integration)
RustyRoad includes an MCP (Model Context Protocol) server that exposes database tools to AI agents like OpenCode, Claude, etc. This prevents agents from using raw psql commands or connecting to the wrong database.
Available Tools
rustyroad_query- Execute SQL queriesrustyroad_schema- Get database schemarustyroad_migrate- Run migrationsrustyroad_migration_generate- Create new migrationsrustyroad_config- View configurationrustyroad_convert_migrations- Fix rogue migrations
Setup
Register with OpenCode:
Or manually add to ~/.config/opencode/opencode.json:
Optional: GrapesJS
RustyRoad can scaffold an optional GrapesJS editor experience:
You can learn more about GrapesJS at https://grapesjs.com/ and see the example project at example-grapesjs/.
Examples
example/– a basic generated appexample-grapesjs/– a generated app with GrapesJS enabled
Troubleshooting
Building from source on Windows (PostgreSQL linkage)
If you build this repository from source on Windows and see errors about POSTGRES_LIB_PATH or libpq.lib:
- Install PostgreSQL from the official website
- Set
POSTGRES_LIB_PATHenvironment variable to the directory containinglibpq.lib(e.g.,C:\Program Files\PostgreSQL\13\lib) - For generated projects, create
.cargo/config.tomlin your project root:
[]
= ["-C", "link-arg=/LIBPATH:C:\\Program Files\\PostgreSQL\\13\\lib"]
Contributing
Contributions are welcome! Please see CONTRIBUTING.md.
License
MIT — see LICENSE.