goose/ui/desktop
2025-10-24 15:18:02 -07:00
..
announcements Added announcement modal (#3098) 2025-06-27 10:50:32 -07:00
scripts remove and cleanup unused code (#4074) 2025-08-14 16:27:53 -07:00
src Fix scheduler jobs dates formatting (#5368) 2025-10-24 15:18:02 -07:00
tests/e2e Goose Simple Compact UX (#4202) 2025-08-26 18:12:02 -04: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 fix: goose recipe prompt is not shown again when switch the view from settings to chat (#2870) 2025-06-17 16:30:59 -07:00
.goosehints UI update with sidebar and settings tabs (#3288) 2025-07-15 17:24:41 -07:00
.npmrc feat: V1.0 (#734) 2025-01-24 13:04:43 -08: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 unable to get access to microphone in Mac app (#4571) 2025-09-09 08:25:50 -07:00
eslint.config.js upgraded all npm packages and fixed related issues (#4072) 2025-08-18 15:12:44 -07:00
forge.config.ts fix: revert built app name to uppercase Goose (#5206) 2025-10-16 16:11:30 -04: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 integrate MCP UI (#2948) 2025-08-01 08:09:06 -04:00
openapi-ts.config.ts chore: upgrade most npm packages to latest (#5185) 2025-10-17 12:54:27 -07:00
openapi.json (re)Standardize Session Name Attribute (#5279) 2025-10-24 13:34:08 -04:00
package-lock.json fix: remove dependency on gsap library (#5330) 2025-10-22 22:15:13 -04:00
package.json fix: remove dependency on gsap library (#5330) 2025-10-22 22:15:13 -04:00
playwright.config.ts Added Playwright E2E testing setup (#1893) 2025-03-28 08:20:14 -07:00
README.md lowercase g in goose (#4832) 2025-09-26 23:44:38 -05:00
tsconfig.json upgraded all npm packages and fixed related issues (#4072) 2025-08-18 15:12:44 -07: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 UI update with sidebar and settings tabs (#3288) 2025-07-15 17:24:41 -07: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 feat: upgrade @mcp-ui/client package and improve UI message handling (#4164) 2025-08-21 16:21:32 -04:00
vitest.config.ts Fix html content detection regex to not include markdown autolinks (#3720) 2025-07-30 09:40:12 -07: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:block/goose.git
cd goose
source ./bin/activate-hermit
cd ui/desktop
npm install
npm 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

npm run bundle:default will give you a goose.app/zip which is signed/notarized but only if you setup 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.

npm 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)
npm run make -- --targets=@electron-forge/maker-zip

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

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
  • 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. npm run start will then run against this. You can try server directly with ./test.sh