Docs/jAIn/Running locally

jAIn

Running locally

The same workspace, in Docker on your machine. One command, and it needs Docker and nothing else.

Local interface, cloud compute. The workspace runs on your machine and the search runs on ours, so your table is uploaded to run. No model weights are ever downloaded. If the data must not leave the building at all, there is no configuration that does that today: a private deployment is in design and not shipped, and telling us the constraint is what gets it built against a real requirement.

Install

On macOS and Linux:

curl -fsSL https://veox.ai/install.sh | bash

On Windows, in PowerShell:

irm https://veox.ai/install.ps1 | iex

The two are the same program in two shells: same download root, same channel manifest, same digest-then-signature policy, same container name and port, same refusal to start an image whose loaded id is not the one the release names.

If you would rather run the Docker steps yourself, the release names its own version and the channel is where to read it:

# VERSION, and the tar's digest, come from here
curl -fsSL https://downloads.neverhuman.org/jain/latest.json

curl -fsSLO https://downloads.neverhuman.org/jain/$VERSION/jain-cpu-$VERSION.tar.gz
curl -fsSLO https://downloads.neverhuman.org/jain/$VERSION/jain-cpu-$VERSION.tar.gz.sha256
sha256sum -c jain-cpu-$VERSION.tar.gz.sha256

docker load -i jain-cpu-$VERSION.tar.gz
docker rm -f ai-veox-jain
docker run -d --name ai-veox-jain --restart unless-stopped \
  -p 127.0.0.1:8369:8080 jain/workspace:$VERSION

No page here names a version, and that is deliberate: a number printed in documentation can only ever be a claim about the past. latest.json is the release saying what it is, and the digest check is what the two installers do for you.

The installer checks Docker is present and its daemon reachable, verifies the download against the release manifest, verifies the signature if you have cosign, loads the image and starts it. It refuses to install anything whose digest does not match.

If Docker is not reachable

The installer checks Docker before it downloads anything, and stops there rather than leaving you a half-installed workspace. What it means depends on where you are running it.

WSL, on Windows

This is the common one, and it does not mean Docker is missing. Docker Desktop runs the engine on the Windows side, and a WSL distro can only reach it once WSL integration is switched on for that distro. Until it is, the docker your shell finds is Docker Desktop's Windows shim, inherited through the Windows PATH — it resolves, so it looks installed, and every call fails. The tell:

command -v docker
# /mnt/c/Program Files/Docker/Docker/resources/bin/docker  ->  integration is off
# /usr/bin/docker                                          ->  integration is on

Switch it on in Docker Desktop → Settings → Resources → WSL Integration, enable your distro, and Apply & Restart. Then open a new shell — or run wsl --shutdown in PowerShell and reopen — and run the installer again.

Two things not to do on the way. You do not need the docker group: in integration mode the socket is proxied in from Docker Desktop and usermod -aG docker answers group 'docker' does not exist, which is correct and not the problem. And do not install Docker Engine inside the distro alongside Desktop — that is a second engine, not a fix. If your distro is not offered in the integration list, wsl -l -v in PowerShell will show it still on version 1; wsl --set-version <name> 2 moves it.

Linux

Either the daemon is not running or your user cannot reach its socket:

sudo systemctl start docker
sudo usermod -aG docker "$USER"   # then log out and back in

macOS and Windows

Start Docker Desktop and let the whale icon stop animating before running the installer again. On a first install it can take a minute to come up.

Open it

It comes up on http://localhost:8369 — a port of our own rather than 8080, which is the most contended port on a developer machine. Sign in with the same account you use in the browser.

Everything after that is the workspace you already know: upload a table, choose the column to predict, watch the search, take the model and the report.

What binding to localhost means

The workspace binds to 127.0.0.1, so only your machine can reach it. That is deliberate: the container holds a live session for whoever can reach it, so exposing it to the network is a decision you make on purpose with --bind, not one the image makes for you.

It is also why a notebook can drive it. Anything on your machine that can make an HTTP request can run a session — see Drive it from Python.

Managing it

# follow the log
docker logs -f ai-veox-jain

# stop it, or remove it and its image and cache
curl -fsSL https://veox.ai/install.sh | bash -s -- --stop
curl -fsSL https://veox.ai/install.sh | bash -s -- --uninstall

Limits are the service's, not the container's

What your account may do is enforced by the service on every request, not by the copy of the workspace on your machine. There is nothing in the image to patch — it holds no model, no engine and no entitlement of its own.

Your file is deleted automatically after 30 days. What the run made from it — your report, your trained model and its evidence receipt — is kept. See what we keep.