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

A product line becomes a product, then a running server 1 Model UVL on UVLHub features and their constraints, by DOI 2 Configure product:configure pick what the model leaves open 3 Derive product:derive resolve, compose, migrate and start 4 Release product:release tag, package and image on stable Shared by every product Checked against the model and the contracts A server follows stable
A product line is a UVL model. A product is one configuration of it, derived on your machine and released to a server.

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.


Back to top

splent. Distributed by an LGPL license v3. Contact us: drorganvidez@us.es