/souffle

Soufflé is a variant of Datalog for tool designers crafting analyses in Horn clauses. Soufflé synthesizes a native parallel C++ program from a logic specification.

Primary LanguageC++Universal Permissive License v1.0UPL-1.0

Welcome!

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.

License: UPL Zulip chat Build Status codecov

Features of Soufflé

  • Efficient translation to parallel C++ of Datalog programs
  • Efficient interpretation
  • Extended semantics of Datalog, e.g., permitting unbounded recursions with numbers and terms
  • Simple component model for Datalog specifications
  • Recursively defined record types (aka. constructors) for tuples

How to get Soufflé

Use git to obtain the source code of Soufflé.

$ git clone git://github.com/souffle-lang/souffle.git

Build instructions can be found here.

Legacy code

If you have written code for an older version of Souffle, please use the command line flag --legacy. Alternatively, please add the following line to the start of your source-code:

.pragma "legacy"

How to contribute

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.

  1. Find an issue in the issue list.
  2. Fork the souffle-lang/souffle repo.
  3. Push your changes to a branch in your forked repo.
  4. 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.