The reference grammar
UVL Parser
UVL community
Official ANTLR grammar for UVL with generated parsers for Java, Python and JavaScript. Every other implementation follows it.
$ pip install uvlparser$ npm install uvl-parserUniversal Variability Language
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.
features
Sandwich
mandatory
Bread
optional
Cheese
Sauce
alternative
Ketchup
Mustard
constraints
Ketchup => Cheese
Language
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.
mandatoryThe child must be selected whenever its parent is.
optionalThe child may be selected if its parent is.
orAt least one child is selected with the parent.
alternativeExactly one child is selected with the parent.
constraintsCross-tree propositional formulas over features, such as A => B.
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.
features
Sandwich
mandatory
Bread
optional
Cheese
Sauce
alternative
Ketchup
Mustard
constraints
Ketchup => Cheese
include
Boolean.group-cardinality
Arithmetic.aggregate-function
Arithmetic.feature-cardinality
features
Sandwich
mandatory
Bread {Calories 100, Sugar 20}
optional
Cheese
[0..2] // group cardinality
Cheddar {Calories 60}
Gouda {Calories 50}
Goat {Calories 35}
Sauce
or
Ketchup {Calories 40, Sugar 35}
Mustard {Calories 25, Sugar 5}
Pickle cardinality [1..3] // feature cardinality
constraints
Ketchup => Cheese
Bread.Sugar + Ketchup.Sugar + Mustard.Sugar < 60
sum(Calories) < 160 // attribute aggregate
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
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
features
Type
alternative
Ketchup
Mustard
imports
submodels.Sauces as Sauce
features
Sandwich
mandatory
Bread
optional
Cheese
Sauce.Type
constraints
Sauce.Ketchup => Cheese
Ecosystem
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.
The reference grammar
UVL community
Official ANTLR grammar for UVL with generated parsers for Java, Python and JavaScript. Every other implementation follows it.
$ pip install uvlparser$ npm install uvl-parserAutomated analysis in Python
University of Seville & partners
Framework for the automated analysis of UVL models with a CLI, a Python facade and pluggable SAT, BDD, SMT and
flamapy-fmflamapy-satflamapy-bddflamapy-z3flamapy-sharpsatflamapy-sddflamapy-dnnfflamapy-configurator
$ pip install flamapyAnalyze UVL in your browser
University of Seville
Write, visualize, analyze and configure UVL models online. Flamapy runs entirely client-side through WebAssembly, so there is nothing to install.
Open-science model repository
University of Seville & partners
Publish, search and analyze UVL datasets. Every dataset gets a Zenodo DOI and can be analyzed with Flamapy on the spot.
The feature-oriented IDE
Ulm · Braunschweig · Magdeburg · Paderborn
Eclipse-based IDE for feature-oriented software development that reads, writes and graphically edits UVL feature models.
Transform between notations
JKU Linz & KIT
Plugin-based framework that transforms between variability modelling notations, using UVL as the pivot, with one-way and round-trip modes.
Nothing to install. Open a browser and start modelling.
University of Seville
Browser IDE to write, visualize, analyze and configure UVL models with Flamapy compiled to WebAssembly.
Univ. Rennes / Inria
Dependency-free browser workbench with live well-formedness checks, a FODA diagram and SAT-based interactive configuration.
University of Seville
Run Flamapy operations on UVL in the browser, plus ready-made Google Colab notebooks.
University of A Coruña
Import models from UVLHub, edit them in Monaco and chat with an AI assistant that runs Flamapy analyses.
University of Málaga
Characterizes a UVL model with ~46 metrics and renders an interactive, exportable "nutrition-style" fact label.
$ pip install fmfactlabel
University of Ulm
Monaco-based UVL editor connected to the UVLS language server.
Editors, language servers and diagram tools.
UVL community
Language server for UVL with completion, diagnostics, go-to-definition, Z3-based semantic checks and a configuration editor.
UVL community
VS Code extension bundling UVLS for highlighting, completion, error checking and configuration editing.
University of Seville
Run Flamapy analysis operations on UVL files directly inside VS Code.
Ulm · Braunschweig · Magdeburg · Paderborn
Eclipse IDE that reads, writes and graphically edits UVL feature models.
Community
VS Code extension with graphical diagram editing of UVL models on Eclipse GLSP.
University of Seville
Drag-and-drop feature model editor with UVL import/export and SVG/PDF export ready for papers.
UVL community
LaTeX package to typeset UVL listings with syntax highlighting in papers and slides.
Solvers, counting, sampling and dependency analysis.
University of Seville & partners
Python framework for automated analysis of UVL with PySAT, BDD, Z3, ApproxMC, SDD and d-DNNF backends.
$ pip install flamapy
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
FeatureIDE team
Modular Java libraries succeeding the FeatureIDE core, with UVL formats feeding SAT and knowledge-compilation analyses.
University of Ulm
JavaSMT/Z3 reasoning library for UVL models, including arithmetic and typed constraints.
KIT
Python toolbox and CLI for cardinality-based feature models with UVL import/export and a graphical editor plugin.
$ pip install cfmtoolbox
Community
Rust framework for cardinality-based feature models covering UVL import, transformation, analysis and uniform sampling.
UNED
Computes graphs of strong transitive dependencies and conflicts between features from UVL or DIMACS models.
Community
C++/CUDA tool that simplifies UVL or DIMACS models and detects invalid feature interactions, with optional GPU acceleration.
From a valid configuration to a running product.
University of Seville
Turns a UVL model into a guided, question-by-question configurator with real-time consistency checking.
$ pip install flamapy-configurator
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
University of Málaga
Variability-resolution engine that derives products from UVL configurations and Jinja templates across text artifacts.
Community
Procedural macros that conditionally compile Rust code from UVL configurations exported by UVLS.
Community
Template-based generator turning UVL configurations into Swift implementations of design patterns.
Move models between UVL, solvers and other notations.
JKU Linz & KIT
Transforms between variability notations with UVL as the pivot metamodel, including round-trip modes and benchmarks.
JKU Linz & KIT
Round-trip transformation between Linux-style Kconfig and UVL.
JKU Linz & KIT
Converts FeatureIDE XML feature models to UVL and back.
Paderborn University
Docker pipeline that extracts feature models from Kconfig systems like Linux and converts them between FeatureIDE, UVL and DIMACS.
University of Ulm
Converts UVL to DIMACS CNF or SMT-LIB 2 and recovers UVL from them, with native Zig binaries.
$ pip install uvllang
UNED
C++ library and CLI converting UVL to DIMACS CNF with straightforward or Tseitin encodings.
Community
Encodes UVL feature models as pseudo-Boolean constraints on top of java-fm-metamodel.
University of Málaga
Bit-blasts numerical feature models into Boolean UVL, propositional formulas or CNF.
Community
Consistency-based merging of regional UVL feature models into one semantics-preserving model.
JKU Linz
Variability mining with a GUI that builds UVL models from sets of input variants.
Build UVL support into your own tool.
UVL community
Reference ANTLR grammar and parsers for Java, Python and JavaScript (the JS target is the UVL.js work).
$ pip install uvlparser
UVL community
Parse UVL into an object model, edit features and constraints, convert between language levels and write UVL back.
University of Seville
Plugin-based core of Flamapy with base classes for metamodels, operations and transformations.
$ pip install flamapy-fw
Univ. A Coruña & Seville
Brings Flamapy UVL analysis to any web or Node app via Pyodide/WebAssembly.
$ npm install @lbdudc/flamapy.js
UVL community
Tree-sitter grammar for fast, error-tolerant UVL parsing and highlighting.
Community
Java toolkit for behavioral feature models with UVL and VIBeS interoperability.
Real-world models, benchmarks and generators.
University of Seville & partners
Open-science repository of UVL datasets with Zenodo DOIs and built-in Flamapy analysis.
UVL community
Curated real-world variability models converted to UVL, organized by origin and domain. Pull requests welcome.
University of Ulm & partners
2,518 real-world feature models from the literature, exportable as UVL or DIMACS.
University of Ulm
Generates random or property-controlled UVL models covering the full language, with optional SMT checks.
University of Málaga
53 real-world UVL models from restaurant menus that exercise UVL's full expressiveness.
Univ. Málaga & UNED
Dataset and scripts building binary decision diagrams for the UVL models of the feature-model benchmark.
University of Seville
Reproducible benchmark of Flamapy's PySAT, BDD and Z3 backends over 1,611 UVL models from UVLHub.
Validate datasets and pin down what UVL means.
University of Seville
Scans large UVL datasets, reports syntax errors and auto-fixes common mistakes with correction patterns.
Community
Mechanized Dafny semantics of UVL with a CLI that checks well-formedness and types and infers language levels.
Let assistants read, generate and analyze UVL.
Univ. Seville & A Coruña
Official MCP server that lets LLM assistants validate and analyze UVL models with Flamapy.
$ uvx flamapy-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
University of A Coruña
Web workbench that combines a UVL editor with an AI chat running Flamapy analyses.
Community
Generates UVL from natural language with local LLMs using grammar-constrained decoding over the official grammar.
Community
LoRA fine-tuning pipeline so small language models produce valid UVL from natural-language descriptions.
University of Málaga
Builds UVL knowledge bases and evaluates LLM-generated UVL models against ground truth.
Community
Constraint-acquisition research code that learns UVL constraints and tree structure from a SAT oracle.
Domains already modelled with UVL.
University of Málaga
Synthesizes a UVL model of Kubernetes configuration options from its OpenAPI schemas.
Community
Synthesizes UVL feature models of Rust crates from Cargo.toml and crates.io data.
University of Málaga
Configures jMetal multi-objective metaheuristics from UVL feature models without writing code.
IMT · LIRMM
Variability-aware low-code DSL for MLOps pipelines that exports its feature model in UVL.
University of Seville
UVL model of fixed-pitch drone propellers with a physical-feasibility validator and design generator.
University of Seville
Models YOLOv11 face-detection settings in UVL and turns valid configurations into training parameters.
University of Seville
Generates best-practice data visualizations from UVL models of the visualization design process.
No tool matches your search.
Repositories of the Universal-Variability-Language organization on GitHub. Stars and activity are live.
| Repository | Purpose | Language | Stars | Last push |
|---|---|---|---|---|
| uvl-parser | Grammar definition and reference parsers. | ANTLR | – | – |
| java-fm-metamodel | Java feature-model API on top of the parser. | Java | – | – |
| uvl-lsp | UVLS language server and VS Code client. | Rust | – | – |
| uvlhighlight | LaTeX syntax highlighting for UVL. | TeX | – | – |
| uvl-models | Public feature models in UVL. | UVL | – | – |
| UVLEP | UVL Enhancement Proposals and design discussions. | Markdown | – | – |
| Universal-Variability-Language.github.io | Source of the official website. | Markdown | – | – |
| Repository | Purpose | Stars | Last push |
|---|---|---|---|
| tutorial-splc-2023 | Material for the UVL tutorial at SPLC'23. | – | – |
| uvl-tutorials-material | Reusable material for UVL tutorials. | – | – |
| uvl-evaluation-splc21 | Evaluation project of the SPLC'21 UVL paper. | – | – |
| bnf-uvl-parser deprecated | Original BNF/Clojure parser. | – | – |
MODEVAR
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.
Latest · 29 Sep 2026
Limassol, Cyprus. The first MODEVAR at VARIABILITY, the new conference that merges SPLC, VaMoS and ICSR.
29 Apr 2026
A free, open session with tool demos and industry use cases, where the UVLEP process was launched.
Project
UVL is actively maintained by a multi-university team, and its evolution is now driven by public enhancement proposals.
The first MODEVAR workshop (SPLC'19, Paris) sets the goal of a common feature-modelling language. Details
The UVL proposal is presented and named at MODEVAR@SPLC'20, together with the first design of Flamapy. Details
"Yet another textual variability language?" at SPLC'21. UVL lands in FeatureIDE and a first model repository appears. Paper
Language levels, conversion strategies and the UVLS language server at SPLC'23, plus a UVL tutorial. Paper
An open-science repository for UVL models is published in JSS, and UVL Sentinel validates whole datasets. Paper
The reference UVL paper receives the JSS Best Paper Award. UVL.js and flamapy.IDE are presented at VaMoS'25. Paper
MODEVAR Online launches the UVLEP process (April), uvl-parser 0.5 ships, and MODEVAR joins VARIABILITY'26 in Limassol (September). Details
How to cite
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@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}
}
Francisco Sebastian Benitez, José A. Galindo, David Romero-Organvidez, David Benavides · VaMoS '25
Victor Lamas, Maria-Isabel Limaylla-Lunarejo, Miguel R. Luaces, David Romero-Organvidez, José A. Galindo, David Benavides · VaMoS '25
Prankur Agarwal, Kevin Feichtinger, Klaus Schmid, Holger Eichelberger, Rick Rabiser · MODEVAR@VaMoS '24
Chico Sundermann, Vincenzo Francesco Brancaccio, Elias Kuiter, Sebastian Krieter, Tobias Heß, Thomas Thüm · SPLC '24
David Romero-Organvidez, José A. Galindo, Chico Sundermann, Jose-Miguel Horcas, David Benavides · Journal of Systems and Software
Chico Sundermann, Tobias Heß, Rahel Sundermann, Elias Kuiter, Sebastian Krieter, Thomas Thüm · MODEVAR '24
José A. Galindo, Jose-Miguel Horcas, Alexander Felfernig, David Fernandez-Amoros, David Benavides · SPLC '23 Tool Track
Jacob Loth, Chico Sundermann, Tobias Schrull, Thilo Brugger, Felix Rieg, Thomas Thüm · SPLC '23 Tool Track
Chico Sundermann, Stefan Vill, Thomas Thüm, Kevin Feichtinger, Prankur Agarwal, Rick Rabiser, José A. Galindo, David Benavides · SPLC '23 Tool Track
Dario Romano, Kevin Feichtinger, Danilo Beuche, Uwe Ryssel, Rick Rabiser · MODEVAR@SPLC '22
Jose M. Horcas, José A. Galindo, Mónica Pinto, Lidia Fuentes, David Benavides · SPLC '22
David Romero, José A. Galindo, Jose-Miguel Horcas, David Benavides · SPLC '21
Chico Sundermann, Tobias Heß, Dominik Engelhardt, Rahel Arens, Johannes Herschel, Kevin Jedelhauser, Benedikt Jutz, Sebastian Krieter, Ina Schaefer · MODEVAR@SPLC '21
Kevin Feichtinger, Johann Stöbich, Dario Romano, Rick Rabiser · VaMoS '21
Chico Sundermann, Kevin Feichtinger, Dominik Engelhardt, Rick Rabiser, Thomas Thüm · SPLC '21
José A. Galindo, David Benavides · MODEVAR@SPLC '20
Thomas Thüm, Christoph Seidl, Ina Schaefer · MODEVAR@SPLC '19
Thorsten Berger, Philippe Collet · MODEVAR@SPLC '19
Maurice H. ter Beek, Klaus Schmid, Holger Eichelberger · MODEVAR@SPLC '19
Missing a paper on UVL? Let us know.
Community
UVL is maintained by researchers from six institutions across Europe, together with a growing list of contributors.
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.
Write a UVL Enhancement Proposal. See the process below.
ModelsOpen a pull request on uvl-models, or publish a dataset with a DOI on UVLHub.
EcosystemDoes your tool read or write UVL? Open an issue and it will appear in the ecosystem catalogue.
CodeIssues and pull requests are welcome on the parsers, the metamodel and the language server.
EventsPresent your work and take part in the design discussions at the workshop.
Open a thread in Discussions.
Fill in the template and open a pull request.
Maintainers and community discuss and request changes.
Accepted, rejected or deferred once there is consensus.
Accepted proposals land in the grammar and tools.
Contact
Questions about UVL, ideas for collaboration or interest in using it in industry? Write to the core team.
Ask in public so the whole community benefits from the answer.
GitHub Discussions →