FastKit CLI is a code generation tool for the fastkit core package.
Project description
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.
Requirements
- Python 3.12
- fastkit-core
Installation
pip install fastkit-cli
Or with uv (recommended):
uv add fastkit-cli
Verify the installation:
fastkit --help
Quickstart
Generate a complete module
fastkit make module Invoice
This 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'
Generate an async module
fastkit make module Invoice --async
Generates the same structure but with async repository, service, and router using AsyncSession and get_async_db.
make
fastkit make module
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 --force
fastkit make model
Generates 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/invoices
Generated 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 here
fastkit make schema
Generates 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/invoices
Generated 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}
fastkit make repository
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/invoices
fastkit make service
Generates 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 --async
fastkit make router
Generates 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 --async
Generated endpoints:
GET /invoices → index (paginated list)
GET /invoices/{id} → show
POST /invoices → store
PUT /invoices/{id} → update
DELETE /invoices/{id} → destroy
migrate
Wrapper around Alembic migrations.
fastkit migrate run
Run all pending migrations.
fastkit migrate run
# Equivalent to: alembic upgrade head
fastkit migrate make
Generate 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 |
fastkit migrate rollback
Rollback the last migration.
fastkit migrate rollback
# Equivalent to: alembic downgrade -1
fastkit migrate status
Show the current migration status.
fastkit migrate status
# Equivalent to: alembic current
db seed
Run database seeders.
# Run all seeders
fastkit db seed
# Run a specific seeder
fastkit db seed UserSeeder
server
Start 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-reload
Naming Conventions
FastKit 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 |
Typical Workflow
# 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
Related Packages
- fastkit-core — Base classes, repository pattern, validation, i18n
- mailbridge — Email delivery abstraction
License
FastKit Core is open-source software licensed under the MIT License.
Built by Fastkit.org
FastKit is developed and maintained by Fastkit.org for the FastAPI community.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastkit_cli-0.2.3.tar.gz.
File metadata
- Download URL: fastkit_cli-0.2.3.tar.gz
- Upload date:
- Size: 12.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b675e3961c4d8ae79cea24243cc1a17fdb826c907602e243c1910da5fb710e8
|
|
| MD5 |
7688878c3a9d6449f0066486b878d17d
|
|
| BLAKE2b-256 |
847229fc91a6974a96788a5872ef7298f358ae080125274a9155287d58d0cf7c
|
Provenance
The following attestation bundles were made for fastkit_cli-0.2.3.tar.gz:
Publisher:
test_publish.yaml on fastkit-org/fastkit-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fastkit_cli-0.2.3.tar.gz -
Subject digest:
4b675e3961c4d8ae79cea24243cc1a17fdb826c907602e243c1910da5fb710e8 - Sigstore transparency entry: 1437807216
- Sigstore integration time:
-
Permalink:
fastkit-org/fastkit-cli@ed1692bc1d8a300956c7b20a66317da54c9ed69c -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/fastkit-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
test_publish.yaml@ed1692bc1d8a300956c7b20a66317da54c9ed69c -
Trigger Event:
push
-
Statement type:
File details
Details for the file fastkit_cli-0.2.3-py3-none-any.whl.
File metadata
- Download URL: fastkit_cli-0.2.3-py3-none-any.whl
- Upload date:
- Size: 19.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e24a66031dae4d8aa32f0b92021f704adb9afa2ee3255f845a6c7dd7bf8cfe5a
|
|
| MD5 |
067dd11e9e0d00bc77d7a36f0f8e4dfb
|
|
| BLAKE2b-256 |
3bb2b10a3ec515cfc30eaa51677dca33bf16aa33f1b4cd6f00cdf97e4005752d
|
Provenance
The following attestation bundles were made for fastkit_cli-0.2.3-py3-none-any.whl:
Publisher:
test_publish.yaml on fastkit-org/fastkit-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fastkit_cli-0.2.3-py3-none-any.whl -
Subject digest:
e24a66031dae4d8aa32f0b92021f704adb9afa2ee3255f845a6c7dd7bf8cfe5a - Sigstore transparency entry: 1437807253
- Sigstore integration time:
-
Permalink:
fastkit-org/fastkit-cli@ed1692bc1d8a300956c7b20a66317da54c9ed69c -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/fastkit-org
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
test_publish.yaml@ed1692bc1d8a300956c7b20a66317da54c9ed69c -
Trigger Event:
push
-
Statement type: