FastAPI Admin Kit
A drop-in admin panel for FastAPI + SQLAlchemy + SQLModel apps, inspired by Django Admin.
📖 Documentation | 🚀 Quick Start | 📦 PyPI
Features
See the Full Features List for every feature with detailed docs links.
- Zero-Config Auto-Discovery — Register a model, get full CRUD UI automatically
- SQLAlchemy & SQLModel — Works with both ORMs out of the box
- Built-in Auth & RBAC — Session-based auth with role-based permissions per model
- Audit Logging — Every create, update, and delete is recorded with full diffs
- Modern UI — Tailwind CSS, HTMX, and Alpine.js with dark mode
- 17 Built-in Widgets — TextInput, Toggle, DatePicker, FileUpload, Wysiwyg, and more
- Inline Editing — Edit records directly from list view with 3-dot action menu
- Command Palette —
Cmd+K/Ctrl+Kglobal search across models and fields
- Dashboard — Configurable stat cards, charts, tables, and progress bars
- CLI Tools —
fak-admin/fakfor superuser management and project scaffolding - Pagination — Offset, cursor, or dynamic strategies per model
- Filters — Text, boolean, relation, and enum sidebar filters
- File Uploads — Built-in local storage backend with upload widgets
- Async-First — PostgreSQL, MySQL, and SQLite with auto URL normalization
- CSRF & Rate Limiting — Security built-in out of the box
Installation
# pip
pip install fastapi-admin-kit
# uv
uv add fastapi-admin-kit
For database-specific async drivers:
# pip
pip install fastapi-admin-kit[postgres] # PostgreSQL via asyncpg
pip install fastapi-admin-kit[mysql] # MySQL via aiomysql
# uv
uv add fastapi-admin-kit[postgres] # PostgreSQL via asyncpg
uv add fastapi-admin-kit[mysql] # MySQL via aiomysql
For the full experience with uvicorn and JWT support:
# pip
pip install fastapi-admin-kit[full]
# uv
uv add fastapi-admin-kit[full]
Quick Start
import os
import secrets
from contextlib import asynccontextmanager
from fastapi import FastAPI
from sqlalchemy import Column, Float, Integer, String
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import DeclarativeBase, relationship, sessionmaker
from fastapi_admin_kit import Admin
from fastapi_admin_kit.auth.backend import BuiltinAuthBackend
from fastapi_admin_kit.auth.mixins import AuthModelMixin
from fastapi_admin_kit.auth.models import Role, admin_user_roles
class Base(DeclarativeBase):
pass
class User(AuthModelMixin, Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
email = Column(String(255), unique=True, nullable=False)
full_name = Column(String(255))
roles = relationship(
"Role", secondary=admin_user_roles, back_populates="users"
)
class Product(Base):
__tablename__ = "products"
id = Column(Integer, primary_key=True)
name = Column(String(100), nullable=False)
price = Column(Float, nullable=False)
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite+aiosqlite:///./app.db")
SECRET_KEY = os.getenv("SECRET_KEY", secrets.token_urlsafe(32))
engine = create_async_engine(DATABASE_URL)
async_session = sessionmaker(engine, class_=AsyncSession)
@asynccontextmanager
async def lifespan(app: FastAPI):
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
await admin.setup()
yield
await engine.dispose()
app = FastAPI(lifespan=lifespan)
admin = Admin(
app=app,
engine=engine,
base=Base,
secret_key=SECRET_KEY,
auth_model=User,
auth_backend=BuiltinAuthBackend(),
)
admin.register(Product)
Run with:
pip install fastapi-admin-kit[full]
uvicorn main:app --reload
Open http://localhost:8000/admin/ and log in with:
- Email:
admin@example.com - Password:
admin
!!! warning Change the default password immediately in production!
CLI Usage
Both the full name and the short alias work interchangeably:
# Create a superuser
fak-admin createsuperuser -e admin@example.com -p mypassword
fak createsuperuser -e admin@example.com -p mypassword # short alias
# List all admin users
fak-admin users
fak users
# Change a user's password
fak-admin changepassword -e admin@example.com -p newpassword
fak changepassword -e admin@example.com -p newpassword
# Scaffold a new fastapi project
fak init myproject
# Permission management
fak createpermissions --base myapp.models.Base
fak createpermissions myapp.models.User myapp.models.Product
All commands accept -d DATABASE_URL or read the DATABASE_URL environment variable.
Configuration
Environment Variables
| Variable | Description | Default |
|---|---|---|
DATABASE_URL |
Async database connection string | sqlite+aiosqlite:///./app.db |
SECRET_KEY |
Signing key for sessions/CSRF/JWT (min 32 chars) | Auto-generated if unset |
Admin Options
from fastapi_admin_kit import Admin
admin = Admin(
app=app,
engine=engine,
base=Base,
secret_key=SECRET_KEY,
title="My Admin", # Admin panel title
admin_path="/admin", # URL prefix
# Auth
auth_backend=BuiltinAuthBackend(),
# Environment badge
environment_label="Production",
environment_color="danger",
)
Database Support
- SQLite (default, built-in via
aiosqlite) - PostgreSQL:
pip install fastapi-admin-kit[postgres]+ setDATABASE_URL=postgresql+asyncpg://... - MySQL:
pip install fastapi-admin-kit[mysql]+ setDATABASE_URL=mysql+aiomysql://...
Optional Dependencies
| Extra | Packages | When to use |
|---|---|---|
full |
uvicorn, pyjwt |
Running the dev server or using JWT API auth |
postgres |
asyncpg |
PostgreSQL databases |
mysql |
aiomysql |
MySQL databases |
sqlmodel |
sqlmodel |
Using SQLModel models |
docs |
mkdocs, mkdocs-material |
Building documentation |
Security
- Session cookies use
SameSite=StrictandSecureby default - CSRF protection on all state-changing requests
- Rate limiting on authentication endpoints
- Passwords hashed with bcrypt
- SQL injection prevention via identifier validation
- Secret key validated to be >= 32 characters at startup
Development
# Install with dev dependencies
uv sync
# Run tests with coverage
uv run pytest --cov=fastapi_admin_kit
# Lint
uv run ruff check fastapi_admin_kit/
# Format
uv run ruff format fastapi_admin_kit/
# Build distribution
uv build
License
MIT
Metadata
Release files for fastapi-admin-kit 0.6.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fastapi_admin_kit-0.6.2.tar.gz | 449.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fastapi_admin_kit-0.6.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.0 MB
Release files / fastapi_admin_kit-0.6.2.tar.gz
| Download URL | fastapi_admin_kit-0.6.2.tar.gz |
|---|---|
| Size | 449.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
16b5e41ddada71104b68bd188f403237dd64fd1fc66effaf6b6e7ef2ae477a07
|
|
BLAKE2b-256 checksum How to use checksums |
465224a787f0f50f05a108831a79d2d1184e09589fa211012b0f7351e8ff06c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / fastapi_admin_kit-0.6.2-py3-none-any.whl
| Download URL | fastapi_admin_kit-0.6.2-py3-none-any.whl |
|---|---|
| Size | 561.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a3b8c7ed171a78151a27c8c6c4b168e928cdbfe5de7faa77da73be97359dcd03
|
|
BLAKE2b-256 checksum How to use checksums |
4bde2e5762151b66eaf01b52c7c02f8422de1cc4d666475f0c951961352df73e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency log