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,072 stars103 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 received new commits within the last day.
What is it written in?
Mainly Python, according to GitHub's language statistics.

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

From daily snapshots

Star history

  • jowilf/starlette-admin1,072 ★ · +60
Star history
Repository2026-07-302026-11-14
jowilf/starlette-admin1k1.1k

60 Stars in the last 107 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial 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 SQLAdmin, an admin interface for SQLAlchemy that supports FastAPI and Starlette. Its SQLAlchemy focus differs from starlette-admin’s support for several ORM backends. 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 shown in the README. 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.

Frequently asked questions

What is starlette-admin?

An extensible administrative interface framework for FastAPI and Starlette applications. It generates CRUD pages for your models with pagination, sorting, search, shareable URLs, a nested filter builder, inline editing, bulk actions, exports to CSV, Excel, JSON and PDF, and imports from CSV, JSON and Excel with dry-run validation.

Which ORMs and databases does starlette-admin support?

SQLAlchemy, SQLModel, Tortoise ORM, Beanie for MongoDB and MongoEngine, each under its own contrib module path, plus custom data sources by subclassing BaseModelView. None of the five is in the runtime dependency list, so each is installed as an extra rather than with the base package.

How do I run the starlette-admin quickstart?

Add the package with uv or pip, declare a model, mount the admin under /admin and run the development server, then open http://127.0.0.1:8000/admin. The quickstart imports FastAPI and SQLAlchemy and runs fastapi dev, none of which the documented install line brings in, and the visible example stops before the panel is mounted.

Which Python versions does starlette-admin support?

Python 3.11 or later is required, with classifiers declared for 3.11 through 3.14. The runtime dependencies are itsdangerous, jinja2, python-multipart and starlette. The signing library carries both a floor and a ceiling inside one patch series, while starlette and python-multipart have floors and no ceilings.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/jowilf-starlette-admin.svg)](https://hysenlabs.com/projects/jowilf-starlette-admin)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/jowilf-starlette-admin.svg)](https://hysenlabs.com/projects/jowilf-starlette-admin)

Was this useful?