Frameworks — podium new
podium new <framework> <name> scaffolds a greenfield project you write. Both arguments are required positionals.
podium new laravel my-shop
podium new flask my-api --database sqlite
podium new express my-service --database postgres --version latest
For ready-made third-party apps you run rather than write, see App library instead.
Supported frameworks
| Framework | Runtime image | Default database |
|---|---|---|
laravel | PHP 8.3 | MySQL |
kavera | PHP 8.3 | MySQL |
octobercms | PHP 8.3 | MySQL |
wordpress | PHP 8.3 | MySQL |
php | PHP 8.3 | MySQL |
fastapi | Python 3 | PostgreSQL |
flask | Python 3 | PostgreSQL |
django | Python 3 | PostgreSQL |
python | Python 3 | PostgreSQL |
express | Node 22 | MySQL |
nestjs | Node 22 | MySQL |
fastify | Node 22 | MySQL |
node | Node 22 | MySQL |
Kavera
Kavera is a Laravel-native website framework: flat-file Blade pages plus service-driven dynamic content (Blogger posts, Eventbrite events, Flickr galleries, form webhooks) cached through Redis. Forms ship with email, webhooks, spam controls and reCAPTCHA; pages carry SEO titles and optional JSON-LD.
It exists because an agent editing page files beats an agent driving a CMS admin UI. Reach for it over plain Laravel for marketing sites, brochure sites, portfolios and galleries — and for plain Laravel when you need a real application with custom models and business logic.
podium new kavera my-site
Pages live in resources/views/content. After adding or removing one, refresh the registry so routes resolve:
podium art app:update-content-list
Options
| Option | Description | Values |
|---|---|---|
--database <type> | Database engine | auto (default), mysql, postgres, mongodb, sqlite |
--db-name <name> | Database name | Default: project name, dashes → underscores |
--version <ver> | Framework version | Laravel / WordPress: latest or a version tag |
--image <ref> | Override the Docker image | Default: the framework’s base image |
--no-migration | Skip migrations | Migrations run by default |
--one-off | Skip the AI hand-off after creation | |
--github | Create a GitHub repo in your account | Requires gh auth |
--github-org <org> | Create the repo in an organization | |
--public / --private | Repo visibility | Default private |
--no-storage-symlink | Skip public/storage symlink | Laravel only |
Databases
SQLite
podium new flask notes --database sqlite
podium new django blog --database sqlite
podium new laravel shop --database sqlite
SQLite needs no shared service — it’s a single file. Podium creates it, points the project’s .env at it, and runs migrations normally.
The file always lives inside the project directory:
| Framework | Path |
|---|---|
| Django | db.sqlite3 |
| Laravel | database/database.sqlite |
| Everything else | database.sqlite |
That location is deliberate. The project directory is the only path bind-mounted into the container, so a database anywhere else would be destroyed every time the container is recreated on podium up. It is also gitignored by default.
Good for prototypes, single-user tools, and test fixtures. For anything concurrent, use Postgres or MySQL.
Shared server databases
mysql, postgres and mongodb connect to the shared service containers. Podium creates the database and writes the connection settings into the project’s .env — you never configure credentials by hand. See Architecture → Shared services for hostnames and credentials.
Working inside a project
Run these from the project directory. They execute inside the container, with the correct runtime.
PHP
podium composer install
podium art migrate
podium wp plugin list --status=active
podium php script.php
podium tinker
Python
podium python -c "import sys; print(sys.version)"
podium pip install httpx
podium django manage migrate
podium django manage createsuperuser
podium shell
Python containers provide python3, not python.
Node
podium npm install
podium npx tsc --init
podium node script.js
podium shell
Any framework
podium exec <cmd> # run a command, no TTY — good for scripts and CI
podium exec-root <cmd> # as root
podium bash # interactive shell
podium shell # framework-aware REPL (tinker / django shell / node / python3)
podium supervisor restart all # restart in-container processes
podium supervisor-status
Use podium supervisor, never podium exec supervisorctl — the latter runs as the developer user and is denied on the supervisor socket.
Laravel extras
podium db-refresh # fresh migration + seed
podium cache-refresh # clear all caches
podium phpcs app/ # static analysis
podium phpcbf app/ # auto-fix
podium phpmd app/File.php
podium php -l app/File.php
Adopting an existing project
podium setup my-project # a folder already in ~/podium-projects/
podium setup my-project --framework django # force detection
podium setup my-project --overwrite-env # repoint an existing .env at shared services
podium setup my-project --no-startup # register without starting, to review the compose
Framework detection reads the project’s files — artisan, manage.py, main.py, app.py, package.json, wp-config.php. Flask and FastAPI are distinguished by which one the file actually imports, not by filename.