Skip to content

starlette-admin 1.0.0 - #798

Open
jowilf wants to merge 80 commits into
mainfrom
next
Open

starlette-admin 1.0.0#798
jowilf wants to merge 80 commits into
mainfrom
next

Conversation

@jowilf

@jowilf jowilf commented Jul 25, 2026

Copy link
Copy Markdown
Owner

I'm excited to finally open this PR for starlette-admin 1.0.0! I've been developing this privately over the last few months. While the diff looks huge, most of the volume actually comes from completely rewriting the documentation, expanding the test suite to include Playwright end-to-end tests, and adding over 20 new self-contained runnable examples, cookiecutter templates, and compiled translations.

For a full breakdown of how to upgrade, please check out the new Migration Guide.

pip install starlette-admin==1.0.0rc2

The Motivation

I wanted to redesign both the developer and user experience to make the project truly extensible. DataTables had a few limitations that were blocking custom enhancements, so I decided to drop it entirely in favor of server-side table rendering.

I also introduced official extension points. This should really help standardize how we all build and share custom fields and custom themes.


What Changed

Feature Area Description
Server-Side Lists DataTables is gone. Table state (page, sort, filters, search, visible columns) now lives entirely in the URL. This makes every list view bookmarkable and shareable.
Custom Filters I built a new pure Python filter builder that supports nested AND/OR conditions. It derives directly from field types and requires absolutely zero JavaScript.
Jinja Templates Per-field list templates (templates/fields/list/*.html) now replace the old client-side render functions.
Import & Export Added server-side handling for exporting and importing (CSV, JSON, Excel, PDF) complete with per-row error reporting.
Plugins & Themes We now have official concepts for plugins and themes, including cookiecutter templates to help you scaffold them quickly.
Lifecycle Events I added a full event system covering the record lifecycle (before_create, after_edit_committed, before_delete, etc.), actions, imports/exports, and auth (after_login). You can target a single view or subscribe across all views at once using AdminEventSubscriber classes and the @on decorator. These also support priority ordering.
Dashboard Widgets There is a new composable widget system for dashboards and custom pages. It includes content widgets (StatWidget, ChartWidget, TableWidget, TextWidget, HtmlWidget) and layout widgets (RowWidget, GridWidget, PanelWidget, TabsWidget). I also added a @route decorator so you can easily expose extra endpoints from any view.
Logging We finally have internal logging! No more silent-failure debugging sessions. Everything lives under the starlette_admin logger namespace and is silent by default. You can enable colored console output with configure_logging() or Admin(debug=True).
ORM Backends Full Tortoise ORM support is now available. I also hardened the Beanie backend, which now strictly requires version 2.0+.
Form Layouts Added support for rows, columns, fieldsets, tabs, inline edits right from the list page, and inline forms for related models (InlineModelView).
Security & Auth Built-in OAuth/OIDC login and out-of-the-box CSRF protection are now included.
New Fields Added ComputedField, SlugField, UUIDField, IPAddressField, field-level validators, and a clipboard copy function on any field.
LLM Skills The repo now ships with specific skills so LLM coding assistants can easily help you scaffold views, migrate from 0.17.x, and follow project conventions.
Documentation Completely rewritten from scratch. It includes a user guide, per-backend integration guides, and advanced guides for custom backends and extensions.

Breaking Changes

I've documented every breaking change with before and after examples in the Migration Guide. Here are the main highlights:

  • Python Version: Python 3.11+ is now strictly required. I have dropped support for 3.9 and 3.10.
  • DataTables Removed: Client-side options like datatables_options, search_builder, responsive_table, and save_state are gone. All customization has moved to server-side templates and the new filter builder.
  • Identifier Renames: identity is renamed to key, name is renamed to display_name, and label is renamed to menu_label.
  • Auth Provider Simplification: The AuthProvider contract merges is_authenticated, get_admin_user, and get_admin_config into a single authenticate method.
  • Batch Actions: Handlers now receive an ActionSelection object instead of a list of primary keys. This unlocks "select all matching" functionality.
  • Odmantic Backend Removed: Due to apparent low usage, I didn't migrate this backend to 1.0.0. If you rely on Odmantic, please stay on starlette-admin<=0.17.1 and open a GitHub issue. I am happy to re-add support if there is enough demand.

Release Plan

I'll be publishing a release candidate for a while before the final 1.0.0. This will give everyone time to test the new features, migrate their setups, and report any issues.

I would really appreciate feedback on the migration experience. If anything in the guide is unclear or missing, please open an issue with a minimal reproduction.

Live demo
username: admin
password: password

@github-actions
github-actions Bot temporarily deployed to pull request July 30, 2026 00:55 Inactive
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 30, 2026

Copy link
Copy Markdown

Deploying starlette-admin with  Cloudflare Pages  Cloudflare Pages

Latest commit: 739746b
Status: ✅  Deploy successful!
Preview URL: https://288a3f61.starlette-admin.pages.dev
Branch Preview URL: https://next.starlette-admin.pages.dev

View logs

@github-actions
github-actions Bot temporarily deployed to pull request July 30, 2026 02:00 Inactive
@github-actions
github-actions Bot temporarily deployed to pull request July 30, 2026 02:21 Inactive
@github-actions
github-actions Bot temporarily deployed to pull request July 30, 2026 06:56 Inactive
@regisin

regisin commented Jul 30, 2026

Copy link
Copy Markdown

Looks great, I'll be testing in the next few weeks. Just wanted to confirm a couple of things:
- the new documentation is here, right? https://d6f47bf1.starlette-admin.pages.dev/migration/
- have you combined you other project (sqlalchemy-file) here? I don't see it as a dependency, but I see an upload example in the new docs.

@regisin

regisin commented Jul 30, 2026

Copy link
Copy Markdown

Looks great, I'll be testing in the next few weeks. Just wanted to confirm a couple of things: - the new documentation is here, right? https://d6f47bf1.starlette-admin.pages.dev/migration/ - have you combined you other project (sqlalchemy-file) here? I don't see it as a dependency, but I see an upload example in the new docs.

Answering my own question, docs are here: https://starlette-admin.jowilf.com/

My problem was that googling for the project, this gh pages pops up: https://jowilf.github.io/starlette-admin/

@jowilf

jowilf commented Jul 30, 2026

Copy link
Copy Markdown
Owner Author

Answering my own question, docs are here: https://starlette-admin.jowilf.com/

Yes this will be the new link for the doc. should have probably waited for the official release of 1.0. The current stable version (0.17.1) is still hosted at https://jowilf.github.io/starlette-admin/. I will use https://d6f47bf1.starlette-admin.pages.dev/ in the PR note to make it clear it is a preview

  • Have you combined you other project (sqlalchemy-file) here? I don't see it as a dependency, but I see an upload example in the new docs.

No, but starlette-admin can now save a FileField directly when a storage is provided, mostly to support backends that do not have a file-saving mechanism, such as Beanie and Tortoise. It is directly inspired by sqlalchemy-file. I wrote more details about it at https://starlette-admin.jowilf.com/user-guide/file-storage/#transactional-alternative

Looks great, I'll be testing in the next few weeks.

Great, if you face any issues, please don't hesitate to comment on #800

@github-actions
github-actions Bot temporarily deployed to pull request August 1, 2026 01:38 Inactive
@github-actions
github-actions Bot temporarily deployed to pull request August 1, 2026 02:30 Inactive
@github-actions
github-actions Bot temporarily deployed to pull request August 1, 2026 03:44 Inactive
@github-actions
github-actions Bot temporarily deployed to pull request August 2, 2026 16:54 Inactive
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants