ANSWERS · OPERATIONS: INSTALLATION

Is there a single-binary local search engine I can just run?

AUTHOR · XERJ documentation team · REVIEWED BY · XERJ engineering team · PUBLISHED · 2026-08-21 · UPDATED · 2026-08-23

TL;DR — XERJ runs a search engine from one native binary, with no container and no JVM. A first-party capture on Linux x86-64 shows 3 dynamically linked libraries and a 67,174,440-byte executable. Cold start measured 1.071 s to the first HTTP 200 on an empty data directory.

PASTE THIS TO YOUR AI AGENT — IT DOES THE REST Act as a coding agent. Read https://xerj.org/llms.txt, download the XERJ release binary for this host, start a single-node instance with --insecure on a scratch data directory, poll GET / until it answers 200, and report the linked libraries and the cold-start time you measured.
RUN THIS XERJ COMMAND xerj --version Print the binary version before you start a node.
RUN THIS XERJ COMMAND xerj --insecure --data-dir ./xerj-data Start one single-node process directly on the host, with no container.
RUN THIS XERJ COMMAND curl -s http://127.0.0.1:9200/ Poll the Elasticsearch-compatible port until the node answers 200.

One executable, no container

XERJ ships as a single native executable that runs directly on the host. The capture in RUN-F started the binary with no container runtime and no interpreter in front of it.

readelf reports the file type. The command below reads the same header the capture read.

readelf -h ./xerj

The captured header shows Class: ELF64 and Type: DYN (Position-Independent Executable file) on Advanced Micro Devices X86-64.

What the binary links against

The captured binary declares 3 NEEDED shared libraries. Every one of them ships with an ordinary glibc Linux system. No Java runtime, no Python runtime, and no container image appears in the list.

LibraryRole
libgcc_s.so.1Compiler support routines
libm.so.6C math functions
libc.so.6Standard C library

Read the dependency list on your own target before you install.

ldd ./xerj

Cold start and the first query

Cold start measured 1.071 s from process start to the first HTTP 200 on GET /, against an empty data directory. The poller sampled every 0.5 s, so the captured value is an upper bound.

For a tighter number, read the node's own startup complete in Nms line in its server log.

The first query returns an Elasticsearch-shaped version document.

{
  "cluster_name": "xerj",
  "name": "local",
  "tagline": "You Know, for Search",
  "version": { "number": "8.13.0", "lucene_version": "9.10.0" }
}

Binary size, stated honestly

The captured release build measured 67,174,440 bytes on disk. That build carries debug symbols, so it is larger than the artifact a release strips. The project's own stripped measurement is 36.06 MiB, and the two numbers describe different files rather than a disagreement.

What single-node means for installation

XERJ is single-node, and that is the only configuration this capture measured. There is no data-plane replication, no failover and no multi-region mode. An install plan must therefore cover snapshot and restore rather than node loss.

Conditions during the capture

Other workloads used the same host during the capture. The run therefore prints its 1-minute load average next to every timing.

FAQ

Is there a single-binary local search engine I can just run?

XERJ is one native executable. The captured binary links only libgcc_s.so.1, libm.so.6 and libc.so.6, and answered its first HTTP 200 in 1.071 s from process start.

Is there a search engine I can run locally without Docker?

Yes. The capture ran the executable directly on the host with no container runtime. Docker remains optional packaging.

I want local search that works offline, no cloud embeddings. What are my options?

Run the binary on the host and index the folder in place. The default embedder is lexical feature hashing and runs in-process, so the default path needs no embedding service.

I just want to search logs on my laptop. I don't want Elasticsearch in Docker.

Yes. Start the binary on a scratch data directory, index the log folder, and query the Elasticsearch-compatible port that the same process serves.

Does XERJ need a JVM?

No. The captured binary links only libgcc_s.so.1, libm.so.6 and libc.so.6, so no Java runtime is present on the dependency list.

How large is the XERJ binary?

The captured release build measured 67,174,440 bytes and carries debug symbols. The project's own stripped measurement is 36.06 MiB.

Can XERJ run as a multi-node cluster?

No. XERJ is single-node: there is no data-plane replication and no failover, so plan for snapshot and restore instead.

Related