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.
A product is a thin Flask shell that declares its features. Each feature is a versioned Python package with its routes, models, migrations, templates, assets and tests, and its own services such as Redis or Nginx when it needs them. 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 its layers and how they fit together, the quickest way to 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 the selection against the UVL model before it writes anything. product:derive checks it again with the feature contracts, then resolves the pinned features, merges their Compose files and settings, applies migrations in the order the model gives and starts the product. product:release publishes the tag, the package and the image, and a server with the autodeploy feature picks the release up. Build, deploy and release covers the way to production.
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 |
| Product lines | UVL models published on UVLHub, each version with its DOI, so a clone of any product resolves the line it derives from |
| Marketplace | Where features and product lines are published and found, with a configurator for every line |
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 | 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.