fix(install): Windows discoverability + Git Bash early bail + concrete uv install command (#399)

Follow-up to PR #398. Three surface fixes for the Windows install confusion documented in two Discord support threads. See PR #399 for the full breakdown.
This commit is contained in:
Jon Saad-Falcon
2026-05-23 08:54:10 -07:00
committed by GitHub
3 changed files with 72 additions and 8 deletions
+13 -2
View File
@@ -31,11 +31,22 @@ OpenJarvis is that stack. It is a framework for local-first personal AI, built a
## Installation
**macOS / Linux:**
```bash
curl -fsSL https://openjarvis.ai/install.sh | bash
```
> **If you see `sslv3 alert handshake failure` on `openjarvis.ai`** ([issue #337](https://github.com/open-jarvis/OpenJarvis/issues/337)), use the GitHub mirror until the domain is restored:
**Windows:** the installer is a `bash` script and won't run in PowerShell or `cmd`. Pick one of:
- **WSL2 (recommended for the CLI / Python SDK)** — one-time setup in an admin PowerShell, then run the same `curl … | bash` inside Ubuntu:
```powershell
wsl --install -d Ubuntu-24.04
```
Open the Ubuntu shell that gets installed, then follow [WSL2 install instructions](https://open-jarvis.github.io/OpenJarvis/getting-started/wsl2/).
- **Desktop app** — download the `.exe` from the [Releases page](https://github.com/open-jarvis/OpenJarvis/releases) for the GUI experience, no terminal required.
> **If `curl` fails on `openjarvis.ai` with `sslv3 alert handshake failure`** ([issue #337](https://github.com/open-jarvis/OpenJarvis/issues/337)), use the GitHub mirror until the domain is restored:
>
> ```bash
> curl -fsSL https://raw.githubusercontent.com/open-jarvis/OpenJarvis/main/scripts/install/install.sh | bash
@@ -51,7 +62,7 @@ jarvis
The Rust extension and bigger models continue downloading in the background while you chat. Run `jarvis doctor` to see status.
**Platforms:** macOS (Intel + Apple Silicon), Linux, WSL2 on Windows.
**Platforms:** macOS (Intel + Apple Silicon), Linux, WSL2 on Windows. Native Windows is not supported — use WSL2 or the desktop binary.
**Manual install / contributors:** see [docs/getting-started/install.md](docs/getting-started/install.md).
+25 -6
View File
@@ -495,14 +495,33 @@ async fn boot_backend(backend: SharedBackend, status: SharedStatus) {
let uv_bin = resolve_bin("uv");
// Verify uv is actually installed
// Verify uv is actually installed. Concrete per-OS instructions —
// the generic "install it from astral.sh" was the #1 source of
// confusion on the Discord support thread; users couldn't tell whether
// to use winget, scoop, pip, or the official installer.
if !std::path::Path::new(&uv_bin).exists() && uv_bin == "uv" {
let mut s = status.lock().await;
s.error = Some(
"Could not find 'uv' (Python package manager). \
Install it from https://astral.sh/uv then relaunch."
.into(),
);
#[cfg(target_os = "windows")]
let msg = "Could not find 'uv' (Python package manager). \
To install on Windows, open PowerShell and run:\n\n\
powershell -ExecutionPolicy Bypass -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n\n\
Then close and relaunch this app. \
(If the install completes but the app still can't find uv, \
you may need to log out and back in so PATH refreshes.)";
#[cfg(target_os = "macos")]
let msg = "Could not find 'uv' (Python package manager). \
To install on macOS, open Terminal and run:\n\n\
curl -LsSf https://astral.sh/uv/install.sh | sh\n\n\
Then relaunch this app.";
#[cfg(target_os = "linux")]
let msg = "Could not find 'uv' (Python package manager). \
To install on Linux, open a terminal and run:\n\n\
curl -LsSf https://astral.sh/uv/install.sh | sh\n\n\
Then relaunch this app.";
#[cfg(not(any(target_os = "windows", target_os = "macos", target_os = "linux")))]
let msg = "Could not find 'uv' (Python package manager). \
Install it from https://astral.sh/uv then relaunch.";
s.error = Some(msg.into());
return;
}
+34
View File
@@ -29,6 +29,40 @@ for arg in "$@"; do
esac
done
# ---- non-WSL Windows refusal ----
# Running the installer in Git Bash / MSYS2 / Cygwin on native Windows
# (i.e. NOT inside WSL2) gets the user into a confusing failure state:
# uv/git tooling installs to Windows paths the rest of OpenJarvis can't
# reach, and Ollama integration silently breaks. The supported Windows
# path is WSL2. Bail early with a clear next step rather than letting
# users discover this 3 minutes into a doomed install.
case "$(uname -s 2>/dev/null)" in
MINGW*|MSYS*|CYGWIN*)
cat >&2 <<'EOF'
install.sh: native Windows (Git Bash / MSYS2 / Cygwin) is not supported.
OpenJarvis runs on Windows via WSL2. Two paths:
1. WSL2 (recommended for the CLI). One-time setup in an admin PowerShell:
wsl --install -d Ubuntu-24.04
Open the Ubuntu shell that gets installed, then re-run:
curl -fsSL https://openjarvis.ai/install.sh | bash
(or the github mirror — see README if openjarvis.ai is down.)
2. Desktop app — download the .exe from the Releases page:
https://github.com/open-jarvis/OpenJarvis/releases
See the WSL2 install guide for the full walkthrough:
https://open-jarvis.github.io/OpenJarvis/getting-started/wsl2/
EOF
exit 1
;;
esac
# ---- root refusal ----
if [[ "$(id -u)" -eq 0 ]]; then
cat >&2 <<'EOF'