Install — Go, JS, Python
All three ports are published from the same release and carry the same version.
go get github.com/muthuishere/citenexus/golang@v0.12.0Go 1.26 · pkg.go.dev · the pure-Go deterministic core + Ask / AskWith over a corpus — no cgo, no native library. Extraction, lid.176 detection and the Lance store are opt-in: build the Rust cdylib (cd rust && cargo build --release) and compile with -tags citenexus_ffi.
npm install @muthuishere/citenexusNode ≥ 20 · npm · @muthuishere/citenexus · pure-JS core, dependency-free. Native extraction/detection/store live behind the /ffi subpath and load lazily via koffi — the npm package publishes dist only and ships no prebuilt binary, so build the Rust cdylib yourself or point CITENEXUS_CORE_LIB at one.
pip install citenexusPython ≥ 3.11 · PyPI · citenexus · the batteries-included reference facade: model injection, S3, ingest / ask / evaluate.
What each port gives you today
Section titled “What each port gives you today”- Python — the reference facade. Inject any OpenAI-compatible embedding + LLM
(+ optional reranker and vision), point it at a local folder or an S3 bucket,
and call
ingest/ask/evaluate. - Go & JavaScript — the deterministic cite-or-abstain core, in pure Go and
pure JS: the 14-script tokenizer, chunking, BM25 + RRF fusion, EU-IDs, the
answer-language chain, the grounding gate, and
askover a corpus handed in inline. Extraction (PDF/DOCX/PPTX/XLSX/HTML/MD/CSV/txt) and lid.176 language detection are not part of that pure port — they are opt-in native bindings over the shared Rust engine (Go:-tags citenexus_ffi; JS: the/ffisubpath), and both need the Rust cdylib built locally first.
Every pinned algorithm is byte-for-byte identical across the three —
tokenize v1 and v2, BM25, RRF, the chunker, the answer-language chain, EU-IDs and
the frozen gate — held there by the shared
conformance/
suite of golden vectors.
The one documented exception is ADR-0009’s per-claim faithfulness gate, which is Python-only on the answer path today: only Python splits an answer into atomic claims and verifies each one against the cited passage, while the ports verify the whole answer as a single claim. All three run the same order- and polarity-aware predicate — what that predicate checks, and why the one it replaced was unsound, is on the faithfulness gate.
Head to the Quickstart next, or read how it works if you want the pipeline before the code.