Skip to content

Installation

Usejarvis can run:

  • In Docker (recommended)
  • On your local machine via Bun
  • On a home server
  • On a VPS

Usejarvis can control files, terminals, browsers, remote channels, and connected machines. Treat installation as a security decision, not just a package install.

Before exposing the dashboard outside localhost or giving Usejarvis access to real accounts, read:

The daemon is the brain. It does not need to live on the same machine that you want to control. If you want Usejarvis to stay online 24/7, a server or always-on machine is the best fit. If you want Usejarvis to control a machine’s desktop, browser, or filesystem, install a sidecar there after the daemon is up.

Since 0.9, access is JWT-only by default. There is no shared password. You enroll each device with jarvis enroll, which mints a token the sidecar uses to connect. See Quick Start for the full flow.

Docker runs Usejarvis on any OS with a single command. No Bun or other dependencies required.

Download Docker Desktop for Windows, macOS, or Linux if you do not have Docker yet.

Terminal window
docker run -d --name jarvis \
-p 3142:3142 \
-v jarvis-data:/data \
ghcr.io/vierisid/jarvis:latest

The image is published to GHCR for amd64 and arm64. All daemon state lives in the jarvis-data volume, mounted at /data.

LLM providers, API keys, and model routing are configured from the settings dashboard after first boot. They are stored in the database and encrypted keychain, not in env vars or config.yaml. Non-LLM configuration can be provided via environment variables or by mounting a config.yaml into the /data volume.

Important limitation:

  • The daemon inside Docker cannot access your host desktop, browser, clipboard, or native apps.
  • To give Usejarvis desktop awareness and automation on a machine, install the sidecar on that machine. This is a required step, not an optional one. See Quick Start.

Because the daemon runs inside a container, run the enroll command through docker exec:

Terminal window
docker exec jarvis jarvis enroll "my-desktop"

This prints an enrollment token. You will paste it into the sidecar in the next step. Continue with Quick Start.

Use this if you want a native local install and already have Bun:

Terminal window
bun install -g @usejarvis/brain
jarvis start

The first time you run jarvis start, the daemon boots in setup mode and the dashboard at http://localhost:3142 guides you through LLM provider, voice, and profile setup.

Use this if you want the repository installed under ~/.jarvis/daemon automatically:

Terminal window
curl -fsSL https://raw.githubusercontent.com/vierisid/jarvis/main/install.sh -o /tmp/jarvis-install.sh
less /tmp/jarvis-install.sh
bash /tmp/jarvis-install.sh
jarvis start

If you want a more reproducible install, pin that URL to a specific release tag or commit instead of main.

Use this if you want the full source checkout:

Terminal window
git clone https://github.com/vierisid/jarvis.git ~/.jarvis/daemon
cd ~/.jarvis/daemon
bun install
bun run build:ui
bun link
jarvis start

Before installing, make sure you have:

  • Docker, or Bun for a native install
  • A supported OS: Linux, macOS, or Windows via Docker or WSL2 (the daemon does not run on native Windows; the sidecar does)
  • An API key for at least one LLM provider (configured in the dashboard after first boot)

Optional but common:

  • Ollama if you want local models
  • Google OAuth credentials for Gmail or Calendar features
  • Telegram or Discord bot credentials for remote messaging
  • ElevenLabs credentials if you want premium TTS

If you want repeatable management of non-LLM config, mount your own config.yaml into the container instead of relying only on environment variables.

Example pattern:

Terminal window
mkdir -p ~/.jarvis-docker
cp ~/.jarvis/config.yaml ~/.jarvis-docker/config.yaml

Then run:

Terminal window
docker run -d --name jarvis \
-p 3142:3142 \
-v ~/.jarvis-docker/config.yaml:/data/config.yaml \
-v jarvis-data:/data \
ghcr.io/vierisid/jarvis:latest

Remember: LLM provider keys are managed in the dashboard, not in this file.

When Usejarvis runs in Docker, localhost inside the container is the container itself.

That means:

  • ollama.base_url: http://localhost:11434 only works if Ollama is inside the same network context the daemon can actually reach
  • the same warning applies to local Whisper endpoints and similar local services

If those services live somewhere else, point Usejarvis at:

  • a reachable host IP
  • a service/container hostname
  • a reverse-proxied hostname

See Troubleshooting for the detailed explanation.

Best when:

  • You are just getting started
  • You want the simplest setup
  • You mainly use one machine

Tradeoffs:

  • Usejarvis only stays online while that machine is on
  • If you want it to start automatically after reboot, configure Autostart

Best when:

  • You want Usejarvis available 24/7
  • You want one daemon to coordinate multiple machines
  • You care about uptime more than local-only simplicity

Tradeoffs:

  • You need to set daemon.brain_domain with an explicit scheme (http:// or https://) so sidecars dial the right endpoint
  • Desktop/browser control still happens through sidecars on the target machines

The next steps are:

  1. Run Quick Start to enroll a device, connect the sidecar, and finish setup in the dashboard
  2. Configure Autostart if you run natively and want the daemon managed as a background service
  3. Install sidecars on any machines you want Usejarvis to control directly

The daemon and the sidecar are different things:

  • The daemon is the brain
  • The sidecar is the machine-level actuator

If you run Usejarvis in Docker or on a VPS and want it to see and control your laptop, install a sidecar on the laptop. See Desktop Control.