Skip to content
Every statement on this page is cited and was checked against openjevx v0.5.9 (ee2a1f4) on 2026-10-04.

Quickstart

OpenJevX is one server binary plus one model folder. The binary holds no model. 1

A release is a small binary per platform plus one model folder archive, and you unpack both into the same directory. 2

The pinned server release is 0.5.9 ("version": "0.5.9" in package.json). 3

The release downloads fetch model 0.5.2. 4 5

Pick one of the four paths below, then make your first request.

The release has one archive per platform: openjevx-darwin-arm64.tar, openjevx-linux-amd64.tar, openjevx-linux-arm64.tar and openjevx-windows-amd64.zip. 6

The platform archives carry no openjevx.json, so a release unpacked over an old one never replaces your config or ships a password. 7

The model folder ships as openjevx-model-<version>.tar.gz, holding model/ with openjevx.w8.onnx, config.json and tokenizer.json. 8

Download the platform archive and the model archive, then unpack both into the same folder and run the server. 2 4

Terminal window
tar -xf openjevx-darwin-arm64.tar && tar -xzf openjevx-model-0.5.2.tar.gz && ./openjevx

On Linux (x86-64) the archive is openjevx-linux-amd64.tar; on Linux ARM (arm64, e.g. Graviton or Ampere) it is the same with openjevx-linux-arm64.tar instead. 9

The Linux builds need glibc 2.28 or later. 10

On Windows, unpack both into the same folder and run openjevx.exe. 11

There is no Intel-Mac build: ONNX Runtime 1.29 has none. 12

With no model set, the server looks next to itself for model/, then models/openjevx/, then openjevx.w8.onnx. 13 14

If none of those exists, it returns the error no model found: set "model" in openjevx.json, or put a model folder at followed by the paths it tried. 14

The npx installer downloads release v0.5.9 with model 0.5.2. 15

It installs into ~/.local/share/openjevx (override with OPENJEVX_HOME) and puts the openjevx command in ~/.local/bin (override with OPENJEVX_BIN). 16

Its openjevx command does cd into the install folder and then runs the server binary. 17

It picks the archive by OS and CPU: Windows gets openjevx-windows-amd64.zip, macOS arm64 openjevx-darwin-arm64.tar, Linux x64 openjevx-linux-amd64.tar and Linux arm64 openjevx-linux-arm64.tar. 18

Any other OS and CPU stops the installer with OpenJevX: no server build for …. 19

On an Intel Mac the reason given is that ONNX Runtime 1.29 has no Intel macOS build, so OpenJevX runs on Apple Silicon only (or use Docker). 19

On an upgrade it reads your openjevx.json before unpacking and writes it back afterwards. 20

It then adds only the keys your file lacks (listen 127.0.0.1:21118, device auto); your values always win. 21 22

When it finishes, it says the dashboard password is printed once on the first start and kept in openjevx.password in the install folder. 23

You need Go and Task. 24

task run fetches ONNX Runtime and the model folder into .local/, builds, and starts the server on http://127.0.0.1:21118/. 24

task build only builds; task test runs the tests. 24

Terminal window
task run
task build
task test

The build uses cgo: CGO_ENABLED=1 go build -o .local/openjevx ./cmd/openjevx. 25

task setup supports macOS arm64, Linux x86_64 and Linux aarch64, and fails with “unsupported platform” elsewhere. 26

The prebuilt image is for linux/amd64 and linux/arm64, tagged with each release and latest. 27

Terminal window
docker run -d -p 127.0.0.1:21118:21118 \
-e OPENJEVX_PASSWORD=<12+ characters> -e OPENJEVX_API_KEY=<16+ characters> \
ghcr.io/deemwar-products/openjevx:v0.5.9

The image has no default credentials: it refuses to start without OPENJEVX_PASSWORD and OPENJEVX_API_KEY, or your own openjevx.json mounted at /data/openjevx.json. 28

Make a key with openssl rand -hex 24. 29

The container listens on 0.0.0.0; the api_key is on whenever the server listens beyond loopback. 30 31

The server listens on 127.0.0.1:21118 unless openjevx.json says otherwise. 32 33

On that loopback address the API key is off unless you set one, so the request below needs no key. 34

Every recipe is one POST /v1/systemone with a state (the text or JSON the question is about) and named questions. 35

A noul question is a yes/no; read the probability of yes from noul. 36

The recipe call sends OPENJEVX_API_KEY; on 127.0.0.1 with no key set the server ignores the header, so the call works unchanged. 37 38

Terminal window
curl -s -H "Authorization: Bearer $OPENJEVX_API_KEY" localhost:21118/v1/systemone -d '{"state": "git push --force origin main", "questions": {"danger": {"type": "noul", "instructions": "Does this command overwrite history on a shared remote branch?"}}}' | jq -c .answers

