create-app
Use this skill when creating a new Hanami 2.x application.
Core principle: hanami new generates a production-ready application structure with slices, ROM, and dry-system preconfigured.
Quick Reference
| Command | Generates |
|---|---|
hanami new my_app |
Full Hanami 2.x application |
hanami new my_app --database=postgres |
App with PostgreSQL configured |
hanami new my_app --database=sqlite |
App with SQLite configured |
hanami new my_app --head |
Uses latest (HEAD) versions of gems |
Core Rules
Generate the application:
hanami new my_app --database=postgres cd my_appGenerated directory layout:
my_app/ ├── app/ # Default application slice │ ├── actions/ # Action classes │ ├── views/ # View classes │ ├── templates/ # HTML/JSON templates │ ├── relations/ # ROM Relations │ ├── repos/ # ROM Repositories │ └── entities/ # ROM Entities ├── config/ │ ├── app.rb # App class, slice registration, plugin config │ ├── routes.rb # Root route and resource routing │ ├── settings.rb # Typed environment variable declarations │ └── providers/ # External dependency providers ├── db/ │ ├── migrate/ # Database migration files │ └── seeds.rb # Seed data setup ├── slices/ # Modular slices (bounded contexts) ├── spec/ ├── Gemfile ├── config.ru └── README.mdEnvironment detection:
Hanami detects the environment via
HANAMI_ENV:development(default) — code reloading enabledtest— used by RSpecproduction— code reloading disabled, logging to stdout
Initial configuration:
# config/app.rb # frozen_string_literal: true module MyApp class App < Hanami::App end endDatabase configuration is read from
DATABASE_URL:DATABASE_URL=postgres://localhost/my_app_developmentInstall dependencies and set up the database:
bundle install hanami db create # Creates the database hanami db migrate # Applies migrations hanami db version # Verify migrations applied successfullyRun the development server:
hanami dev
Common Mistakes & Red Flags
| Mistake / Red Flag | Reality |
|---|---|
Business logic in config/app.rb |
config/app.rb is for framework settings; business logic belongs in Actions, Repositories, or service objects. |
| Routes scattered across files without slice organization | Keep routing defined in config/routes.rb, dividing sections by slice or scope. |
Using hanami new without specifying a database |
The default may not match your project requirements; choose --database=postgres or --database=sqlite. |
Integration
| Related Skill | When to chain |
|---|---|
| create-slice | create-slice — Create modular bounded contexts after establishing the base app. |
| manage-database | manage-database — Run migrations and seed files. |
| define-relation | define-relation — Establish ROM database schema connections. |
| create-repository | create-repository — Set up data query boundaries. |