CLI tool
jowilf/starlette-admin avatar
jowilf/starlette-admin

starlette-admin: A FastAPI-native admin panel that stays out of your ORM's way

Fast, beautiful and extensible administrative interface framework for FastApi & Starlette applications.

1,032 stars95 forksPythonMIT

At a glance

What is it?
starlette-admin brings CRUD pages, filters, export, and authentication to FastAPI and Starlette apps. It is ORM-agnostic by design, but that flexibility comes with a learning curve.
Who is it for?
Adopt starlette-admin if you are building a FastAPI or Starlette app and want a generated admin interface that works across SQLAlchemy, SQLModel, Tortoise, Beanie, or MongoEngine without forcing a single ORM. Skip it if you need a fully mature, battle-tested admin with a huge ecosystem, or if your data source falls outside the supported backends and you are not ready to subclass BaseModelView.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem it solves: an admin panel that speaks FastAPI

FastAPI and Starlette are minimal by design. They give you routing, dependency injection, and async support, but no built-in way to manage your data through a web interface. If you ship an API, you still need an admin area to edit records, inspect rows, or run bulk operations. starlette-admin fills that gap with generated CRUD pages. It targets developers who already use FastAPI or Starlette and want an admin without bolting on a separate Django or Flask app. The README makes the scope clear: it is an administrative interface framework, not a full CMS. You bring your ORM, your models, and your authentication; it brings the pages.

How it works: a view layer over your ORM

The architecture is visible in the quickstart. You create an Admin instance from starlette_admin.contrib.sqla, attach it to a FastAPI app, and register ModelView subclasses for each model. The Admin object mounts routes under /admin by default. Each ModelView knows how to list, create, read, update, and delete records through the ORM. The framework handles pagination, sorting, search, and a nested AND/OR filter builder. It also supports inline editing for related models, which means you can edit a foreign key relationship without leaving the parent form. The data flow is straightforward: the browser talks to Starlette routes, the view translates requests into ORM calls, and the ORM talks to your database. Because the view layer is separate from the ORM layer, you can swap backends or write a custom one by subclassing BaseModelView.

Getting it running: uv, pip, and a SQLAlchemy example

Installation is two commands. With uv, run uv add starlette-admin. With pip, run pip install starlette-admin. The quickstart then walks you through a FastAPI app with SQLAlchemy. You define a declarative base, a Post model with id, title, content, and published columns, and an engine pointing at a SQLite file. The key lines are from starlette_admin.contrib.sqla import Admin, ModelView. You instantiate Admin with the engine, add a ModelView for Post, and mount it. The README says to run with fastapi dev and open http://127.0.0.1:8000/admin. That is the entire setup for a basic dashboard. No separate admin app, no custom middleware, no template engine to configure. The example is minimal, which is good for a first run, but it does not show authentication or custom fields, so you will need the user guide for anything beyond the default.

What you get: CRUD, export, import, and file storage

The feature list is concrete. You get generated CRUD pages, pagination, sorting, search, and shareable URLs. The filter builder supports nested AND/OR conditions, which is more than many admin tools offer. Inline editing for related models is useful for managing foreign keys without jumping between pages. Bulk actions and custom row actions let you operate on multiple records at once. Export covers CSV, Excel, JSON, and PDF. Import covers CSV, JSON, and Excel, and it includes dry-run validation, so you can check a file before committing changes. File storage works with local disks and S3-compatible services like MinIO. Event hooks fire before and after CRUD operations, which gives you a place to add logging or validation. The framework also supports pluggable authentication, storage, fields, actions, and model views. That is a wide surface, and it means you can extend almost any part of the interface.

Backend coverage: five ORMs, one custom escape hatch

starlette-admin ships with built-in support for SQLAlchemy, SQLModel, Tortoise ORM, Beanie for MongoDB, and MongoEngine. Each has a package path under starlette_admin.contrib. The README calls the framework agnostic, and the table of backends supports that claim. If your ORM is not listed, you can subclass BaseModelView to create a custom data source. That is a real extension point, but it is also a warning sign. Writing a custom view means implementing the CRUD contract yourself, which is more work than using a supported backend. The SQLAlchemy example is the only one shown in the README, so the other backends are documented elsewhere. If you use Beanie or MongoEngine, verify that the documentation covers your specific model patterns before committing.

A real limitation: thin documentation and a young release

The README is short and the quickstart is a single example. The full documentation lives at a separate site, but the README itself does not explain authentication flow, field customization, or how to override templates. For a framework that claims extensibility, the absence of a second example is a gap. The release history shows 1.0.0.rc5 in August 2026, followed by 1.0.0 and 1.0.1 within days. That rapid sequence suggests the project is stabilizing, but it also means the 1.0 line is very new. If you need a battle-tested admin with years of community patterns, this is not it. The wrong tool is a production system with complex permissions or highly custom form layouts, where you would spend more time overriding the framework than using it.

Alternatives: Django Admin and SQLAlchemy-Admin

The most direct alternative is Django Admin, but it requires Django, which is a different web framework. If you are already on FastAPI, switching to Django just for an admin is a heavy move. A closer comparison is SQLAlchemy-Admin, which is a Flask extension, not FastAPI. It gives you CRUD views for SQLAlchemy models but ties you to Flask. For Starlette, there is also the older starlette-admin project by a different author, but this repository is the one under active development. The difference in approach is that Django Admin is tightly coupled to Django's ORM and model metadata, while starlette-admin deliberately decouples the admin layer from the ORM. That makes it lighter and more portable, but it also means you get less magic out of the box. If you want a framework that infers everything from your models automatically, Django Admin does that. If you want a minimal admin that fits your existing FastAPI stack, starlette-admin is the better fit.

Maintenance and license: MIT with a caveat

The project is licensed under the MIT License, which is permissive and allows commercial use, modification, and redistribution. The repository is not archived, and the last push was on August 25, 2026, the same day as the 1.0.1 release. That shows active maintenance. The release cadence is a concern: 1.0.0.rc5, 1.0.0, and 1.0.1 all landed within ten days. That is normal for a release push, but it also means the API may shift in minor ways as users report issues. The README links to a test workflow and Codecov badge, so there is evidence of automated testing, but no coverage numbers are visible in the material. Upgrade cost is low if you stay on the same ORM, but moving between backends, say SQLAlchemy to Beanie, will require rewriting your ModelView definitions. The custom data source path is the most expensive to maintain because you own the CRUD logic.

Editorial conclusion

Adopt starlette-admin if you are building a FastAPI or Starlette app and want a generated admin interface that works across SQLAlchemy, SQLModel, Tortoise, Beanie, or MongoEngine without forcing a single ORM. Skip it if you need a fully mature, battle-tested admin with a huge ecosystem, or if your data source falls outside the supported backends and you are not ready to subclass BaseModelView. Before adopting, verify that the version you install matches the release 1.0.1 from August 2026, and check the documentation for the specific backend you plan to use, since the quickstart only shows SQLAlchemy.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes