FastAPI with structure and developer experience.
FastKit CLI is a code generation tool for the FastKit ecosystem. It generates complete, production-ready modules for FastAPI projects — models, schemas, repositories, services, and routers — in seconds.
Inspired by Laravel's
php artisan, built for FastAPI developers who want structure without the overhead.
- Python 3.12
- fastkit-core
pip install fastkit-cliOr with uv (recommended):
uv add fastkit-cliVerify the installation:
fastkit --helpfastkit make module InvoiceThis generates the following structure:
modules/
└── invoices/
├── __init__.py
├── models.py
├── schemas.py
├── repository.py
├── service.py
└── router.py
With a confirmation and next steps:
Generating module: Invoice
Location : modules/invoices/
Model : Invoice
Table : invoices
Mode : sync
✓ __init__.py
✓ models.py
✓ schemas.py
✓ repository.py
✓ service.py
✓ router.py
✓ Registered model in alembic/env.py
Done! Next steps:
1. Define your fields in modules/invoices/models.py
2. Add schemas in modules/invoices/schemas.py
3. Run: fastkit migrate make -m 'create_invoices'
fastkit make module Invoice --asyncGenerates the same structure but with async repository, service, and router using AsyncSession and get_async_db.
Generates a complete module with all layers.
fastkit make module <Name> [OPTIONS]| Option | Short | Default | Description |
|---|---|---|---|
--dir |
-d |
modules |
Root directory for modules |
--async |
-a |
False |
Use async repository, service, and router |
--force |
-f |
False |
Overwrite existing files |
Examples:
# Basic usage
fastkit make module Invoice
# Async mode
fastkit make module Invoice --async
# Custom directory
fastkit make module Invoice --dir src/modules
# Compound name (automatically converted)
fastkit make module InvoiceItem
# Overwrite existing files
fastkit make module Invoice --forceGenerates only the SQLAlchemy model file.
fastkit make model <Name> [OPTIONS]| Option | Short | Default | Description |
|---|---|---|---|
--path |
-p |
. |
Target directory |
--force |
-f |
False |
Overwrite existing file |
Examples:
fastkit make model Invoice
fastkit make model Invoice --path modules/invoicesGenerated models.py:
from fastkit_core.database import BaseWithTimestamps, IntIdMixin
# from fastkit_core.database import UUIDMixin, SoftDeleteMixin, SlugMixin
class Invoice(BaseWithTimestamps, IntIdMixin):
__tablename__ = "invoices"
# Define your fields hereGenerates only the Pydantic schemas file.
fastkit make schema <Name> [OPTIONS]| Option | Short | Default | Description |
|---|---|---|---|
--path |
-p |
. |
Target directory |
--force |
-f |
False |
Overwrite existing file |
Examples:
fastkit make schema Invoice
fastkit make schema Invoice --path modules/invoicesGenerated schemas.py:
from fastkit_core.validation import BaseSchema
class InvoiceCreate(BaseSchema):
pass # Define your fields here
class InvoiceUpdate(BaseSchema):
pass # All fields optional for partial updates
class InvoiceResponse(BaseSchema):
id: int
model_config = {"from_attributes": True}Generates only the repository file.
fastkit make repository <Name> [OPTIONS]| Option | Short | Default | Description |
|---|---|---|---|
--path |
-p |
. |
Target directory |
--async |
-a |
False |
Use async repository |
--force |
-f |
False |
Overwrite existing file |
Examples:
fastkit make repository Invoice
fastkit make repository Invoice --async
fastkit make repository Invoice --path modules/invoicesGenerates only the service file.
fastkit make service <Name> [OPTIONS]| Option | Short | Default | Description |
|---|---|---|---|
--path |
-p |
. |
Target directory |
--async |
-a |
False |
Use async service |
--force |
-f |
False |
Overwrite existing file |
Examples:
fastkit make service Invoice
fastkit make service Invoice --asyncGenerates only the router file with full CRUD endpoints.
fastkit make router <Name> [OPTIONS]| Option | Short | Default | Description |
|---|---|---|---|
--path |
-p |
. |
Target directory |
--async |
-a |
False |
Use async router |
--force |
-f |
False |
Overwrite existing file |
Examples:
fastkit make router Invoice
fastkit make router Invoice --asyncGenerated endpoints:
GET /invoices → index (paginated list)
GET /invoices/{id} → show
POST /invoices → store
PUT /invoices/{id} → update
DELETE /invoices/{id} → destroy
Wrapper around Alembic migrations.
Run all pending migrations.
fastkit migrate run
# Equivalent to: alembic upgrade headGenerate a new migration based on model changes.
fastkit migrate make -m "create_invoices"
# Equivalent to: alembic revision --autogenerate -m "create_invoices"| Option | Short | Required | Description |
|---|---|---|---|
--message |
-m |
Yes | Migration description |
Rollback the last migration.
fastkit migrate rollback
# Equivalent to: alembic downgrade -1Show the current migration status.
fastkit migrate status
# Equivalent to: alembic currentRun database seeders.
# Run all seeders
fastkit db seed
# Run a specific seeder
fastkit db seed UserSeederStart the FastAPI development server.
fastkit server| Option | Short | Default | Description |
|---|---|---|---|
--host |
-h |
0.0.0.0 |
Host to bind |
--port |
-p |
8000 |
Port to bind |
--reload / --no-reload |
True |
Enable auto-reload |
Examples:
# Default
fastkit server
# Custom host and port
fastkit server --host 127.0.0.1 --port 9000
# Without auto-reload
fastkit server --no-reloadFastKit CLI automatically handles naming conversions regardless of how you pass the module name:
| Input | Model | Snake | Table | Folder |
|---|---|---|---|---|
Invoice |
Invoice |
invoice |
invoices |
invoices |
invoice |
Invoice |
invoice |
invoices |
invoices |
InvoiceItem |
InvoiceItem |
invoice_item |
invoice_items |
invoice_items |
invoice_item |
InvoiceItem |
invoice_item |
invoice_items |
invoice_items |
Category |
Category |
category |
categories |
categories |
# 1. Generate a new module
fastkit make module Invoice --async
# 2. Define your model fields
# Edit modules/invoices/models.py
# 3. Define your schemas
# Edit modules/invoices/schemas.py
# 4. Generate and run migration
fastkit migrate make -m "create_invoices"
fastkit migrate run
# 5. Register the router in your main app
# In app.py:
# from modules.invoices.router import router as invoices_router
# app.include_router(invoices_router, prefix="/api/v1")
# 6. Start the server
fastkit server- fastkit-core — Base classes, repository pattern, validation, i18n
- mailbridge — Email delivery abstraction
FastKit Core is open-source software licensed under the MIT License.
FastKit is developed and maintained by Fastkit.org for the FastAPI community.