Universal Variability Language

One common language for variability models.

UVL is a community-driven, textual language for feature models. It grew out of the MODEVAR initiative to let researchers and tools exchange variability models without translation headaches.

  • Readable & versionable. Plain text with indentation, made for diffs and code review.
  • Built for exchange. One format understood by Flamapy, FeatureIDE, TraVarT, UVLHub and dozens more.
  • Extensible by levels. Start Boolean, opt into arithmetic and typed features only when needed.
  • Thriving ecosystem. Editors, solvers, configurators, datasets and AI assistants, all speaking UVL.
sandwich.uvl
features
    Sandwich
        mandatory
            Bread
        optional
            Cheese
            Sauce
                alternative
                    Ketchup
                    Mustard

constraints
    Ketchup => Cheese
Feature tree of the sandwich model: Sandwich has mandatory Bread, optional Cheese, and optional Sauce with alternative Ketchup or Mustard. Sandwich Bread Cheese Sauce Ketchup Mustard
mandatory optional alternative Ketchup ⇒ Cheese
JSS Best Paper Award 2025 · Journal of Systems and Software, Regular Track
  • University of Seville
  • Johannes Kepler University Linz
  • TU Braunschweig
  • Karlsruhe Institute of Technology
  • University of Siegen
  • University of Málaga

Language

UVL at a glance

A feature model is a tree. Indentation gives the hierarchy, keywords give the relationship between a parent and its children, and constraints cover everything the tree cannot express.

mandatory

The child must be selected whenever its parent is.

optional

The child may be selected if its parent is.

or

At least one child is selected with the parent.

alternative

Exactly one child is selected with the parent.

constraints

Cross-tree propositional formulas over features, such as A => B.

Language levels

Tools do not need to support everything. UVL is split into stacked levels: a model declares the extensions it uses with include, and tools can convert models down to the level they understand.

Type level
include
    Type.string-constraints
    Type.numeric-constraints

features
    Sandwich
        mandatory
            Bread
            String Name        // typed features
            Integer Slices
        optional
            Cheese
            Sauce
                alternative
                    Ketchup
                    Mustard

constraints
    Ketchup => Cheese
    len(Name) <= 20             // string constraint
    Slices >= 2

Composing models with imports

Large models can be split into submodels. A composing model imports them under an alias and references their features anywhere in the tree or in constraints.

submodels/Sauces.uvl
// submodels/Sauces.uvl
features
    Type
        alternative
            Ketchup
            Mustard
sandwich.uvl
imports
    submodels.Sauces as Sauce

features
    Sandwich
        mandatory
            Bread
        optional
            Cheese
            Sauce.Type

constraints
    Sauce.Ketchup => Cheese

Ecosystem

A whole ecosystem speaks UVL

Editors, analyzers, configurators, converters, datasets and AI assistants from research groups and companies across Europe and beyond. Write a model once in UVL and take it anywhere.

65+tools & artifacts
10areas covered
9run right in your browser
3official parser targets: Java, Python, JS

Start with these

Try online

Nothing to install. Open a browser and start modelling.

flamapy.IDE

University of Seville

Browser IDE to write, visualize, analyze and configure UVL models with Flamapy compiled to WebAssembly.

UVL Studio

Univ. Rennes / Inria

Dependency-free browser workbench with live well-formedness checks, a FODA diagram and SAT-based interactive configuration.

Flamapy online demos

University of Seville

Run Flamapy operations on UVL in the browser, plus ready-made Google Colab notebooks.

Web Website

VariaBlens

University of A Coruña

Import models from UVLHub, edit them in Monaco and chat with an AI assistant that runs Flamapy analyses.

FM Fact Label

University of Málaga

Characterizes a UVL model with ~46 metrics and renders an interactive, exportable "nutrition-style" fact label.

$ pip install fmfactlabel
Web · Python Website Code Paper

UVL Playground

currently offline

University of Ulm

Monaco-based UVL editor connected to the UVLS language server.

Edit & IDEs

Editors, language servers and diagram tools.

UVLS

UVL community

