Files
OpenJarvis/docs/getting-started/windows-native.md
a79cd6f5e9 feat(windows): Phase-1 native install + scheduled-task service (#438)
Closes Phase-1 of #298 (Native Windows Support RFC).

Reverses the long-standing "native Windows is not supported" stance. PowerShell installer at `deploy/windows/install.ps1` (published to https://open-jarvis.github.io/OpenJarvis/install.ps1) plus a `jarvis-service.ps1` scheduled-task helper that mirrors `deploy/systemd/openjarvis.service` and `deploy/launchd/com.openjarvis.plist`. Loopback default (127.0.0.1, no API key) — same as launchd.

One-liner install:
    irm https://open-jarvis.github.io/OpenJarvis/install.ps1 | iex

Adversarial review caught and fixed two real bugs pre-commit:
1. `irm | iex` drops `param()` flags — added env-var fallbacks (OPENJARVIS_SKIP_SERVICE / OPENJARVIS_SERVICE / OPENJARVIS_FORCE).
2. Scheduled tasks don't inherit the registering session's env — the LAN-exposed `OPENJARVIS_API_KEY` path now persists the key to User scope so the task's logon environment can read it.

Supersedes #434 (the guidance-only "use WSL2" install.ps1).

Massive thanks to @SeCuReDmE-main-dev for the careful RFC #298 — the three-phase decomposition (install / service / shared-memory bridge) is exactly the right framing. This PR ships Phase-1 and Phase-2 of the RFC fused into one release; Phase-3 (shared memory bridge) remains future work.

Thanks also to @KadenBordeaux for raising #334 ("'bash' is not recognized as the name of a cmdlet"). That report is what made this whole Windows-support cluster a priority — without your bug report the unsupported stance would still be in the README. The friction you hit motivated #432 (numpy/python cap), #433 (CLI startup resilience), #436 (python discovery helpers), #437 (desktop launcher fix), and this PR.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 16:44:10 -07:00

2.2 KiB
Raw Permalink Blame History

Native Windows (advanced)

Phase-1 of the native-Windows-support RFC (#298). Mirrors the Linux (systemd) and macOS (launchd) deployments — but for PowerShell, without WSL2 or Docker. Choose this over WSL2 only if you want to avoid a Linux VM; WSL2 remains the smoother experience for most users.

What you get

  • A PowerShell installer that probes prerequisites, installs uv, clones the repo, and runs uv sync --extra server.
  • An optional Windows scheduled-task service equivalent to the systemd unit and launchd plist.
  • Loopback default — the service binds 127.0.0.1 so no API key is required.

What you need

  • Windows 10 1809+ or Windows 11.
  • Python 3.10 3.13 (Python 3.14 has no numpy Windows wheels yet — see #432).
  • git on PATH.
  • ~5 GB free disk on %LOCALAPPDATA%.

Install

In any PowerShell:

irm https://open-jarvis.github.io/OpenJarvis/install.ps1 | iex

The installer will:

  1. Refuse non-Windows hosts and old Windows builds.
  2. Confirm Python 3.10 3.13.
  3. Confirm git.
  4. Install uv if absent (via the official astral.sh/uv PowerShell installer).
  5. Clone the repo to %LOCALAPPDATA%\OpenJarvis\src.
  6. Run uv sync --extra server.
  7. Prompt to register the scheduled-task service (skip with -SkipService).

Run it

cd "$env:LOCALAPPDATA\OpenJarvis\src"
uv run jarvis serve

Open http://127.0.0.1:8000/health to verify.

Scheduled-task service

If you skipped the prompt during install, register the auto-start task manually:

$srv = "$env:LOCALAPPDATA\OpenJarvis\src\deploy\windows\jarvis-service.ps1"
powershell -ExecutionPolicy Bypass -File $srv install

State:

powershell -ExecutionPolicy Bypass -File $srv status

Remove:

powershell -ExecutionPolicy Bypass -File $srv uninstall

See deploy/windows/README.md for the LAN-exposed configuration and the parity table against systemd / launchd.

See also