The recipe recorded this answer from model 0.5.2 on server 0.5.7, CPU: 39

{"danger":{"action":{"act_probability":1},"answer_confidence":0.5513,"confidence":0.5513,"noul":0.5513,"probabilities":{"false":0.4487,"true":0.5513},"type":"noul"}}

The model missed this one: P(yes) 0.55, so jevx says unsure; treat unsure as yes for anything that rewrites shared history. 40

Your inputs will score differently: copy the pattern, not the numbers, and test on your own data. 41

The full response is {"model":"openjevx","answers":...,"usage":{"input_tokens":...,"output_tokens":0,"server_ms":...}}. 42

Each response also carries a Server-Timing header with encode, wait, run and total in ms. 43 44 45

A non-POST request gets 405, and a body with no questions gets 400 questions missing. 46 47

GET /health is open, with no password. 48

Terminal window
curl -fsS http://127.0.0.1:21118/health

/health returns status, device, model, version, sha256, source, fallback, loaded_at and dir. 49

Warning

/v1/systemone needs Authorization: Bearer <key> whenever the server listens beyond loopback; on 127.0.0.1, ::1 and localhost the key is off unless one is set. 50 With no listen in openjevx.json, the server listens on 127.0.0.1:21118, a loopback address. 51 52 When you set a non-loopback listen and no key, the server generates one into openjevx.api-key beside openjevx.json. 34 The deploy paths all listen beyond loopback, so they need the API key and the dashboard password; there are no default credentials anywhere. 53 Their firewall still opens only SSH; the customer opens port 21118 to their own network or uses an SSH tunnel. 54

Terminal window
curl -H "Authorization: Bearer YOUR_API_KEY" http://<host>:21118/v1/systemone -d @body.json

Warning

The dashboard password is always on: unset, the server generates one into openjevx.password. 55 A start that creates it shows the value once, and only on a terminal. 56 When stderr is a log (Docker, systemd, ECS, CloudWatch), it logs the file and a fingerprint (sha256 ...37dd), never the secret, so read it from the file. 57 The routes behind that password are the dashboard /, /stats, /metrics and /recipes. 55

The old published password adminadmin (in openjevx.json up to v0.5.6) is ignored and replaced by a generated one. 58

Set your own with "password" in openjevx.json or OPENJEVX_PASSWORD. 59

With a password set, the guard accepts HTTP Basic auth (any user name) or a ?password= query parameter. 60

allow_no_password (or OPENJEVX_ALLOW_NO_PASSWORD=1) turns the dashboard password off. 61

Use OpenJevX from the jevx CLI by adding a profile for its URL and selecting it. 62

Terminal window
jevx profile add openjevx http://127.0.0.1:21118/v1/systemone --model openjevx
jevx profile use openjevx

With an API key (any server not on loopback), let jevx read it from the environment. 63

Terminal window
jevx profile add openjevx http://<host>:21118/v1/systemone --model openjevx --header 'Authorization: Bearer $OPENJEVX_API_KEY'

jevx caches answers for 7 days, keyed by the profile’s model name. 64

After upgrading the OpenJevX model, run jevx cache clear, or give the profile a versioned model name such as openjevx-0.5.2. 65

Terminal window
jevx cache clear

jevx’s default thresholds: act on noul at or above 0.8, act on the no at or below 0.2, and on confidence at or above 0.6 for a choice or score. 66

Anything in between means: narrow the question, check it yourself, or ask the user. 67