Language server for UVL with completion, diagnostics, go-to-definition, Z3-based semantic checks and a configuration editor.

UVLS for VS Code

UVL community

VS Code extension bundling UVLS for highlighting, completion, error checking and configuration editing.

VS Code Website

Flama for VS Code

University of Seville

Run Flamapy analysis operations on UVL files directly inside VS Code.

VS Code Website Code

FeatureIDE

Ulm · Braunschweig · Magdeburg · Paderborn

Eclipse IDE that reads, writes and graphically edits UVL feature models.

Java Website Code

UVL GLSP Diagram Editor

Community

VS Code extension with graphical diagram editing of UVL models on Eclipse GLSP.

VS Code Website Code

FeatureDraw

University of Seville

Drag-and-drop feature model editor with UVL import/export and SVG/PDF export ready for papers.

Web Code

uvlhighlight

UVL community

LaTeX package to typeset UVL listings with syntax highlighting in papers and slides.

LaTeX Code

Analyze & reason

Solvers, counting, sampling and dependency analysis.

Flamapy

University of Seville & partners

Python framework for automated analysis of UVL with PySAT, BDD, Z3, ApproxMC, SDD and d-DNNF backends.

$ pip install flamapy
Python Website Code

Flamapy REST

University of Seville

REST API with Swagger docs exposing every Flamapy operation over HTTP, as a hosted service, Docker image and PyPI package.

$ pip install flamapy-rest
Python Website Code

FeatJAR

FeatureIDE team

Modular Java libraries succeeding the FeatureIDE core, with UVL formats feeding SAT and knowledge-compilation analyses.

Java Code

UVL-SMT

University of Ulm

JavaSMT/Z3 reasoning library for UVL models, including arithmetic and typed constraints.

Java Code

CFM Toolbox

KIT

Python toolbox and CLI for cardinality-based feature models with UVL import/export and a graphical editor plugin.

$ pip install cfmtoolbox
Python Website Code

CFMTools

Community

Rust framework for cardinality-based feature models covering UVL import, transformation, analysis and uniform sampling.

Rust Code

Strong4VM

UNED

Computes graphs of strong transitive dependencies and conflicts between features from UVL or DIMACS models.

C++ Code Paper

UVLParser (GPU)

Community

C++/CUDA tool that simplifies UVL or DIMACS models and detects invalid feature interactions, with optional GPU acceleration.

C++ · CUDA Code

Configure & derive

From a valid configuration to a running product.

flamapy-configurator

University of Seville

Turns a UVL model into a guided, question-by-question configurator with real-time consistency checking.

$ pip install flamapy-configurator
Python Code

SPLENT

University of Seville

Software product line toolkit for Python that turns a UVL feature model into a validated, containerized running product.

$ pip install splent-cli
Python Website Code

UVengine

University of Málaga

Variability-resolution engine that derives products from UVL configurations and Jinja templates across text artifacts.

Python Website Code Paper

UVL Rust variant generation

Community

Procedural macros that conditionally compile Rust code from UVL configurations exported by UVLS.

Rust Code

UVL2Pat

Community

Template-based generator turning UVL configurations into Swift implementations of design patterns.

Swift · Python Website Code

Transform & interoperate

Move models between UVL, solvers and other notations.

TraVarT

JKU Linz & KIT

Transforms between variability notations with UVL as the pivot metamodel, including round-trip modes and benchmarks.

Java Code

TraVarT Kconfig plugin

JKU Linz & KIT

Round-trip transformation between Linux-style Kconfig and UVL.

Java Code

TraVarT FeatureIDE plugin

JKU Linz & KIT

Converts FeatureIDE XML feature models to UVL and back.

Java Code

torte

Paderborn University

Docker pipeline that extracts feature models from Kconfig systems like Linux and converts them between FeatureIDE, UVL and DIMACS.

Shell · Java Website Code Paper

uvllang

University of Ulm

Converts UVL to DIMACS CNF or SMT-LIB 2 and recovers UVL from them, with native Zig binaries.

$ pip install uvllang
Python · Zig Code

uvl2dimacs

UNED

