SPLENT
From feature model to production.
Get started Marketplace Source
What is SPLENT
SPLENT (Software Product Line Engineering Toolkit) is a Software Product Line toolkit for Python. You pick features from a validated variability model, derive a running product with one command, and release it to a server that deploys itself.
Your product is a thin Flask shell that declares its features. Each feature is a versioned Python package with its routes, models, migrations, templates and tests. The products of a line share the same released features, so a fix to one feature reaches every product that uses it.
New to SPLENT? The SPLENT overview shows the big picture.
From model to production
These are the commands of the tutorials.
# 1. Choose a product line
splent spl:list
# 2. Create a product and configure it
splent product:create my_first_app
splent product:select my_first_app
splent product:configure
# 3. Derive it
splent product:derive --dev
# 4. Release it
splent product:release 1.0.0
product:configure checks your selection against the model before it writes anything. product:derive checks it again with the feature contracts, then resolves the features, applies migrations in the model’s order and starts the product. product:release publishes the tag, the package and the image, and a server that deploys the product picks it up. See Build, deploy and release.
What is checked before anything runs
| Check | What it catches |
|---|---|
| pyproject sanity | Duplicate features, inconsistent namespaces, an SPL model that cannot be found |
| UVL satisfiability | Missing mandatory features, unsatisfied constraints, invalid combinations |
| Contract compatibility | Route collisions, blueprint name conflicts, missing dependencies |
| Feature availability (build only) | Unpinned features, versions neither on PyPI nor tagged on the forge |
product:derive and product:build run these checks before Docker starts.
The pieces
| Piece | What it is |
|---|---|
| SPLENT Framework | The runtime. Discovers and composes features inside a Flask application, with configuration layering, template hooks, per-feature migrations and refinement between features |
| SPLENT CLI | The command line you and your CI drive the line from. Creates, configures, derives, tests, releases and deploys |
| SPLENT Marketplace | Where features and product lines are published and found, with a configurator for every line |
| Product lines | UVL models published on UVLHub, each version with its DOI, so a clone of any product resolves the line it derives from |
A product’s state lives in four places, pyproject.toml, the UVL model, splent.manifest.json and the env files. See Sources of truth.
Where to start
| You want to | Read |
|---|---|
| Install the environment | Getting started |
| Derive, extend and release a product step by step | Tutorials |
| Understand features, refinement and delivery | Foundations |
| Look up a command | Command index |
| Let Claude Code drive the CLI | Claude Code |
| Find or publish a feature | SPLENT Marketplace |
License
The framework, the CLI and the features of the catalog are free software under the GNU Lesser General Public License, version 3 or later (LGPL-3.0-or-later). A product built with them can carry any license, a closed one included, and what the CLI generates for it belongs to the product. Changes to SPLENT itself stay under the LGPL.
Project
SPLENT is developed by DiversoLab at the University of Seville. The code lives in splent_cli, splent_framework and splent_docs.