Development Setup
This guide is for contributors who want to build, run, and debug Wox locally.
What you are setting up
The repository contains four parts that usually move together during development:
wox.core/: Go backend, built-in plugins, settings, storage, packaging entrypointwox.core/ui/: native Go UI compiled in the same Go module and processwox.plugin.host.nodejs/: Node.js plugin hostwox.plugin.host.python/: Python plugin host
The top-level Makefile wires these pieces together. In most cases you should start from the repository root instead of running each subproject manually.
Prerequisites
Install these tools first:
Recommended editor:
- Visual Studio Code with the checked-in workspace settings
Platform-specific requirements
macOS
- Install create-dmg if you plan to build the packaged
.dmg
Windows
- Run build commands from a
MINGW64shell - Install MinGW-w64 so native Windows runner code can compile
Linux
- Install
patchelf - Install
appimagetool, or pointAPPIMAGE_TOOLat a local binary when building AppImage packages
Bootstrap the workspace
From the repository root:
make devWhat this does:
- checks required toolchain dependencies
- prepares embedded resource folders used by
go:embed - builds
woxmrunderwox.core - builds both plugin hosts
make dev prepares the shared runtime pieces. Use make build when you need a runnable package with the embedded Go UI.
Common commands
From the repository root:
make dev
make test
make test-go-ui-unit
make test-go-ui-smoke
make buildWhat they mean:
make dev: prepare the local development environmentmake test: run the Go integration-style test suite underwox.core/testmake test-go-ui-unit: run retained-widget and automation contract tests without opening a windowmake test-go-ui-smoke: build the test-only automation binary and run a real native launcher smokemake build: compile the Go UI intowox.core, then build plugin hosts and platform packaging output
If you are changing backend/plugin contracts, make build is the safest final verification because it catches cross-project drift.
Working on specific areas
Go backend (wox.core)
Typical tasks:
- plugin runtime and metadata changes
- built-in plugin behavior
- settings, persistence, routing, packaging
Useful command:
make -C wox.core buildGo UI (wox.core/ui)
Typical tasks:
- launcher UI
- settings UI
- screenshot flow
- webview and preview rendering
Useful command:
make test-go-ui-unit
make test-go-ui-smokePlugin hosts
Useful commands:
make -C wox.plugin.host.nodejs build
make -C wox.plugin.host.python buildUse these when you are only changing host/runtime behavior and want a faster loop than make build.
Running the documentation site
The docs live in www/docs. To preview them locally:
cd www
pnpm install
pnpm docs:devTo generate a production build:
cd www
pnpm docs:buildWhere Wox stores local data
Wox keeps runtime data under the user's home directory:
- macOS / Linux:
~/.wox - Windows:
C:\Users\<username>\.wox
Useful subdirectories:
~/.wox/log/wox.log: core log~/.wox/log/ui.log: UI log~/.wox/plugins/: local plugin development directory
Troubleshooting
If make dev fails early:
- confirm
go,node,pnpm, anduvare all onPATH - on Windows, confirm
nugetis also onPATH - on Windows, confirm you are in a
MINGW64shell instead of PowerShell or CMD - on Linux packaging builds, confirm
patchelfandappimagetoolare installed
If a change compiles in one subproject but Wox still breaks end to end, run make build from the repository root. That is the fastest way to catch contract mismatches between wox.core, the Go UI, and the plugin hosts.