Next: Configuration covers every key, and Model from object storage covers serving the model from a bucket.

  1. openjevx @ v0.5.9 (ee2a1f4) · README.md L65 ↩

  2. openjevx @ v0.5.9 (ee2a1f4) · scripts/package.sh L4–7 ↩ ↩2

  3. openjevx @ v0.5.9 (ee2a1f4) · package.json L3 ↩

  4. openjevx @ v0.5.9 (ee2a1f4) · README.md L133–134 ↩ ↩2

  5. openjevx @ v0.5.9 (ee2a1f4) · deploy/MODEL_VERSION L1 ↩

  6. openjevx @ v0.5.9 (ee2a1f4) · scripts/package.sh L5 ↩

  7. openjevx @ v0.5.9 (ee2a1f4) · scripts/package.sh L37 ↩

  8. openjevx @ v0.5.9 (ee2a1f4) · scripts/package.sh L6 ↩

  9. openjevx @ v0.5.9 (ee2a1f4) · README.md L137–146 ↩

  10. openjevx @ v0.5.9 (ee2a1f4) · bin/platform.js L1–2 ↩

  11. openjevx @ v0.5.9 (ee2a1f4) · README.md L148–150 ↩

  12. openjevx @ v0.5.9 (ee2a1f4) · docs/adr/0011-inference-runtime.md L30 ↩

  13. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/model.go L25 ↩

  14. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/model.go L64–70 ↩ ↩2

  15. openjevx @ v0.5.9 (ee2a1f4) · bin/openjevx.js L10–13 ↩

  16. openjevx @ v0.5.9 (ee2a1f4) · bin/openjevx.js L15–16 ↩

  17. openjevx @ v0.5.9 (ee2a1f4) · bin/openjevx.js L71–76 ↩

  18. openjevx @ v0.5.9 (ee2a1f4) · bin/platform.js L3–7 ↩

  19. openjevx @ v0.5.9 (ee2a1f4) · bin/platform.js L3–11 ↩ ↩2

  20. openjevx @ v0.5.9 (ee2a1f4) · bin/openjevx.js L54–61 ↩

  21. openjevx @ v0.5.9 (ee2a1f4) · bin/config.js L1–2 ↩

  22. openjevx @ v0.5.9 (ee2a1f4) · bin/config.js L11–14 ↩

  23. openjevx @ v0.5.9 (ee2a1f4) · bin/openjevx.js L82 ↩

  24. openjevx @ v0.5.9 (ee2a1f4) · README.md L220 ↩ ↩2 ↩3

  25. openjevx @ v0.5.9 (ee2a1f4) · Taskfile.yml L32–36 ↩

  26. openjevx @ v0.5.9 (ee2a1f4) · Taskfile.yml L15–19 ↩

  27. openjevx @ v0.5.9 (ee2a1f4) · README.md L154 ↩

  28. openjevx @ v0.5.9 (ee2a1f4) · README.md L169–170 ↩

  29. openjevx @ v0.5.9 (ee2a1f4) · README.md L171 ↩

  30. openjevx @ v0.5.9 (ee2a1f4) · deploy/docker-entrypoint.sh L16 ↩

  31. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/auth.go L21–23 ↩

  32. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/main.go L447–449 ↩

  33. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/main.go L474–476 ↩

  34. openjevx @ v0.5.9 (ee2a1f4) · README.md L31 ↩ ↩2

  35. openjevx @ v0.5.9 (ee2a1f4) · recipes/README.md L34–35 ↩

  36. openjevx @ v0.5.9 (ee2a1f4) · recipes/README.md L37–39 ↩

  37. openjevx @ v0.5.9 (ee2a1f4) · recipes/07-is-this-command-dangerous.md L7 ↩

  38. openjevx @ v0.5.9 (ee2a1f4) · recipes/README.md L21–22 ↩

  39. openjevx @ v0.5.9 (ee2a1f4) · recipes/07-is-this-command-dangerous.md L13 ↩

  40. openjevx @ v0.5.9 (ee2a1f4) · recipes/07-is-this-command-dangerous.md L37 ↩

  41. openjevx @ v0.5.9 (ee2a1f4) · recipes/README.md L50 ↩

  42. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/decision.go L96–100 ↩

  43. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/decision.go L19–20 ↩

  44. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/decision.go L95 ↩

  45. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/decision.go L112–115 ↩

  46. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/decision.go L23–26 ↩

  47. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/decision.go L56–59 ↩

  48. openjevx @ v0.5.9 (ee2a1f4) · README.md L208 ↩

  49. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/main.go L190–194 ↩

  50. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/auth.go L22–23 ↩

  51. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/main.go L447–448 ↩

  52. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/main.go L460–462 ↩

  53. openjevx @ v0.5.9 (ee2a1f4) · docs/DEPLOY.md L14–16 ↩

  54. openjevx @ v0.5.9 (ee2a1f4) · docs/DEPLOY.md L19–20 ↩

  55. openjevx @ v0.5.9 (ee2a1f4) · README.md L32 ↩ ↩2

  56. openjevx @ v0.5.9 (ee2a1f4) · README.md L38–39 ↩

  57. openjevx @ v0.5.9 (ee2a1f4) · README.md L38–40 ↩

  58. openjevx @ v0.5.9 (ee2a1f4) · README.md L42–43 ↩

  59. openjevx @ v0.5.9 (ee2a1f4) · README.md L202 ↩

  60. openjevx @ v0.5.9 (ee2a1f4) · cmd/openjevx/main.go L514–525 ↩

  61. openjevx @ v0.5.9 (ee2a1f4) · README.md L34 ↩

  62. openjevx @ v0.5.9 (ee2a1f4) · README.md L175–180 ↩

  63. openjevx @ v0.5.9 (ee2a1f4) · README.md L182 ↩

  64. openjevx @ v0.5.9 (ee2a1f4) · recipes/README.md L87–88 ↩

  65. openjevx @ v0.5.9 (ee2a1f4) · recipes/README.md L87–89 ↩

  66. openjevx @ v0.5.9 (ee2a1f4) · recipes/README.md L77–84 ↩

  67. openjevx @ v0.5.9 (ee2a1f4) · recipes/README.md L81 ↩