C++ library and CLI converting UVL to DIMACS CNF with straightforward or Tseitin encodings.

C++ Code

Pseudo-Boolean UVL encoder

Community

Encodes UVL feature models as pseudo-Boolean constraints on top of java-fm-metamodel.

Java Code

Nemo2

University of Málaga

Bit-blasts numerical feature models into Boolean UVL, propositional formulas or CNF.

Python Code

UVL Feature-Model Merger

Community

Consistency-based merging of regional UVL feature models into one semantics-preserving model.

Java Code

Varflix

JKU Linz

Variability mining with a GUI that builds UVL models from sets of input variants.

Java Code

Libraries

Build UVL support into your own tool.

uvl-parser

UVL community

Reference ANTLR grammar and parsers for Java, Python and JavaScript (the JS target is the UVL.js work).

$ pip install uvlparser
Java · Python · JS Code

java-fm-metamodel

UVL community

Parse UVL into an object model, edit features and constraints, convert between language levels and write UVL back.

Java Code

flamapy-fw

University of Seville

Plugin-based core of Flamapy with base classes for metamodels, operations and transformations.

$ pip install flamapy-fw
Python Website Code

flamapy.js

Univ. A Coruña & Seville

Brings Flamapy UVL analysis to any web or Node app via Pyodide/WebAssembly.

$ npm install @lbdudc/flamapy.js
JavaScript Code Paper

tree-sitter-uvl

UVL community

Tree-sitter grammar for fast, error-tolerant UVL parsing and highlighting.

C · JS Code

Behavioral Feature Model Toolkit

Community

Java toolkit for behavioral feature models with UVL and VIBeS interoperability.

Java Code

Models & datasets

Real-world models, benchmarks and generators.

UVLHub

University of Seville & partners

Open-science repository of UVL datasets with Zenodo DOIs and built-in Flamapy analysis.

uvl-models

UVL community

Curated real-world variability models converted to UVL, organized by origin and domain. Pull requests welcome.

UVL Code

Feature-Model Benchmark

University of Ulm & partners

2,518 real-world feature models from the literature, exportable as UVL or DIMACS.

UVL · DIMACS Code Paper

UVL Generator

University of Ulm

Generates random or property-controlled UVL models covering the full language, with optional SMT checks.

Java Code Paper

Restaurant-domain dataset

University of Málaga

53 real-world UVL models from restaurant menus that exercise UVL's full expressiveness.

UVL Code Paper

bdds4fms

Univ. Málaga & UNED

Dataset and scripts building binary decision diagrams for the UVL models of the feature-model benchmark.

Python Code Paper

Flamapy solver benchmark

University of Seville

Reproducible benchmark of Flamapy's PySAT, BDD and Z3 backends over 1,611 UVL models from UVLHub.

Python Code Paper

Quality & semantics

Validate datasets and pin down what UVL means.

UVL Sentinel

University of Seville

Scans large UVL datasets, reports syntax errors and auto-fixes common mistakes with correction patterns.

Python Website Code

mech-uvl

Community

Mechanized Dafny semantics of UVL with a CLI that checks well-formedness and types and infers language levels.

Dafny · C# Code

AI & LLMs

Let assistants read, generate and analyze UVL.

flamapy-mcp

Univ. Seville & A Coruña

Official MCP server that lets LLM assistants validate and analyze UVL models with Flamapy.

$ uvx flamapy-mcp
Python Code

UVL Analyzer MCP

University of A Coruña

Node MCP server exposing atomic sets, core and dead features and configuration counts to AI assistants.

$ npm install @lbdudc/mcp-uvl-analyzer
JavaScript Code

VariaBlens

University of A Coruña

Web workbench that combines a UVL editor with an AI chat running Flamapy analyses.

GCD for UVL

Community

Generates UVL from natural language with local LLMs using grammar-constrained decoding over the official grammar.

Python Code

SLM UVL fine-tuning

Community

LoRA fine-tuning pipeline so small language models produce valid UVL from natural-language descriptions.

Python Code

llms4uvl

University of Málaga

