Andurel is a comprehensive web development framework for Go. It prioritizes development speed. Inspired by Ruby on Rails, it uses just enough conventions to let you build full-stack web applications incredibly fast.
Join the discord here
Andurel currently supports Linux and macOS only. Windows is not supported at this time.
If you'd like to help bring Windows support to Andurel, please see issue #382 - contributions are welcome!
Development speed is everything. Andurel eliminates boilerplate and lets you focus on building features:
- Instant Scaffolding - Generate complete CRUD resources with one command
- Live Reload - Hot reloading for Go, templates, and CSS with
andurel runpowered by Shadowfax - Type Safety Everywhere - SQLC for SQL, Templ for HTML, Go for logic
- Batteries Included - Echo, Datastar, background jobs, sessions, CSRF protection, telemetry, email support, authentication, optional extensions (workflows, docker, aws-ses)
- Just enough Convention - Convention over configuration is great to a certain point. Andurel provides just enough sensible defaults that just work and get out of your way.
- PostgreSQL-Backed - Built on PostgreSQL with River job queues, pgx driver, and UUID support
The core philosophy around resource generation in andurel, is that it should be a one-time operation that creates everything you need for a fully functional CRUD interface. After that, you can modify and extend the generated code as needed but it's yours to manage going forward.
- Echo - High-performance HTTP framework
- Tailwind CSS - Utility-first CSS framework
- SQLC - Type-safe SQL code generation
- Templ - Type-safe HTML templates
- Datastar - Hypermedia-driven frontend interactivity
- River - PostgreSQL-backed background jobs and workflows
- OpenTelemetry - Built-in observability
- PostgreSQL - Powerful open-source database with pgx driver and native UUID support
- Shadowfax - Andurel specific app runner
This is subject to change as Andurel is in beta.
I have not documented every feature or command yet, only enough to get you started and trying out the framework.
Once the framework reaches a release candidate, I will provide more comprehensive documentation and guides.
go install github.com/mbvlabs/andurel@v1.0.0-beta.3Andurel gives you choices when creating a new project:
Note:
--css vanillais currently WIP and not properly supported beforev1.0.0. Use Tailwind for now.
# Create a new project with defaults (PostgreSQL + Tailwind CSS)
andurel new myapp
# Add extensions for additional features:
andurel new myapp -e docker # Add Dockerfile for containerization
andurel new myapp -e aws-ses # Add AWS SES email integration
cd myapp
# Sync tools
andurel tool sync
# Configure environment
cp .env.example .env
# Note: you need to edit .env with your database details
# Apply database migrations
andurel database migrate up
# Run the development server (with live reload)
andurel runYour app is now running on http://localhost:8080
Andurel provides commands to manage your database lifecycle:
# Create the configured database
andurel database create # Requires .env to be filled out with DB credentials
# Drop the configured database (prompts for confirmation)
andurel database drop
andurel database drop --force # Allow dropping system databases
# Drop and recreate the database
andurel database nuke
andurel database nuke --force # Allow nuking system databases
# Full rebuild: drop, recreate, migrate, and seed
andurel database rebuild
andurel database rebuild --force # Allow rebuilding system databases
andurel database rebuild --skip-seed # Skip seeding after migrations# Create a migration and add the columns you need. Resource generation requires
# an `id` primary key (uuid/serial/bigserial/string-supported types). `created_at`
# and `updated_at` are optional but recommended.
andurel database migrate new create_products_table
# Create a complete resource with model, controller, views, and routes
andurel generate scaffold ProductThis single command creates everything you need for a full CRUD interface.
Scaffolds a complete Andurel project with the given name.
andurel new (alias: n) [project-name] [flags]| Flag | Description |
|---|---|
-c, --css |
CSS framework: tailwind (default) or vanilla |
-e, --extensions |
Comma-separated extensions to enable (e.g. docker,aws-ses) |
Generate models, controllers, and scaffolds from your existing database migrations.
andurel generate (alias: g) model NAME [flags]
andurel generate view (alias: v)
andurel generate controller (alias: c) NAME [action ...] [flags]
andurel generate scaffold (alias: s) NAME [flags]
andurel generate job (alias: j) NAME [flags]
andurel generate email (alias: e) NAMEgenerate model — Creates a model from a database migration, or updates an existing one. Fields, types, and timestamps are read from the migration automatically.
| Flag | Description |
|---|---|
--skip-factory |
Skip generating a factory file |
--table-name |
Override the default table name (e.g. --table-name=people_data) |
--update |
Update an existing model from migration changes |
--yes |
Apply changes without prompting for confirmation (use with --update) |
generate controller — Creates a controller, views, and routes for the given actions.
| Flag | Description |
|---|---|
--skip-routes |
Generate the controller and views without route files |
generate view — Generates Go code from .templ template files (runs templ generate).
generate scaffold — Convenience command that runs generate model + generate controller with full CRUD actions (index, show, new, create, edit, update, destroy).
| Flag | Description |
|---|---|
--skip-factory |
Skip generating a factory file |
--table-name |
Override the default table name |
Formats Go and Templ source files in the project.
andurel fmt (alias: f) [flags]| Flag | Description |
|---|---|
--check |
Check formatting without modifying files (CI-friendly) |
--skip-templ |
Skip Templ formatting |
--skip-go |
Skip Go formatting (go fmt and golines) |
Runs go fmt ./..., golines -w -m 100 ., and templ fmt on views/ and email/ directories.
Manage the full database lifecycle.
andurel database (aliases: d, db)
andurel database create
andurel database drop [--force]
andurel database nuke [--force]
andurel database rebuild [--force] [--skip-seed]
andurel database seed
andurel database migrate (aliases: m, mig)database migrate subcommands:
| Subcommand | Description |
|---|---|
new [name] (alias: n) |
Create a new SQL migration file |
up |
Apply all pending migrations |
down |
Roll back the most recently applied migration |
status (alias: st) |
Show current migration version and status |
fix |
Re-number migrations to close gaps |
reset (alias: rs) |
Roll back all migrations, then re-apply them |
up-to [version] (alias: upto) |
Apply migrations up to a specific version |
down-to [version] (alias: downto) |
Roll back migrations down to a specific version |
Starts the development server with live reload (powered by Shadowfax).
andurel run (alias: r)Opens an interactive database console (usql) using connection details from .env.
andurel console (alias: c)Manage CLI tools and binaries used by your project. Tools are defined in andurel.lock and downloaded to bin/.
andurel tool (alias: t)
andurel tool sync
andurel tool set-version <tool> <version>
andurel tool dblab (alias: d)
andurel tool mailpit (alias: m)| Subcommand | Description |
|---|---|
sync (alias: s) |
Download and validate binaries specified in andurel.lock |
set-version (alias: sv) |
Set a specific tool version (e.g. templ 0.3.977) |
dblab (alias: d) |
Open the dblab database UI in the browser |
mailpit (alias: m) |
Run the Mailpit email testing server (SMTP :1025, HTTP :8025) |
Add and list optional framework features.
andurel extension (aliases: ext, e)
andurel extension add (alias: a) [extension-name]
andurel extension list (alias: ls)Available extensions: docker, aws-ses.
Outputs comprehensive framework documentation for AI assistants. Supports topic-specific subcommands:
andurel llm (alias: l)
andurel llm controllers (alias: c)
andurel llm models (alias: m)
andurel llm views (alias: v)
andurel llm router (alias: r)
andurel llm hypermedia (alias: h)
andurel llm jobs (alias: j)
andurel llm config (alias: cfg)Upgrade framework-managed files and tool versions to the latest.
andurel upgrade (alias: up) [--dry-run]Commit or create a branch before upgrading — this command modifies files in place.
Run comprehensive diagnostic checks (Go version, config, code quality, code generation).
andurel doctor (alias: doc) [--verbose]| Full Command | Alias(es) |
|---|---|
andurel new |
n |
andurel generate |
g |
andurel generate model |
m |
andurel generate view |
v |
andurel generate controller |
c |
andurel generate scaffold |
s |
andurel generate job |
j |
andurel generate email |
e |
andurel fmt |
f |
andurel database |
d, db |
andurel database create |
crt |
andurel database seed |
s |
andurel database rebuild |
rb |
andurel database migrate |
m, mig |
andurel database migrate new |
n |
andurel database migrate status |
st |
andurel database migrate reset |
rs |
andurel database migrate up-to |
upto |
andurel database migrate down-to |
downto |
andurel run |
r |
andurel console |
c |
andurel llm |
l |
andurel llm controllers |
c |
andurel llm models |
m |
andurel llm views |
v |
andurel llm router |
r |
andurel llm hypermedia |
h |
andurel llm jobs |
j |
andurel llm config |
cfg |
andurel tool |
t |
andurel tool sync |
s |
andurel tool set-version |
sv |
andurel tool dblab |
d |
andurel tool mailpit |
m |
andurel extension |
ext, e |
andurel extension add |
a |
andurel extension list |
ls |
andurel upgrade |
up |
andurel doctor |
doc |
myapp/
├── assets/ # Static assets
│ ├── css/ # Compiled CSS files
│ ├── js/ # JavaScript files
│ └── assets.go
├── clients/ # External service clients
│ └── email/ # Email client (Mailpit/AWS SES)
├── cmd/
│ ├── app/ # Main web application
├── bin/
│ └── shadowfax # Development server orchestrator
├── config/ # Application configuration
│ ├── app.go # Sessions, tokens, security
│ ├── database.go # Database connection
│ ├── email.go # Email configuration
│ ├── telemetry.go # Logging, tracing, metrics config
│ └── config.go # Main config aggregator
├── controllers/ # HTTP request handlers
│ ├── controller.go # Base controller utilities
│ ├── cache.go # Cache control utilities
│ ├── pages.go # Page controllers
│ └── assets.go # Asset serving
├── css/ # Source CSS files (Tailwind input)
├── database/
│ ├── migrations/ # SQL migration files
│ ├── queries/ # SQLC query definitions
│ └── sqlc.yaml # SQLC user overlay config
├── email/ # Email functionality
│ ├── email.go # Email client and sending logic
│ ├── base_layout.templ # Base email template layout
│ └── components.templ # Reusable email components
├── internal/ # Internal framework packages
│ ├── hypermedia/ # Datastar/SSE helpers
│ ├── renderer/ # Template rendering
│ ├── routing/ # Routing utilities
│ ├── server/ # Server configuration
│ └── storage/ # Storage utilities (+ SQLC base/effective config)
├── models/ # Data models and business logic
│ ├── model.go # Base model setup
│ ├── factories/ # Model factories for testing
│ └── internal/db/ # Generated SQLC code (do not edit)
├── queue/ # Background job processing
│ ├── jobs/ # Job definitions
│ ├── workers/ # Worker implementations
├── router/ # Routes and middleware
│ ├── router.go # Main router setup
│ ├── routes/ # Route definitions
│ ├── cookies/ # Cookie and session helpers
│ └── middleware/ # Custom middleware
├── services/ # Business logic services
│ ├── authentication.go # Authentication service
│ ├── registration.go # User registration service
│ └── reset_password.go # Password reset service
├── telemetry/ # Observability setup
│ ├── logger.go # Structured logging
│ ├── tracer.go # Distributed tracing
│ ├── metrics.go # Application metrics
│ └── helpers.go # Telemetry utilities
├── views/ # Templ templates
│ ├── components/ # Reusable template components
│ ├── *.templ # Template source files
│ └── *_templ.go # Generated Go code (do not edit)
├── .env.example # Example environment variables
├── .gitignore # Git ignore patterns
├── andurel.lock # Framework version lock file
├── Dockerfile # Container build (docker ext)
├── go.mod # Go module definition
└── go.sum # Go module checksums
Contributions are welcome! Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and add tests
- Run quality checks:
go vet ./...andgolangci-lint run - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
git clone https://github.com/mbvlabs/andurel
cd andurel
go mod download
go test ./...This project is licensed under the MIT License - see the LICENSE file for details.
Andurel is built on top of excellent open-source projects:
- Echo - High-performance HTTP router and framework
- SQLC - Type-safe SQL code generation
- Templ - Type-safe Go templates
- Datastar - Hypermedia-driven frontend interactivity (RC6)
- River - Fast PostgreSQL-backed job queue and workflows
- OpenTelemetry - Observability framework for logs, traces, and metrics
- pgx - PostgreSQL driver and toolkit
- Tailwind CSS - Utility-first CSS framework
- Cobra - CLI framework
Inspired by Ruby on Rails and its philosophy that developer happiness and productivity matter. Built for developers who want to move fast without sacrificing type safety or code quality.
Here is a collection of sites and projects, I've built with this framework:
- MBV Blog | personal blog
- Master Golang | course platform
- Palantir | open sourced analytics platform (WIP)
If you build something cool with Andurel, let me know and I will add it to the list (or open a PR)!
Created by Morten Vistisen
Feel free to reach out to me on:
If you have any questions!
