Feature state (splent.manifest.json)
Table of contents
Introduction
<product>/splent.manifest.json records where each feature of your product stands. pyproject.toml says which features you have, the UVL says the combination is valid, and the manifest says whether each one is installed, migrated and active.
splent feature:status
The CLI and the app keep the file for you. You read it, you never edit it.
What it holds
{
"product": "sample_splent_app",
"schema_version": "1",
"updated_at": "2026-03-23T12:00:00Z",
"features": {
"splent_io/splent_feature_notes@v1.2.7": {
"namespace": "splent_io",
"name": "splent_feature_notes",
"version": "v1.2.7",
"mode": "pinned",
"state": "declared",
"declared_at": "2026-03-23T12:00:00Z",
"installed_at": null,
"migrated_at": null,
"updated_at": "2026-03-23T12:00:00Z"
}
}
}
version is null for an editable feature, and mode follows the entry in pyproject.toml. state is declared, installed, migrated, active or disabled. States explains each one.
What updates it
| Operation | Change |
|---|---|
feature:add, feature:attach |
Creates the entry as declared |
feature:remove, feature:detach |
Removes the entry |
product:resolve |
Removes entries pyproject.toml does not list, and adds a declared one for each missing feature |
00_install_features.sh |
Advances to installed, after checking with pip show |
db:upgrade, db:reset |
Advance to migrated |
| The app’s start | Advances to active each feature at migrated or later, and each feature without migrations, once all have loaded. A failed start writes nothing |
The app updates the manifest only when the CLI is installed next to it.
Who reads it
feature:status shows each feature’s progress, and --json prints the raw manifest. doctor cross-checks it against pyproject.toml. The framework reads each state only to advance it.
The manifest never decides what loads. Every feature declared in
pyproject.tomlloads, whatever its recorded state.
Manifest shows the output of feature:status and how product:resolve cleans stale entries.
See also
- Feature lifecycle, the states and what moves a feature between them
- pyproject.toml, which features are included