Self-hosted service
ad-freiburg/qlever avatar
ad-freiburg/qlever

QLever: a SPARQL engine built for whole knowledge graphs

Graph database implementing the RDF and SPARQL standards. Very fast and scales to more than a trillion triples on a single commodity machine

926 stars147 forksC++Apache-2.0

At a glance

What is it?
QLever is a C++ graph database implementing the RDF and SPARQL standards, written so that a single commodity machine can load and query graphs with hundreds of billions of triples, complete Wikidata among them. It ships a single command line tool, native packages for Debian, Ubuntu and macOS, a Docker and Podman image, and an embedded mode for C++ programs.
Who is it for?
QLever fits teams that need to serve SPARQL over a large public or internal RDF graph and want to avoid running a multi-machine cluster for it, and developers who want to embed a SPARQL engine directly in a C++ program. It does not fit teams that need a database with mature transactional guarantees, a broad SQL surface or an ecosystem of connectors, since it implements RDF and SPARQL only.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

One machine, hundreds of billions of triples

QLever, pronounced Clever, is a graph database that implements the RDF and SPARQL standards, and the pitch is scale on ordinary hardware. The README states that QLever can efficiently load and query very large datasets, even with hundreds of billions of triples, on a single commodity PC or server, and that the demos hosted at qlever.dev cover the complete Wikidata, Wikimedia Commons, OpenStreetMap, UniProt, PubChem and DBLP, with the largest dataset exceeding one trillion triples on a single PC. Those are the project's own claims, and the README links to a performance evaluation and comparison wiki page for the detail rather than asking readers to take the summary on trust. The audience is a research group or data platform team that already has RDF data and has found that a general-purpose triple store cannot answer its queries in reasonable time. The repository structure backs up the engineering effort: `src/`, `test/`, `e2e/`, `benchmark/`, `examples/`, `toolchains/`, `conanfile.txt`, `CMakeLists.txt` and a `master.Makefile`, which is what a performance-focused C++ system with continuous integration looks like.

The full SPARQL 1.1 surface, updates included

The standard coverage is stated directly: QLever implements the full SPARQL 1.1 standard, including federated queries, named graphs, the Graph Store HTTP Protocol, and updates. The Graph Store Protocol matters because it means a client can push triples into the store over plain HTTP rather than only loading bulk files, and updates mean the graph is not frozen after ingestion. Federated queries let one endpoint join against another, which is how a deployment stitches together datasets that live in different systems, and named graphs let one store hold several graphs with provenance. The repository's CI setup shows how the standard is defended: separate workflows for the Docker build, a native build that only runs when the complete CI passes, a format check, and coverage reporting through Codecov, plus `whitelisted-tests.txt` at the root, a mechanism for excluding tests that are not expected to pass in every configuration. The top-level `examples/` directory ships ready-made configurations such as `wikidata.settings.json` and `scientists.settings.json`, which show how a dataset is described to the engine.

Precomputed views, text search and query autocompletion

Beyond the standard, the README lists a set of features it calls unique. Precomputed views let a frequently asked query be stored and kept up to date, which is the usual answer to a slow join in a read-heavy graph workload. Advanced text-search capabilities cover the common RDF pattern of searching labels as well as identifiers. Context-sensitive autocompletion of SPARQL queries is the feature with the most visible effect on a human user, since the demo pages advertise it as making query construction much easier, and it is backed by a dedicated CIKM'22 paper with an extensive evaluation. Live query analysis shows what the engine is doing while a query runs, and efficient spatial queries and interactive visualization of very large numbers of geometric objects on a map extend the same idea to geometry. For a team choosing a store, these are the differentiators that a plain SPARQL implementation does not give you, and they are also the parts that will need to be evaluated against your own data rather than assumed.

Client-server, or embedded in your own C++ process

QLever can also be used as an embedded database, that is, without the standard client-server setup but running in-process inside your own C++ code. That is a meaningful architectural choice for a query engine, because it removes the network hop and the serialisation boundary for callers that are already in C++, and it lets an application hold the index in memory next to its own working set. The trade is that the embedded route is the narrow one: it is tied to C++ and to the library's build, so a Python or Java service cannot take that path without a native binding, while the client-server route with the `qlever` command line tool and the Graph Store HTTP Protocol is language agnostic. The repository's CI workflows are described as a Docker build and a native build that runs only when the complete CI passes, which suggests both routes are first class in the project's own testing.

Getting QLever: qlever command, packages or container

