Fast and convenient CLI utility for working with the Jelly knowledge graph streaming protocol.
If you are using Linux (x86_64, ARM64), macOS (ARM64), or WSL on Windows, the recommended way is to use the setup-cli.sh script, which will automatically install the newest release.
To do so, run:
. <(curl -sSfL https://w3id.org/jelly/setup-cli.sh)
jelly-cliYou can install jelly-cli on any platform (including Windows) using mise. Simply run:
mise use -g 'ubi:Jelly-RDF/cli[exe=jelly-cli]'
jelly-cliAlternatively, you can download the binary manually (this also works for Windows). Go to the releases page and download the build for your platform.
You can then run it like so:
chmod +x jelly-cli
./jelly-cliOr, on Windows:
jelly-cli.exeTo convert an RDF file (e.g., Turtle) to Jelly, simply run:
jelly-cli rdf to-jelly input.ttl > output.jellyTo convert from Jelly to RDF run:
jelly-cli rdf from-jelly input.jelly > output.nqBy default, jelly-cli will translate files to NQuads.
But you can also specify the output format with --out-format, for example:
jelly-cli rdf from-jelly input.jelly --out-format=ttl > output.ttlYou can specify most well-known formats supported by Apache Jena, but also a custom Jelly-Text format. Jelly-Text is a human-readable translation of Jelly binary. It's not meant for machine consumption. It is useful for debugging and inspecting Jelly files.
The rdf transcode command turns one or more input Jelly streams into a single output stream. It's extremely fast, using a dedicated transcoding algorithm. However, the numerical values for each of the options in the output stream must be greater than or equal to those in the input stream(s).
jelly-cli rdf transcode input.jelly > output.jellyTo inspect a Jelly file and get basic information describing its contents, such as stream options or number of triples in the file, run
jelly-cli rdf inspect input.jellyYou can also compute the statistics separately for each stream frame with the --per-frame option:
jelly-cli rdf inspect input.jelly --per-frameIn both cases, you will get the output as a valid YAML.
To validate a Jelly file, run
jelly-cli rdf validate input.jellyYou can also check whether the Jelly file has been encoded using specific stream options or is equivalent to another RDF file, with the use of additional options to this command.
Use the --help option to learn more about all the available settings:
jelly-cli rdf to-jelly --help
jelly-cli rdf from-jelly --help
jelly-cli rdf transcode --help
jelly-cli rdf inspect --help
jelly-cli rdf validate --helpAnd use the --debug option to get more information about any exceptions you encounter.
If for some reason the binaries wouldn't work for you, or you want to get better performance for large files (see Performance considerations below), you can use the JAR build. This build runs on any platform, as long as you have Java (min. version 17). Go to the releases page and download the jelly-cli.jar file. Then, run it like so:
java -jar jelly-cli.jar --helpFor most use cases, we recommend using the binary distribution, because it has way faster startup times and doesn't require you to install Java.
If you are bulk-converting large amounts of RDF data (>10M triples), you may want to use the JAR build instead of the pre-compiled binary. With the JAR, your JVM will perform just-in-time compilation, resulting in a better optimized code. The application will take longer to start, but the overall throughput will be better for large files.
For maximum performance, we recommend using a recent JVM (e.g., GraalVM or OpenJDK). In some cases we saw up to 2x better throughput when running the JAR with GraalVM 24 in JIT mode, as compared to the pre-compiled binary.
If you're using jelly-cli in your GitHub Action CI/CD workflows, consider using the jelly-rdf/setup-cli action (Marketplace link). The action will automatically download and install the appropriate binary. Simply run the action before jelly-cli usage:
steps:
- uses: Jelly-RDF/setup-cli@v1
- run: jelly-cli rdf to-jelly input.ttl > output.jellyjelly-cli is based on Apache Jena 5.3.0, which is the last version of Jena that supports RDF-star. Later versions removed RDF-star support in favor of draft support for RDF 1.2, which is not directly compatible with RDF-star. Because RDF 1.2 is not yet a W3C Recommendation, we stick to RDF-star for now and will update to RDF 1.2 once it is finalized.
We welcome contributions! Feel free to open an issue, suggest new features, or submit pull requests.
💬 Chat with us on Discord to ask questions or discuss ideas.
⭐ Consider starring this repository – this really helps the project!
Run sbt fixAll before committing. Your code should be formatted and free of warnings.
The CI checks will not pass if this is not the case.
- Ensure you have GraalVM installed and the
native-imageutility is available in yourPATH. - Clone the repository.
- Run
sbt GraalVMNativeImage/packageBin - The binary will be available at
./target/graalvm-native-image/jelly-cli.
- Run
sbt assembly - The resulting JAR will be in
./target/scala-3.*.*/jelly-cli-assembly-*.jar - Run it like:
java -jar <path-to-jar>
The development of the Jelly protocol, its implementations, and supporting tooling was co-funded by the European Union. More details.