Skip to content

knowsys/nemo

Repository files navigation

Nemo

Build and Test main dependency status built with nix

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:

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), volume 385 of EPTCS, pp. 333–335, September 2023. PDF + bibtex

Nemo is in heavy development and the current releases should still be considered unstable.

Trying Nemo online

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).

Installation

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 or openssl-devel on Fedora; you may also need to install pkg-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/.

Usage

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.

Help

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.

License

This project is licensed under either of

at your option.

Contribution

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.

Development

We use the following commands before committing:

  • cargo fmt for our default formatting
  • cargo clippy --all-targets, followed by a (manual) repair of any issues

Acknowledgements

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.