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
.
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, N-Triples, Turtle, RDF/XML
- Rules: datalog dialect with support for existential rules (tuple-generating dependencies) and datatypes
- Output: CSV
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, Stefan Ellmauthaler, Lukas Gerlach, Maximilian Marx, Matthias Meißner, Simon Meusel, Markus Krötzsch: Nemo: First Glimpse of a New Rule Engine. Proceedings 39th International Conference on Logic Programming: ICLP 2023 Technical Communications, 2023. EPTCS, to appear. PDF + bibtex
Nemo is in heavy development and the current releases should still be considered unstable.
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)
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
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.