plain-assets changelog
0.4.1 (2026-06-26)
What's changed
- Removed references to the retired
plain.esbuildpackage from the docs and thecompilecommand's comments;plain.tailwindremains an exampleplain.assets.compilehook. (c6b3c7efc9)
Upgrade instructions
- No changes required.
0.4.0 (2026-06-22)
What's changed
- Reserved two top-level subdirectory names inside any assets dir for build tooling. A top-level
src/holds build inputs (a bundler's entry points and the modules they import) — it's skipped by discovery and never served. A top-leveldist/holds build outputs the tool has already content-hashed — Plain serves them immutable and as-is, without re-fingerprinting (it trusts the build tool's hash). Only the top-levelsrc//dist/are special; a nestedfoo/src/is treated normally. Added theis_build_output()helper. (ceefa283) - The assets manifest now records each asset's role inline (redirect target, immutable terminal, or mutable terminal) so immutability survives save/load. (ceefa283)
Upgrade instructions
- If you serve files from a top-level
src/directory inside your assets, they will no longer be served — move them out ofsrc/(or rename the directory). If you output a build tool's pre-hashed files into a top-leveldist/, they'll now be served immutable without Plain re-fingerprinting them. Otherwise no changes required.
0.3.0 (2026-05-12)
What's changed
- Command renamed:
plain assets build→plain assets compile. Now that the command lives underplain.assets(not core deploy-prep), the verb follows what the asset pipeline actually does. Pre-steps (user shell commands, package entry points) generate inputs that get compiled. (3b30b62309) - User shell commands move from
[tool.plain.assets.build.run]to[tool.plain.assets.run]. Drops the redundant.build.segment. - Entry-point group renamed from
plain.assets.buildtoplain.assets.compile. Packages registering pre-compile hooks update their group name.
Upgrade instructions
- Replace
plain assets buildwithplain assets compilein deploy scripts, Procfiles, and CI. - Rename
[tool.plain.assets.build.run]→[tool.plain.assets.run]in yourpyproject.toml. - If you ship a third-party package with a build entry point, rename the group from
plain.assets.buildtoplain.assets.compile. Framework-internal packages (plain.tailwind,plain.esbuild) are updated in this release wave.
0.2.0 (2026-05-12)
What's changed
- Build orchestrator namespace renamed from
plain.buildtoplain.assets.buildso the contract follows the package that owns it. (f698ec3436)- User-defined commands move from
[tool.plain.build.run]to[tool.plain.assets.build.run]inpyproject.toml. - Package entry points move from
[project.entry-points."plain.build"]to[project.entry-points."plain.assets.build"].
- User-defined commands move from
- README documents the build hooks (
[tool.plain.assets.build.run]for shell commands, the entry-point group for packages) under a new "Pre-compile build steps" section.
Upgrade instructions
Rename your
pyproject.toml:# Before [tool.plain.build.run] openapi = {cmd = "..."} # After [tool.plain.assets.build.run] openapi = {cmd = "..."}If you ship a third-party package that registers a build entry point, rename your entry-point group from
plain.buildtoplain.assets.build. The framework-internal packages (plain.tailwind,plain.esbuild) are updated in this release wave.
0.1.0 (2026-05-12)
What's changed
- First release.
plain.assetsis now a separate package, extracted fromplaincore (844f46e428). It owns:- The asset finder, manifest, compile pipeline,
AssetView, andAssetsRouter - The
plain assets buildCLI command (replaces the oldplain build) - The
asset()template global - Settings:
ASSETS_REDIRECT_ORIGINAL,ASSETS_CDN_URL,ASSETS_LOG_304
- The asset finder, manifest, compile pipeline,
Upgrade instructions
- Install the package and add it to
INSTALLED_PACKAGES— see theplain0.142.0 release notes for the full migration.