What’s new
What changed in the framework and the CLI, newest first, with the page that explains each change. Releases are tagged on git.splent.io and published on PyPI. Your product takes a release by pinning it under [tool.splent.runtime], which product:build writes.
Table of contents
splent_framework
Not released yet
- Storage per feature. Each feature keeps its files in a folder of its own. See Storage.
- HTTP APIs. problem+json errors, cursor pages, ETag and deprecation headers, and
accepted()for work that runs later. See HTTP APIs. - Background tasks report their progress, and
run_isolatedruns heavy work in a child process with a time and memory limit. See Background tasks. - A shared rate limit for every feature, and
form_guardfor public forms. See Rate limits and forms. - Safe fetching of an address someone else chose, with a total time limit. See Fetching URLs.
- Search fields, facets and sorts one feature adds to another’s. See Search.
- Content helpers such as
unique_slug,summary(),page_of()andpager(), and a sitemap built from what features register. See Content helpers. - The site’s own address and time zone, with
site_root(),absolute_url(),site_name()andlocal_now(). See The site. feature_cache, the product’s Redis or each process’s memory. See Cache.- Every template escapes, and
| safetrusts only markup. See Template system. - Icons, empty states and page behaviours (
icon(),empty_state,data-confirm,data-copy,data-reveal) on every shell. optional_moduleandoptional_attr, for a feature the product may not have.
1.29
- An editable product’s version is its checkout’s. See The product’s version.
- The framework names what a feature does, not which feature does it, for sessions and task queues. See Framework defaults.
1.28
- A feature’s bundle, drawn from its manifest, with
feature_scriptandfeature_style. See A feature’s bundle. register_assettakesscope,typeandintegrity. Seeregister_asset.- A Content-Security-Policy per page, from the features the page drew. See Content-Security-Policy per page.
1.27
register_menu_matchlights another feature’s menu entry on your screens. See The current entry.- A
listwithout choices can select a node of the feature model. See Letting a value select features. - A model of a feature the app does not load cannot break every query. See Database.
1.26
- A key per purpose with
SPLENT_DERIVED_KEYS. See Keys per purpose.
1.25
- The audit API,
record_eventandregister_audit_recorder. See Audit and reports. report_degraded,request_idand readiness listeners.
1.24
MARIADB_PORTin every config class. See Environment variables.
1.23
has_rolein every template. See Access control.param()reads a runtime value whichever API stored it. See Reading a parameter.- Protected files are denied by default. See Protected files.
- Tests start on an empty database and keep their files apart. See Fixtures.
1.22
- Typed parameters in
[tool.splent.config_schema]. See Typing a setting.
1.21
- A stronger configuration layer wins. See Configuration.
- Background tasks,
@taskandenqueue. See Background tasks. - Health probes,
/healthzand/readyz. See Health probes. - SameSite from the environment. See SameSite.
- The
sitemenu section. See Menus and shells.
splent_cli
Not released yet
- SQL and XSS sinks. A command reads a feature’s sources for them,
product:validatechecks them in an eighth phase, andfeature:releaserefuses a feature that has one. - The product’s storage in one volume, migrated at start.
feature:contractreads the framework’soptional_moduleandoptional_attras optional dependencies.
1.49
feature:releaserefuses a revision id longer than 32 characters. See Migrations.feature:contractmakes a link underhas_endpointan optional dependency. See Optional dependencies.- The neutral app finds its platform by what each piece does. See The platform.
feature:translateworks on any working copy. Seefeature:translate.- The CLI writes from its own templates, never a checkout in the workspace. See The CLI.
1.48
F-CSP-UNAPPROVEDgives one line per directive to approve. See Phase 7. Frontend.- Every build lints a feature’s globals against the page it declared. See Globals of the page.
- Vendored wheels are fetched and checked. See Vendored wheels.
F-CDNis an error for a feature withfrontend/.- The shell bundles the singleton it provides. See A feature with
frontend/.
1.47
product:validatechecks the features’ bundles in a seventh phase. See Phase 7. Frontend.docker/frontend.lock.jsonrecords every bundle the image installs. Seedocker/frontend.lock.json.product:frontend:auditaudits the bundles and writes their SBOM. Seeproduct:frontend:audit.splent.licenseTextsgives a package its licence file. See Licences and audit.
1.46
- A feature’s own JavaScript dependencies in
frontend/, built in the SPLENT toolchain image. See A feature withfrontend/. feature:compile,feature:npmandfeature:frontend:init. Seefeature:compile,feature:npmandfeature:frontend:init.- The release builds and gates the bundle, its licences and its audit. See Licences and audit.
1.45
spl:publishwith a product selected. Seespl:publish.- The deploy artifacts follow the pins. See After a pin changes.
product:validate --modeland--pyprojectcheck candidates. See A candidate pyproject or model.product:derive --dev --skip-validate. See Deriving past a failed pre-flight.- Nothing of root’s in the working copies. See Startup scripts.
1.44
SPLENT_APP=<product> splent <command>for another product. See Another product for one command.
1.43
- A feature’s tag carries its frontend bundle. See
feature:release. - The CI test job fetches the line’s model. See Continuous delivery.
1.42
- A product’s own commands,
splent product:<name>. Seeproduct:commands. [tool.splent.test] envfor a product’s own tests. Seeproduct:test.
1.41
product:params. Seeproduct:params.SPLENT_MIGRATE_ON_STARTanddb:status --check. See Startup script integration.
1.40
- Parameter nodes in the feature model. See Letting a value select features.
1.39
product:validatechecks parameters in a sixth phase. See Phase 6.- A breaking schema change needs a major version. See Parameters.
1.38
- A feature’s tests run in a neutral app when the product does not declare it. See The neutral app.
1.37
product:testruns the product’s own tests.check:vendorfinds Keenthemes code. Seecheck:vendor.- The start migrates once, under a database lock. See
db:upgrade. clear:uploadsempties the protected uploads. Seeclear:uploads.