Builds UVL knowledge bases and evaluates LLM-generated UVL models against ground truth.

Python Code

UVL Learner

Community

Constraint-acquisition research code that learns UVL constraints and tree structure from a SAT oracle.

Python Code

UVL in the wild

Domains already modelled with UVL.

Kubernetes feature model

University of Málaga

Synthesizes a UVL model of Kubernetes configuration options from its OpenAPI schemas.

Python Code Paper

cargo-feature-analyzer

Community

Synthesizes UVL feature models of Rust crates from Cargo.toml and crates.io data.

Rust Code

jMetal Variability

University of Málaga

Configures jMetal multi-objective metaheuristics from UVL feature models without writing code.

Java Code

amlops

IMT · LIRMM

Variability-aware low-code DSL for MLOps pipelines that exports its feature model in UVL.

Python Website Code

Drone propeller SPL

University of Seville

UVL model of fixed-pitch drone propellers with a physical-feasibility validator and design generator.

YOLOv11 UVL configurator

University of Seville

Models YOLOv11 face-detection settings in UVL and turns valid configurations into training parameters.

Python Code

SPL for visualization design

University of Seville

Generates best-practice data visualizations from UVL models of the visualization design process.

Python · LaTeX Code Paper
Does your tool read or write UVL? Get it listed here and reach the whole community.
Add your tool

MODEVAR

Where UVL is designed, together

UVL was born at MODEVAR, the International Workshop on Languages for Modelling Variability. Since 2019 it has gathered researchers, tool builders and companies to agree on a common language, and it is still where UVL evolves.

10numbered editions
2019first workshop, Paris
3host conferences (SPLC, VaMoS, VARIABILITY) plus online editions
  1. #1 SPLC'19 10 Sep 2019 · Paris, France The kick-off. Ten position papers on a common feature-modelling language, including language levels and usage scenarios.
  2. #2 VaMoS'20 4 Feb 2020 · Magdeburg, Germany Working meeting on the design trade-offs of a universal variability language.
  3. #3 SPLC'20 20 Oct 2020 · Online UVL is presented and named. First design of the Flamapy analysis framework.
  4. #4 SPLC'21 6 Sep 2021 · Online UVL lands in FeatureIDE and the first prototype of a model repository, the seed of UVLHub.
  5. #5 SPLC'22 13 Sep 2022 · Graz, Austria First full UVL tutorial and a UVL ⇄ pure::variants bridge to industry.
  6. #6 VaMoS'24 6 Feb 2024 · Bern, Switzerland Keynote "24 Reasons Why Variability Models Are Not Yet Universal". Demos of UVLHub, UVL Sentinel and torte.
  7. #7 SPLC'24 2 Sep 2024 · Luxembourg UVL model generation, configuration formats and industrial adoption of UVL.
  8. #8 VaMoS'25 3 Feb 2025 · Rennes, France Lightning talks, breakout groups and a hands-on UVL tutorial.
  9. #9 SPLC'25 1 Sep 2025 · A Coruña, Spain Joint with Re:Volution. Variability modelling for digital twins and a two-session UVL tutorial.
  10. Online Online edition 29 Apr 2026 · Online Ten tool demos and industry use cases, launch of the UVLEP process and the UVL roadmap discussion.
  11. #10 VARIABILITY'26 29 Sep 2026 · Limassol, Cyprus First edition at VARIABILITY, the conference that merges SPLC, VaMoS and ICSR. Ten talks and a day on the future of UVL.

Latest · 29 Sep 2026

MODEVAR@VARIABILITY 2026

Limassol, Cyprus. The first MODEVAR at VARIABILITY, the new conference that merges SPLC, VaMoS and ICSR.

  • Introduction to Feature Modeling and UVL
  • Overview of Existing UVL Applications
  • Order Matters: An UVL Extension for Configuration Sequences
  • Varflix: A Tool for Semi-Automatic Variability Mining
  • Towards UVL-based variability modelling of drone propellers
  • UVL-Supported Configuration for YOLOv11 Face Detection
  • SysML v2 à la Carte: Feature-Based Product Configuration with UVL
  • Configurable Scheduling Problems: Modeling and Anomaly Detection
  • VariabLens: LLM-Enhanced Interactive Feature Model Analysis and Comparison
  • A Unified Visual Representation of UVL Models in Scientific Literature: The uvlhighlight Package
  • Mech-uvl: A Mechanized Semantic Toolkit for the Universal Variability Language

