NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2698 most downloaded on PyPI
Simple and extensible admin interface framework for Flask
Last release 13 days ago
21 Sep 2026
Ships unpredictably
gaps range from 9 days to 1.5 years
Some releases are documented
notes for 23 of 45 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
53 releases · first in 2011
MongoEngine backend: stop reading the deprecated GridOut.contentType property. File downloads and list/form widgets now resolve the MIME type via meta…
Bugfixes:
BaseTimeBetweenFilter.validate() now returns False on invalid input instead of raising an exception.conv_ARRAY now infers the array element's python_type and passes it through as the Select2TagsField coerce callable. Saving a Postgres ARRAY(Integer) / ARRAY(Float) column no longer fails with column "x" is of type integer[] but expression is of type text[] (closes #1724).file (closes #2916).GridOut.contentType property. File downloads and list/form widgets now resolve the MIME type via metadata["content_type"], the GridFS document directly (for legacy data), or filename-based guessing (closes #2920).QueryAjaxModelLoader.format now handles unresolved DBRef values gracefully instead of crashing with AttributeError: 'DBRef' object has no attribute 'pk' (which surfaced as HTTP 500 from the autocomplete endpoint when a ReferenceField target was deleted). Broken references are shown as (missing: <collection>/<id>) so users can clear them (closes #2917).form_extra_fields when the child form is autogenerated. Previously, inline forms ignored these fields because they bypassed get_form() and called model_form() directly.Unique validator now resolves its session when it runs instead of capturing the session that was active when the form was scaffolded. With flask-sqlalchemy-lite, forms scaffolded inside a startup app_context() previously kept querying that context's Session, which was never committed, rolled back or closed, so one connection per process sat "idle in transaction" after the first save of a form with a unique column (and failed permanently with PendingRollbackError once the server dropped it). Both ModelView(Model, db) and the deprecated ModelView(Model, db.session) continue to work (relates to #2831).ModelView.get_one() now returns None when no record matches, instead of letting peewee's DoesNotExist propagate. Requesting the details, edit or delete view for an absent or malformed id no longer returns HTTP 500; it flashes "Record does not exist." and redirects, matching the other backends (closes #2924).Type hints:
typing.Any where full typing not yet available)One column per quarter.
SQLAlchemy filter classes ( FilterEqual , FilterLike , etc.) now accept a dotted-path string for the column argument (e.g. FilterEqual(column="author.
New Features:
FilterEqual, FilterLike, etc.) now accept a dotted-path string for the column argument (e.g. FilterEqual(column="author.email", name="Author Email")); the path is resolved against the view's model and the necessary joins are added automatically.Bugfixes:
Deprecate ModelView(Model, db.session) in favor of ModelView(Model, db): #2717
Deprecations:
New Features:
Bugfixes:
Others:
Deprecations:
Deprecate ModelView(Model, db.session) in favor of ModelView(Model, db): https://github.com/pallets-eco/flask-admin/pull/2717
New Features:
Flask-SQLAlchemy-Lite support: https://github.com/pallets-eco/flask-admin/pull/2789
Add page title header with icon above every view via new {% block page_title %}: https://github.com/pallets-eco/flask-admin/pull/2706
Upgrade bundled Bootstrap from 4.2.1 to 4.6.2 and remove unminified files: https://github.com/pallets-eco/flask-admin/pull/2787
Flash error message on form validation failure (“Failed to create/save record”): https://github.com/pallets-eco/flask-admin/pull/2738
Bugfixes:
Fix CSS class on column headers (dots replaced with dashes e.g.: col-user.email → col-user-email): https://github.com/pallets-eco/flask-admin/pull/2730
Return HTTP 403 instead of 500 when inaccessible_callback returns None: https://github.com/pallets-eco/flask-admin/pull/2793
FileAdmin: show empty date instead of 1970-01-01 when directory has no timestamp: https://github.com/pallets-eco/flask-admin/pull/2721
Fix “Save & Add Another” using non-relative redirect URL (broke behind reverse proxies): https://github.com/pallets-eco/flask-admin/pull/2716
Others:
Improved examples, tests, type hints
Adds support for Python 3.14: #2685
Adds support for Python 3.14: https://github.com/pallets-eco/flask-admin/pull/2685
Adds a MenuDivider item for bootstrap themes: https://github.com/pallets-eco/flask-admin/pull/2696
Field errors are now shown in red text for bootstrap themes: https://github.com/pallets-eco/flask-admin/pull/2699
Fix documentation Update arabic translations
Removed support for Python <3.10
Breaking changes from v1.6.1:
boto library has been replaced by boto3. S3FileAdmin and S3Storage now accept an s3_client parameter taking a boto3.client('s3') instance rather than aws_access_key_id, aws_secret_access_key, and region parameters.blob_service_client rather than connection_string to give more flexibility with connection types.Admin() now takes a theme parameter that encapsulates all of the configuration options for theming the admin instance. This replaces the template_mode parameter.FLASK_ADMIN_.| Config variable name | What's changed |
|---|---|
| FLASK_ADMIN_SWATCH | Removed; use Theme(swatch=...) instead |
| FLASK_ADMIN_FLUID_LAYOUT | Removed; use Theme(fluid=...) instead |
| MAPBOX_MAP_ID | Renamed to FLASK_ADMIN_MAPBOX_MAP_ID |
| MAPBOX_SEARCH | Renamed to FLASK_ADMIN_MAPBOX_SEARCH |
| MAPBOX_ACCESS_TOKEN | Renamed to FLASK_ADMIN_MAPBOX_ACCESS_TOKEN |
| GOOGLE_MAPS_API_KEY | Renamed to FLASK_ADMIN_GOOGLE_MAPS_API_KEY |
| DEFAULT_CENTER_LAT | Renamed to FLASK_ADMIN_DEFAULT_CENTER_LAT |
| DEFAULT_CENTER_LONG | Renamed to FLASK_ADMIN_DEFAULT_CENTER_LONG |
| ADMIN_RAISE_ON_INTEGRITY_ERROR | Renamed to FLASK_ADMIN_RAISE_ON_INTEGRITY_ERROR |
| ADMIN_RAISE_ON_VIEW_EXCEPTION | Renamed to FLASK_ADMIN_RAISE_ON_VIEW_EXCEPTION |
New functionality:
host_matching mode of Flask apps. See documentation for how to configure this where needed.pip install flask-admin[sqlalchemy] or list flask-admin[sqlalchemy] in your requirements.txt or pyproject.toml files.csp_nonce_generator function to the Admin instance. See examples or documentation for how to configure this where needed.page_size_options can now be configured on Admin models, to restrict the page sizes that users can select. These are now enforced properly and cannot be bypassed by URL hacking.Fixes:
packaginggettext() (when used in templates)Apply button for filters will show/hide correctly againtranslations_path attribute when Flask-Admin is used with Flask-Babelwidget if set in form_argsMisc:
Serbian translation updates
SQLAlchemy boolean filters now convert "1" and "0" to Python booleans, which fixes a type coercion issue with psycopg(3).
Fixes:
Mongonengine support has been added back (no longer using flask-mongoengine ): #2611
New functionality:
flask-mongoengine): #2611Fixes:
Misc:
Azure Blob Storage SDK has been upgraded from the legacy version (v2) to the latest version (v12). AzureFileAdmin now accept blob_service_client rathe
Breaking changes:
blob_service_client rather than connection_string to give more flexibility with connection types.Jinja templates can now be loaded in StrictUndefined mode.
Fixes:
Removed support for Python 3.8.
Breaking changes:
boto library has been replaced by boto3. S3FileAdmin and S3Storage now accept an s3_client parameter taking a boto3.client('s3') instance rather than aws_access_key_id, aws_secret_access_key, and region parameters.Fixes compatibility with WTForms 3.2+.
Fixes:
Apply button for filters will show/hide correctly againtranslations_path attribute when Flask-Admin is used with Flask-Babelwidget if set in form_argsFlask-BabelEx is no longer supported; the package is no longer maintained and Flask-Babel is recommended/active instead.
Breaking changes:
Admin() now takes a theme parameter that encapsulates all of the configuration options for theming the admin instance. This replaces the template_mode parameter.FLASK_ADMIN_.| Config variable name | What’s changed |
|---|---|
| FLASK_ADMIN_SWATCH | Removed; use Theme(swatch=...) instead |
| FLASK_ADMIN_FLUID_LAYOUT | Removed; use Theme(fluid=...) instead |
| MAPBOX_MAP_ID | Renamed to FLASK_ADMIN_MAPBOX_MAP_ID |
| MAPBOX_SEARCH | Renamed to FLASK_ADMIN_MAPBOX_SEARCH |
| MAPBOX_ACCESS_TOKEN | Renamed to FLASK_ADMIN_MAPBOX_ACCESS_TOKEN |
| GOOGLE_MAPS_API_KEY | Renamed to FLASK_ADMIN_GOOGLE_MAPS_API_KEY |
| DEFAULT_CENTER_LAT | Renamed to FLASK_ADMIN_DEFAULT_CENTER_LAT |
| DEFAULT_CENTER_LONG | Renamed to FLASK_ADMIN_DEFAULT_CENTER_LONG |
| ADMIN_RAISE_ON_INTEGRITY_ERROR | Renamed to FLASK_ADMIN_RAISE_ON_INTEGRITY_ERROR |
| ADMIN_RAISE_ON_VIEW_EXCEPTION | Renamed to FLASK_ADMIN_RAISE_ON_VIEW_EXCEPTION |
Title
New features:
host_matching mode of Flask apps. See documentation for how to configure this where needed.pip install flask-admin[sqlalchemy] or list flask-admin[sqlalchemy] in your requirements.txt or pyproject.toml files.csp_nonce_generator function to the Admin instance. See examples or documentation for how to configure this where needed.page_size_options can now be configured on Admin models, to restrict the page sizes that users can select. These are now enforced properly and cannot be bypassed by URL hacking.And various smaller bug fixes and documentation updates.
* SQLAlchemy 2.x support * General updates and bug fixes * Dropped WTForms 1 support
* Dropped Python 2 support * WTForms 3.0 support * Various fixes
SQLAlchemy 1.4.5+ compatibility fixes
Added hook for custom SQLAlchemy models initializers
SQLAlchemy 1.3.6 compatibility fix
Use fa-circle-o icon for unchecked booleans
Fix display of inline x-editable boolean fields on list view
Support nested categories in the navbar menu
column_default_sortcolumn_sortable_listcolumn_propertyminimum_input_length for ajax widgetAdded detail view column formatters
Fixed SQLAlchemy >= 1.2 compatibility
Dropped Python 2.6 support
Fixed SQLAlchemy >= 1.2 compatibility
Fixed Pewee 3.0 compatibility
Fixed max year for a combo date inline editor
Lots of small bug fixes
Fixed CSRF generation logic for multi-process deployments
Small bug fix release. Fixes regression that prevented usage of "virtual" columns with a custom formatter.
Tablib support (exporting to XLS, XLSX, CSV, etc)
Updated and reworked documentation
New feature: Edit models in the list view in a popup
Codebase was migrated to Flask-Admin GitHub organization
Mostly bug fix release. Highlights:
Mostly bug fix release. Highlights:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →