Skip to content

JacobCoffee/litestar-admin

Repository files navigation

litestar-admin

CI PyPI version Python versions License: MIT

Modern admin panel framework for Litestar applications with a Cloudflare-inspired UI.

litestar-admin provides a production-ready admin interface for managing SQLAlchemy models in Litestar applications, featuring:

  • Cloudflare Dashboard-inspired UI - Modern dark theme with clean card layouts

  • Full CRUD Operations - Create, read, update, delete with bulk actions

  • RBAC Authorization - Role-based access control with granular permissions

  • Audit Logging - Track all admin actions for compliance

  • SQLAlchemy Integration - Works with SQLAlchemy 2.x and Advanced-Alchemy

  • Auto-discovery - Automatically discovers and registers models

  • JWT & OAuth2 Authentication - Flexible, pluggable auth backends

  • Static Export Frontend - Next.js frontend with no runtime Node.js required

    Examples

image image
image image

Installation

# Basic installation
pip install litestar-admin

# With JWT authentication
pip install litestar-admin[jwt]

# With OAuth support
pip install litestar-admin[oauth]

# With sqladmin bridge
pip install litestar-admin[sqladmin]

# All extras
pip install litestar-admin[all]

Quick Start

Point the plugin at your app and it picks up your SQLAlchemy models automatically:

from litestar import Litestar
from litestar_admin import AdminPlugin, AdminConfig
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column


class Base(DeclarativeBase):
    pass


class User(Base):
    __tablename__ = "users"

    id: Mapped[int] = mapped_column(primary_key=True)
    email: Mapped[str] = mapped_column(unique=True)
    name: Mapped[str]


app = Litestar(
    plugins=[AdminPlugin(config=AdminConfig(title="My Admin"))]
)

That's it. Auto-discovery finds your models, builds column lists from the table schema, makes string columns searchable, and gives you full CRUD. No boilerplate view classes required.

Customizing a Model View

When you need more control over how a model looks or behaves in the admin, create a ModelView subclass. Auto-discovery skips any model that already has an explicit view registered.

from litestar_admin import ModelView

class UserAdmin(ModelView, model=User):
    column_list = ["id", "email", "name", "created_at"]
    column_exclude_list = ["password_hash"]
    column_searchable_list = ["email", "name"]
    column_default_sort = ("created_at", "desc")

    can_create = True
    can_edit = True
    can_delete = False

    page_size = 25

Pass it in via views=:

AdminConfig(
    title="My Admin",
    views=[UserAdmin],
)

Any models without an explicit view still get auto-discovered.

RBAC Guards

from litestar_admin.guards import require_permission, Permission

@get("/admin/users", guards=[require_permission(Permission.MODELS_READ)])
async def list_users() -> list[User]:
    ...

@post("/admin/users", guards=[require_permission(Permission.MODELS_WRITE)])
async def create_user(data: UserCreate) -> User:
    ...

Development

# Clone the repository
git clone https://github.com/JacobCoffee/litestar-admin.git
cd litestar-admin

# Install development dependencies
make dev

# Run tests
make test

# Run linting
make lint

# Build frontend
make frontend

# Build documentation
make docs

Documentation

Full documentation is available at jacobcoffee.github.io/litestar-admin.

Related Projects

License

MIT License - see LICENSE for details.

About

(Unfinished) Pluggable, automatic admin panel with API key and session auth for Litestar applications

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors