Nemo is a datalog-based rule engine for fast and scalable analytic data processing in memory. It is available as a command-line tool nmo
, through bindings to other programming languages, and via a browser-based web application.
Goals of Nemo are performance, declarativity, versatility, and reliability. It is written in Rust. Nemo's data model aims at compatibility with RDF/SPARQL while preserving established logic programming conventions and features. The following formats are currently supported:
- Input: CSV, TSV, DSV, N-Triples, Turtle, RDF/XML, N-Quads, TriG
- Rules: datalog dialect with support for existential rules (tuple-generating dependencies), stratified negation, and datatypes (including numeric comparison and arithmetic functions)
- Output: CSV, TSV, DSV, N-Triples, Turtle, RDF/XML, N-Quads, TriG
Nemo's datatypes allow the use of RDF-style data values but also "plain" names and constants in any of these formats.
The following publication gives a first overview of the system and can be used for citing Nemo:
- Alex Ivliev, Lukas Gerlach, Simon Meusel, Jakob Steinberg, Markus Krötzsch: Nemo: Your Friendly and Versatile Rule Reasoning Toolkit. Proceedings of the 21st International Conference on Principles of Knowledge Representation and Reasoning (KR 2024), IJCAI Organization 2024, to appear. PDF, bibtex
Nemo is in heavy development and the current releases should still be considered unstable.
We provide a live online demo that you can try in your browser. The application is based on the Nemo browser integration and runs entirely on your browser. Performance will therefore vary depending on your machine and browser (we found Firefox to be fastest).
The fastest way to run Nemo is to use system-specific binaries of our command-line client. Archives with pre-compiled binaries for various platforms are available from the Nemo releases page. To build your own version from source, you need to have an up-to-date installation of Rust. Moreover, Nemo requires the following dependency on Linux/Unix systems:
- OpenSSL development packages (e.g.,
libssl-dev
on Ubuntu oropenssl-devel
on Fedora; you may also need to installpkg-config
)
Download the source code (from a release or this repository) and run
cargo build -r
This will create the command-line client nmo
in the directory ./target/release/
.
Run the following command for an overview of current options:
nmo --help
Further details are found in the Nemo client documentation. Example Nemo programs and datasets can be found in the Nemo Examples repository.
Detailed information for users and developers is found in the Nemo documentation. Feel free to use GitHub discussions to ask questions or talk about Nemo.
Bug reports are also very welcome.
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Nemo by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
We use the following commands before committing:
cargo fmt
for our default formattingcargo clippy --all-targets
, followed by a (manual) repair of any issues
Nemo is developed by the Knowledge-Based Systems group at TU Dresden. Github provides the list of code contributors.
Special thanks are due to VLog, the conceptual predecessor of Nemo and a source of some of the tricks we use.
Made with ❤️ in Dresden.