29 Apr 2026

MODEVAR Online Edition 2026

A free, open session with tool demos and industry use cases, where the UVLEP process was launched.

Project

Where UVL stands today

UVL is actively maintained by a multi-university team, and its evolution is now driven by public enhancement proposals.

0.5.1latest uvl-parser release
65tools in the ecosystem
11public repositories
6core institutions

Milestones

  1. 2019
    MODEVAR kick-off

    The first MODEVAR workshop (SPLC'19, Paris) sets the goal of a common feature-modelling language. Details

  2. 2020
    UVL is born

    The UVL proposal is presented and named at MODEVAR@SPLC'20, together with the first design of Flamapy. Details

  3. 2021
    Reference paper & first tools

    "Yet another textual variability language?" at SPLC'21. UVL lands in FeatureIDE and a first model repository appears. Paper

  4. 2023
    Language levels & UVLS

    Language levels, conversion strategies and the UVLS language server at SPLC'23, plus a UVL tutorial. Paper

  5. 2024
    UVLHub & UVL Sentinel

    An open-science repository for UVL models is published in JSS, and UVL Sentinel validates whole datasets. Paper

  6. 2025
    JSS paper & Best Paper Award

    The reference UVL paper receives the JSS Best Paper Award. UVL.js and flamapy.IDE are presented at VaMoS'25. Paper

  7. 2026
    Community process & VARIABILITY

    MODEVAR Online launches the UVLEP process (April), uvl-parser 0.5 ships, and MODEVAR joins VARIABILITY'26 in Limassol (September). Details

How to cite

UVL: Feature modelling with the Universal Variability Language

David Benavides, Chico Sundermann, Kevin Feichtinger, José A. Galindo, Rick Rabiser, Thomas Thüm. Journal of Systems and Software, vol. 225, 112326, 2025.

★ JSS Best Paper Award 2025 · Regular Track

doi:10.1016/j.jss.2024.112326
BibTeX
@article{Benavides2025UVL,
  title     = {UVL: Feature modelling with the Universal Variability Language},
  author    = {Benavides, David and Sundermann, Chico and Feichtinger, Kevin and
               Galindo, Jos{\'e} A. and Rabiser, Rick and Th{\"u}m, Thomas},
  journal   = {Journal of Systems and Software},
  volume    = {225},
  pages     = {112326},
  year      = {2025},
  publisher = {Elsevier},
  doi       = {10.1016/j.jss.2024.112326}
}

Publications

Missing a paper on UVL? Let us know.

Community

The people behind UVL

UVL is maintained by researchers from six institutions across Europe, together with a growing list of contributors.

University of Seville · Spain

Johannes Kepler University Linz · Austria

TU Braunschweig · Germany

Karlsruhe Institute of Technology · Germany

University of Siegen · Germany

University of Málaga · Spain

Further and former contributors: Dominik Engelhardt (TU Braunschweig), Dario Romano (JKU Linz), Stefan Vill (University of Ulm), Jacob Loth (University of Ulm), Prankur Agarwal (JKU Linz), David Romero-Organvidez (University of Seville). Should you be on this list? Tell us.

How to contribute

The UVLEP process

  1. 1Idea

    Open a thread in Discussions.

  2. 2Draft

    Fill in the template and open a pull request.

  3. 3Review

    Maintainers and community discuss and request changes.

  4. 4Decision

    Accepted, rejected or deferred once there is consensus.

  5. 5Implementation

    Accepted proposals land in the grammar and tools.

Contact

Get in touch

Questions about UVL, ideas for collaboration or interest in using it in industry? Write to the core team.

Technical question?

Ask in public so the whole community benefits from the answer.

GitHub Discussions →
Parser issues →