This is the official repository for the Soufflé language project. The Soufflé language is similar to Datalog (but has terms known as records), and is frequently used as a domain-specific language for analysis problems.
Efficient translation to parallel C++ of Datalog programs (CAV'16, CC'16)
Efficient interpretation using de-specialization techniques (PLDI'21)
Specialized data structure for relations (PACT'19, PPoPP'19, PMAM'19) with optimal index selection (VLDB'18)
Extended semantics of Datalog, e.g., permitting unbounded recursions with numbers and terms
Simple component model for Datalog specifications
Recursively defined record types/ADTs (aka. constructors) for tuples
Strongly-typed types for safety
Choice Construct (APLAS'21)
Extended I/O system for relations (including SQLITE3 interfaces)
Use git to obtain the source code of Soufflé.
$ git clone git://github.com/souffle-lang/souffle.git
Build instructions can be found here.
If you have written code for an older version of Souffle, please use the command line flag
Alternatively, please add the following line to the start of your source-code:
Use either the issue list for
or use the discussions bulletin board to engage with other community members and for asking questions you’re wondering about.
Issues and bug reports for Souffle are found in the issue list. This list is also where new contributors may find extensions / bug fixes to work on.
To contribute in this repo, please open a pull request from your fork of this repository. The general workflow is as follows.
Find an issue in the issue list.
Fork the souffle-lang/souffle repo.
Push your changes to a branch in your forked repo.
Submit a pull request to souffle-lang/souffle from your forked repo.
Our continuous integration framework enforces coding guidelines with the help of clang-format and clang-tidy.
For more information on building and developing Souffle, please read the developer tutorial.
If you use our work, please cite our work. A list of publications can be found here. The main publications are: