plain-flags changelog
0.34.0 (2026-03-12)
What's changed
- Updated all imports from
plain.models to plain.postgres in admin, models, preflight, utils, and migrations.
- Updated
pyproject.toml dev dependency from plain.models to plain.postgres.
Upgrade instructions
- Update imports:
from plain.models to from plain.postgres, from plain import models to from plain import postgres.
- Update dependency declarations:
plain.models to plain.postgres in pyproject.toml.
0.33.4 (2026-02-26)
What's changed
- Auto-formatted config files with updated linter configuration (028bb95c3ae3)
Upgrade instructions
0.33.3 (2026-02-12)
What's changed
- Fixed missing
template_name on FlagResult admin UpdateView (ee27ad10c407)
Upgrade instructions
0.33.2 (2026-02-04)
What's changed
- Added
__all__ exports to exceptions and models modules for explicit public API boundaries (f26a63a5c941)
Upgrade instructions
0.33.1 (2026-01-28)
What's changed
Upgrade instructions
0.33.0 (2026-01-15)
What's changed
- Admin Card now uses
get_metric() instead of get_number() to follow the updated Card API (1a1c622)
- Added descriptions to admin list views for Flag and FlagResult models (0fc4dd3)
- Changed FlagResult nav icon from "flag" to "check2-square" (0fc4dd3)
Upgrade instructions
- If you have custom Card subclasses, rename
get_number() to get_metric()
0.32.0 (2026-01-13)
What's changed
- Improved README documentation with expanded examples, FAQs section, and clearer explanations (da37a78)
Upgrade instructions
0.31.0 (2025-11-21)
What's changed
ForeignKey has been renamed to ForeignKeyField in model definitions and migrations (8010204)
Upgrade instructions
0.30.1 (2025-11-17)
What's changed
- Model
query attributes no longer use ClassVar type annotations, reverting to standard type annotations for better compatibility (1c624ff)
Upgrade instructions
0.30.0 (2025-11-13)
What's changed
- Model
query attributes now use ClassVar type annotations for better type checker support (c3b00a6)
Upgrade instructions
0.29.0 (2025-11-13)
What's changed
- Model field definitions now use type stubs with
types.Field syntax instead of direct models.Field assignment for better type checker support (c8f40fc)
Upgrade instructions
0.28.0 (2025-11-12)
What's changed
- The
Flag class is now an abstract base class with get_key() and get_value() marked as abstract methods (24fe1f3)
Upgrade instructions
0.27.3 (2025-11-11)
What's changed
- Internal import path updated for database exceptions to use
plain.models.db (e9edf61)
Upgrade instructions
0.27.2 (2025-10-31)
What's changed
- Package metadata now includes explicit BSD-3-Clause license field (8477355)
Upgrade instructions
0.27.1 (2025-10-20)
What's changed
- Build configuration updated to use standardized
[dependency-groups] instead of [tool.uv] for dev dependencies (1b43a3a)
Upgrade instructions
0.27.0 (2025-10-12)
What's changed
- The unused flags preflight check has been refactored from a model method into an independent
PreflightCheck class registered with @register_check (38b43f3)
Upgrade instructions
0.26.0 (2025-10-07)
What's changed
- Model definitions now use
model_options = models.Options() instead of class Meta: (17a378d, 73ba469)
- Internal model metadata access updated to use
model_options and _model_meta properties (73ba469)
Upgrade instructions
0.25.3 (2025-10-06)
What's changed
- Added comprehensive type annotations throughout the package to improve IDE and type checker support (f05463f)
Upgrade instructions
0.25.2 (2025-10-02)
What's changed
- Updated README documentation to use
get_current_user() instead of request.user in template examples (f6278d9)
Upgrade instructions
0.25.1 (2025-09-29)
What's changed
- Fixed the admin interface for unused flags to display the
fix field instead of message field in PreflightResult (b75a38d)
Upgrade instructions
0.25.0 (2025-09-26)
What's changed
- Removed unused
uuid fields from Flag and FlagResult models along with their associated unique constraints (331ce37)
Upgrade instructions
0.24.0 (2025-09-25)
What's changed
- The
Flag.check() method has been renamed to Flag.preflight() to align with the new preflight system (b0b610d)
- Preflight results now use the new
PreflightResult class instead of Info (b0b610d)
- Database connection errors are now handled more gracefully during preflight checks by catching both
ProgrammingError and OperationalError (b0b610d)
- Preflight result messages and hints have been unified into a single
fix field (c7cde12)
Upgrade instructions
0.23.0 (2025-09-12)
What's changed
- Updated model API to use
.query instead of .objects for database operations (037a239)
- Minimum Python version requirement increased to 3.13 (d86e307)
- Admin navigation icon updated from "flag-fill" to "flag" (2aac07d)
Upgrade instructions
- No changes required (the
.objects to .query change is handled internally by the framework)
0.22.0 (2025-08-19)
What's changed
- Removed manual CSRF token from admin flag result form template, now handled automatically by Sec-Fetch-Site headers (9551508)
- Updated README with better structure, table of contents, and improved installation instructions (4ebecd1)
Upgrade instructions
0.21.1 (2025-07-23)
What's changed
- Admin navigation now includes Bootstrap icons for Flag and FlagResult sections (9e9f8b0)
Upgrade instructions
0.21.0 (2025-07-22)
What's changed
- Updated model migrations to use
PrimaryKeyField() instead of BigAutoField(auto_created=True, primary_key=True) (4b8fa6a)
- Model key coercion now uses
id instead of deprecated pk alias when generating flag keys (4b8fa6a)
Upgrade instructions
0.20.0 (2025-07-18)
What's changed
- Added OpenTelemetry tracing support to flag evaluation with detailed spans and attributes (b0224d0)
Upgrade instructions
0.19.0 (2025-07-18)
What's changed
- Migrations have been restarted and consolidated into a single initial migration (484f1b6)
Upgrade instructions
- Run
plain migrate --prune plainflags to clean up old migrations when upgrading from a previous version
0.18.0 (2025-06-23)
What's changed
- Dropped multi-database support:
Flag.check() now follows updated standard system-check signature that receives a single database keyword argument instead of databases. Internally the check no longer loops over multiple connections (d346d81).
- Updated the admin “Unused flags” card to use the new
database keyword (d346d81).
Upgrade instructions