goose/ui/desktop
Jack Amadeo c6755d3259
Some checks failed
Canary / Prepare Version (push) Waiting to run
Canary / build-cli (push) Blocked by required conditions
Canary / Upload Install Script (push) Blocked by required conditions
Canary / bundle-desktop (push) Blocked by required conditions
Canary / bundle-desktop-intel (push) Blocked by required conditions
Canary / bundle-desktop-linux (push) Blocked by required conditions
Canary / bundle-desktop-windows (push) Blocked by required conditions
Canary / Release (push) Blocked by required conditions
CI / Build Rust Project on Windows (push) Waiting to run
CI / changes (push) Waiting to run
CI / Check Rust Code Format (push) Blocked by required conditions
CI / Build and Test Rust Project (push) Blocked by required conditions
CI / Check MSRV (push) Blocked by required conditions
CI / Lint Rust Code (push) Blocked by required conditions
CI / Check Generated Schemas are Up-to-Date (push) Blocked by required conditions
CI / Test and Lint Electron Desktop App (push) Blocked by required conditions
Goose 2 CI / Lint & Format (push) Waiting to run
Goose 2 CI / Unit Tests (push) Waiting to run
Goose 2 CI / Desktop Build & E2E (push) Waiting to run
Goose 2 CI / Rust Lint (push) Waiting to run
Live Provider Tests / Smoke Tests (Code Execution) (push) Blocked by required conditions
Live Provider Tests / check-fork (push) Waiting to run
Live Provider Tests / changes (push) Blocked by required conditions
Live Provider Tests / Build Binary (push) Blocked by required conditions
Live Provider Tests / Smoke Tests (push) Blocked by required conditions
Live Provider Tests / Compaction Tests (push) Blocked by required conditions
Live Provider Tests / goose server HTTP integration tests (push) Blocked by required conditions
Publish Docker Image / docker (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
Unused Dependencies / machete (push) Has been cancelled
Port provider tests to typescript (#8237)
Signed-off-by: Douwe Osinga <douwe@squareup.com>
Co-authored-by: Douwe Osinga <douwe@squareup.com>
2026-04-24 17:31:27 +00:00
..
announcements Added announcement modal (#3098) 2025-06-27 10:50:32 -07:00
public Inline worklet source (#7128) 2026-02-10 22:32:20 +00:00
scripts fix: i18n compile on windows (#8202) 2026-03-30 12:07:29 +00:00
src Add NVIDIA provider, and improve declarative provider UX (#8798) 2026-04-24 13:48:30 +00:00
tests Port provider tests to typescript (#8237) 2026-04-24 17:31:27 +00:00
.env feat: Handle MCP server notification messages (#2613) 2025-05-30 11:50:14 -04:00
.eslintrc.json feat: add voice dictation using OpenAI Whisper & ElevenLabs (#3079) 2025-06-27 16:36:35 +10:00
.gitignore feat(desktop): add i18n infrastructure with react-intl (#8105) 2026-03-27 18:39:50 +00:00
.goosehints UI update with sidebar and settings tabs (#3288) 2025-07-15 17:24:41 -07:00
.prettierignore feat: hook extensions up in settings-v2 (#1447) 2025-02-28 21:27:55 -05:00
.prettierrc.json feat: V1.0 (#734) 2025-01-24 13:04:43 -08:00
components.json feat: V1.0 (#734) 2025-01-24 13:04:43 -08:00
entitlements.plist fix: Goose Desktop missing Calendar and Reminders entitlements (#7100) 2026-02-10 01:48:03 +00:00
eslint.config.js Add preferred microphone selection (#7805) 2026-03-11 17:03:00 +00:00
forge.config.ts chore(aaif): rename a bunch of repository references (#8152) 2026-04-07 15:34:48 +10:00
forge.deb.desktop refactor(forge): employ desktopTemplate to support absolute paths (#4084) 2025-09-22 13:31:22 -04:00
forge.env.d.ts feat: V1.0 (#734) 2025-01-24 13:04:43 -08:00
forge.rpm.desktop refactor(forge): employ desktopTemplate to support absolute paths (#4084) 2025-09-22 13:31:22 -04:00
image.d.ts ui: providers new design (#1446) 2025-02-28 21:04:50 -05:00
index.html fix(apps): declare color-scheme to allow transparent MCP App iframes (#7479) 2026-02-24 18:50:38 +00:00
openapi-ts.config.ts chore: upgrade most npm packages to latest (#5185) 2025-10-17 12:54:27 -07:00
openapi.json Add NVIDIA provider, and improve declarative provider UX (#8798) 2026-04-24 13:48:30 +00:00
package.json Port provider tests to typescript (#8237) 2026-04-24 17:31:27 +00:00
playwright.config.ts Speed up Databricks provider init by removing fetch of supported models (#6616) 2026-01-26 16:51:49 +01:00
README.md chore(aaif): rename a bunch of repository references (#8152) 2026-04-07 15:34:48 +10:00
tsconfig.json tui: set up for publishing via github actions (#8020) 2026-03-23 17:21:20 +00:00
tsconfig.node.json upgraded all npm packages and fixed related issues (#4072) 2025-08-18 15:12:44 -07:00
vite.config.mts Add screenshot paste support (#2679) 2025-05-28 11:11:22 -07:00
vite.main.config.mts fix(desktop): make bundle and updater asset naming configurable (#7337) 2026-02-26 19:36:44 +00:00
vite.preload.config.mts UI update with sidebar and settings tabs (#3288) 2025-07-15 17:24:41 -07:00
vite.renderer.config.mts failed the script when bundle:default fails and cleanup "alpha" (#8580) 2026-04-16 05:51:23 +00:00
vitest.config.ts Port provider tests to typescript (#8237) 2026-04-24 17:31:27 +00:00
vitest.integration.config.ts Add a goosed over HTTP integration test, and test the developer tool PATH (#7178) 2026-02-13 19:41:18 +00:00

goose Desktop App

Native desktop app for goose built with Electron and ReactJS.

Building and running

goose uses Hermit to manage dependencies, so you will need to have it installed and activated.

git clone git@github.com:aaif-goose/goose.git
cd goose
source ./bin/activate-hermit
cd ui/desktop
pnpm install
pnpm run start

Platform-specific build requirements

Linux

For building on Linux distributions, you'll need additional system dependencies:

Debian/Ubuntu:

sudo apt install dpkg fakeroot

Arch/Manjaro:

sudo pacman -S dpkg fakeroot

Fedora/RHEL:

sudo dnf install dpkg-dev fakeroot

Building notes

This is an electron forge app, using vite and react.js. goosed runs as multi process binaries on each window/tab similar to chrome.

Building for different platforms

macOS

pnpm run bundle:default will give you a goose.app/zip which is signed/notarized but only if you set up the env vars as per forge.config.ts (you can empty out the section on osxSign if you don't want to sign it) - this will have all defaults.

pnpm run bundle:preconfigured will make a goose.app/zip signed and notarized, but use the following:

            f"        process.env.GOOSE_PROVIDER__TYPE = '{os.getenv("GOOSE_BUNDLE_TYPE")}';",
            f"        process.env.GOOSE_PROVIDER__HOST = '{os.getenv("GOOSE_BUNDLE_HOST")}';",
            f"        process.env.GOOSE_PROVIDER__MODEL = '{os.getenv("GOOSE_BUNDLE_MODEL")}';"

This allows you to set for example GOOSE_PROVIDER__TYPE to be "databricks" by default if you want (so when people start goose.app - they will get that out of the box). There is no way to set an api key in that bundling as that would be a terrible idea, so only use providers that can do oauth (like databricks can), otherwise stick to default goose.

Linux

For Linux builds, first ensure you have the required system dependencies installed (see above), then:

  1. Build the Rust backend:
cd ../..  # Go to project root
cargo build --release -p goose-server
  1. Copy the server binary to the expected location:
mkdir -p src/bin
cp ../../target/release/goosed src/bin/
  1. Build the application:
# For ZIP distribution (works on all Linux distributions)
pnpm run make --targets=@electron-forge/maker-zip

# For DEB package (Debian/Ubuntu)
pnpm run make --targets=@electron-forge/maker-deb

# For Flatpak (requires flatpak and flatpak-builder)
pnpm run make --targets=@electron-forge/maker-flatpak

The built application will be available in:

  • ZIP: out/make/zip/linux/x64/goose-linux-x64-{version}.zip
  • DEB: out/make/deb/x64/goose_{version}_amd64.deb
  • Flatpak: out/make/flatpak/x86_64/*.flatpak
  • Executable: out/goose-linux-x64/goose

Windows

Use the existing Windows build process as documented.

Running with goosed server from source

Set VITE_START_EMBEDDED_SERVER=yes to no in .env. Run cargo run -p goose-server from parent dir. pnpm run start will then run against this. You can try server directly with ./test.sh