Metadata-Version: 2.4
Name: starlette-admin
Version: 1.0.0rc1
Summary: Fast, beautiful and extensible administrative interface framework for FastAPI & Starlette applications
Project-URL: Homepage, https://github.com/jowilf/starlette-admin
Project-URL: Documentation, https://jowilf.github.io/starlette-admin
Project-URL: Repository, https://github.com/jowilf/starlette-admin
Project-URL: Changelog, https://jowilf.github.io/starlette-admin/changelog/
Author-email: Jocelin Hounon <hounonj@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: admin,admin-dashboard,admin-panel,asgi,beanie,crud,dashboard,fastapi,mongodb,mongoengine,odm,orm,sqlalchemy,sqlmodel,starlette,tortoise-orm
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: AsyncIO
Classifier: Framework :: FastAPI
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: itsdangerous<2.3.0,>=2.2.0
Requires-Dist: jinja2<4.0.0,>=3.0.0
Requires-Dist: python-multipart>=0.0.18
Requires-Dist: starlette>=0.40.0
Provides-Extra: email
Requires-Dist: email-validator>=2.0.0; extra == 'email'
Provides-Extra: i18n
Requires-Dist: babel>=2.17.0; extra == 'i18n'
Provides-Extra: pdf
Requires-Dist: reportlab>=4.5.1; extra == 'pdf'
Provides-Extra: s3
Requires-Dist: aiobotocore>=2.5.0; extra == 's3'
Provides-Extra: tinymce
Requires-Dist: nh3>=0.2.14; extra == 'tinymce'
Description-Content-Type: text/markdown

# starlette-admin

*An extensible administrative interface framework for FastAPI and Starlette applications.*

<p align="center">
<a href="https://github.com/jowilf/starlette-admin/actions/workflows/test.yml">
    <img src="https://github.com/jowilf/starlette-admin/actions/workflows/test.yml/badge.svg" alt="Tests">
</a>
<a href="https://codecov.io/gh/jowilf/starlette-admin">
    <img src="https://codecov.io/gh/jowilf/starlette-admin/branch/main/graph/badge.svg" alt="Coverage">
</a>
<a href="https://pypi.org/project/starlette-admin/">
    <img src="https://badge.fury.io/py/starlette-admin.svg" alt="PyPI version">
</a>
<a href="https://pypi.org/project/starlette-admin/">
    <img src="https://img.shields.io/pypi/pyversions/starlette-admin?color=2334D058" alt="Python versions">
</a>
</p>

![Admin panel](./docs/assets/images/list-preview.png)

## Installation
```sh
# Using uv
uv add starlette-admin

# Using pip
pip install starlette-admin
```

## Quickstart

Get a fully functional administrative dashboard up and running in minutes. This example demonstrates an integration with FastAPI and SQLAlchemy.

```python
from contextlib import asynccontextmanager
from datetime import datetime, timezone

from fastapi import FastAPI
from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from starlette_admin.contrib.sqla import Admin, ModelView

engine = create_engine("sqlite:///blog.db", connect_args={"check_same_thread": False})


class Base(DeclarativeBase):
    pass


class Post(Base):
    __tablename__ = "posts"

    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
    content: Mapped[str]
    published: Mapped[bool] = mapped_column(default=False)
    created_at: Mapped[datetime] = mapped_column(
        default=lambda: datetime.now(timezone.utc)
    )


class PostView(ModelView):
    fields = ["id", "title", "content", "published", "created_at"]
    searchable_fields = ("title", "content")


@asynccontextmanager
async def lifespan(app: FastAPI):
    Base.metadata.create_all(engine)
    yield


app = FastAPI(lifespan=lifespan)
admin = Admin(engine, title="Blog Admin", secret_key="change-me")
admin.add_view(PostView(Post, icon="fa fa-newspaper"))
admin.mount_to(app)
```

Run with `fastapi dev` and open [http://127.0.0.1:8000/admin](http://127.0.0.1:8000/admin).

## Features

- Generated CRUD pages for your models
- Pagination, sorting, search, and shareable URLs
- Nested AND/OR filter builder
- Inline editing for related models
- Bulk actions and custom row actions
- CSV, Excel, JSON, and PDF export
- CSV, JSON and Excel import with dry-run validation
- Local and S3-compatible file storage (Amazon S3, MinIO, ...)
- Event hooks before and after CRUD operations
- Pluggable authentication, storage, fields, actions, and model views
- Theme customization, dark mode, internationalization, and timezone support



## Supported ORMs & Backends

`starlette-admin` is built to be agnostic. It ships with built-in support for popular ORMs and databases:

| Backend | Package Path |
| --- | --- |
| **SQLAlchemy** | `starlette_admin.contrib.sqla` |
| **SQLModel** | `starlette_admin.contrib.sqlmodel` |
| **Tortoise ORM** | `starlette_admin.contrib.tortoise` |
| **Beanie (MongoDB)** | `starlette_admin.contrib.beanie` |
| **MongoEngine** | `starlette_admin.contrib.mongoengine` |
| **Custom Data Sources** | Subclass `BaseModelView` |

---

## Documentation & Resources

* **[Full Documentation](https://jowilf.github.io/starlette-admin)**
* **[Quickstart Guide](https://jowilf.github.io/starlette-admin/getting-started/quickstart/)**
* **[User Guide](https://jowilf.github.io/starlette-admin/user-guide/views/)** (Covers views, fields, filters, actions, and auth)
* **[API Reference](https://jowilf.github.io/starlette-admin/api/admin/)**

## Live Demo

Explore the interface in action: **[starlette-admin-demo.jowilf.com](https://starlette-admin-demo.jowilf.com/)**

## Contributing

Contributions are always welcome! Whether it is reporting a bug, discussing improvements, or submitting a pull request, your input helps make this project better.

Please review our **[CONTRIBUTING.md](https://github.com/jowilf/starlette-admin/blob/main/CONTRIBUTING.md)** guidelines before opening a pull request.

## License

This project is licensed under the **MIT License**.