The Quickstart documentation is where the real instructions live, and the README gives the shape of the choices. There are native packages for Debian, Ubuntu and macOS, and a platform independent version as an image for Docker and Podman, published as `adfreiburg/qlever`. Whichever route you take, the README states that everything related to QLever can be controlled via a single command line tool, `qlever`, and it points to the Quickstart documentation at docs.qlever.dev for the details rather than duplicating commands here. The container route removes the build entirely. The image is staged, with a base stage carrying the locale and package installation settings and a separate builder stage that installs the toolchain, so the final image stays small, and the Dockerfile also documents how to skip running the test suite during the build:

dockerfile
FROM ubuntu:24.04 AS base
LABEL maintainer="Hannah Bast <[email protected]>"

ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
ENV LC_CTYPE=C.UTF-8
ENV DEBIAN_FRONTEND=noninteractive

The build dependencies listed there are ordinary for a C++ project of this kind: cmake, ninja-build, libicu-dev, libjemalloc-dev, libzstd-dev, libssl-dev, liburing-dev, mold as the linker, and a set of boost 1.83 components.

Building from source with CMake and Conan

For anyone who needs to build rather than install, the repository carries the full CMake project, with `CMakeLists.txt` at the root, `CompilationInfo.cmake` and `GitVersion.cmake` for version and build metadata, `conanfile.txt` and a `conanprofiles/` directory for dependency management, and `toolchains/` for cross compilation setups. `master.Makefile` is the top-level driver, and `misc/` holds supporting scripts, including `replace_pragma_once.py`. The CI setup gives a good picture of how a change is validated: a native build that only runs when the complete CI passes, a format check driven by `.clang-format` and `.pre-commit-config.yaml`, a codespell configuration in `.codespellrc`, and coverage measured through Codecov. A `SECURITY.md` file sits at the root, which tells you that vulnerability reports have a defined route. For a project with an upstream research group, this is a mature engineering wrapper around a fast-moving research engine.

What the standard does not give you, and what to weigh

Three limitations are worth weighing. The first is scope: QLever implements RDF and SPARQL, so a workload that also needs SQL, transactions with rollback across many statements, or a mature connector ecosystem is looking at a different category of system. The README's own positioning, a SPARQL engine for RDF graphs, is honest about that boundary. The second is the operational model of a research tool: releases are tagged often, with v0.5.50 in July 2026, v0.6.0 in August 2026 and rolling `latest-master` builds, and the README says QLever is in active and rapid development, which is a promise of change rather than of stability. Pinning to a tagged release rather than tracking master is the safer choice for production. The third is that the headline performance claims are comparisons against other engines on particular queries, and the README itself routes readers to the evaluation pages for the method. The last push was on 2026-10-19, so the tree is being worked on daily, and the licence is Apache 2.0, a permissive choice that suits both the research use and commercial deployment the project invites.

Editorial conclusion

QLever fits teams that need to serve SPARQL over a large public or internal RDF graph and want to avoid running a multi-machine cluster for it, and developers who want to embed a SPARQL engine directly in a C++ program. It does not fit teams that need a database with mature transactional guarantees, a broad SQL surface or an ecosystem of connectors, since it implements RDF and SPARQL only. Before adopting it, check the Quickstart documentation for the qlever commands that match your platform, confirm the update and federated query behaviour your integration relies on is covered by the tests you can run, and note that the last push was on 2026-10-19 with tagged releases such as v0.6.0 from 2026-08-13.

Frequently asked questions

How do I install QLever?

The README points to native packages released for Debian, Ubuntu and macOS, and a platform independent image for Docker and Podman published as adfreiburg/qlever. Either way everything is controlled through the single qlever command line tool, with the details in the Quickstart documentation at docs.qlever.dev.

Does QLever support the whole SPARQL 1.1 standard?

The README states that QLever implements the full SPARQL 1.1 standard, including federated queries, named graphs, the Graph Store HTTP Protocol and updates.

Can QLever be used inside a C++ application?

Yes. The README says QLever can be used as an embedded database, without the standard client-server setup but running in-process inside your own C++ code.

Which datasets are available to try QLever against?

The demos at qlever.dev cover the complete Wikidata, Wikimedia Commons, OpenStreetMap, UniProt, PubChem and DBLP, and the datasets are updated regularly. The largest of them has over one trillion triples.

Official sources

  1. ad-freiburg/qlever on GitHub
  2. Issues
  3. License: Apache-2.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/ad-freiburg-qlever.svg)](https://hysenlabs.com/projects/ad-freiburg-qlever)

Was this useful?