Arvel CLI¶
If you have spent any time with Laravel, you already know the rhythm: one entry point, many subcommands, and generators that keep your hands on the keyboard instead of copy-pasting boilerplate. Arvel brings that same feeling to async Python. The arvel command is built on Typer, so help text, options, and nested groups feel natural in the terminal.
The CLI is the spine of day-to-day work—migrations, queues, the scheduler, routes, health probes, and more—without leaving your shell.
What ships out of the box¶
Running arvel with no subcommand prints the banner and help. Core groups include:
db— database workflows (migrations, seeders, and related tasks)make— code generators (models, repositories, policies, and friends)view— materialized view helpers where your app uses themqueue— worker and queue managementschedule— run or daemonize the scheduler that dispatches due jobsroute— introspect and cache routeshealth— probe configured subsystems from the command lineserve— run the development serverabout,config,tinker,publish— ergonomics and introspectionnew— scaffold a new project (interactive stack selector with presets)up/down— maintenance mode toggles
That list mirrors how Arvel thinks about an application: data, background work, time-based work, HTTP surface, and observability—all reachable under one name.
Custom commands¶
Arvel scans app/Console/Commands/ for Python files that export a typer.Typer instance. Each file becomes its own command group, named after the file stem. Drop a new Typer app in that folder, restart nothing permanent, and your team gets a first-class command next to the framework’s.
import typer
my_app = typer.Typer(help="Domain-specific maintenance tasks.")
@my_app.command("sync-catalog")
def sync_catalog() -> None:
"""Example custom command."""
typer.echo("Sync started…")
# Export `my_app` from app/Console/Commands/catalog.py → group name: catalog
Typical workflows¶
Run pending migrations and seed data (exact flags depend on your project’s db commands—arvel db --help is the source of truth).
Dispatch the scheduler once (useful in cron or a systemd timer):
# Often paired with app/schedule.py registering jobs on a Scheduler instance.
# CLI: arvel schedule run
Start a queue worker so Job subclasses actually execute outside the request cycle:
# CLI: arvel queue work (see --help for your driver’s options)
Check connectivity before a deploy:
# arvel health check
# Probes database, cache, and queue using your configured settings.
Why it feels like Laravel¶
One binary, predictable verbs, generators that match framework conventions, and room for your own Typer apps without a plugin ceremony. Arvel’s CLI is not a thin wrapper—it is the operational front door for the same concepts you configure in code: QueueContract, Scheduler, routes, and health.
When in doubt, arvel <group> --help stays honest about what your installed version can do.