Files
editor/desktop
Nitish Reddy M 29cf3f1a97 fix(desktop): open default browser on startup (#2095)
Fixes #934

## Summary

The Go desktop binary started its local server and printed the URL,
but never opened a browser automatically.

This PR:

- opens the default browser after the listener successfully binds
- uses the actual runtime URL
- uses a stdlib-only cross-platform launcher
- keeps browser-open failures non-fatal
- adds `--no-browser` for headless/Docker use
- leaves the normal Vite/web development flow unchanged

The listener is created before launching the browser so the browser
cannot race the server startup path.

## Platform behavior

- Windows: `rundll32 url.dll,FileProtocolHandler`
- macOS: `open`
- Linux: `xdg-open`

No shell command strings are used; arguments are passed directly through
`exec.Command`.

## Testing

- `go test ./...`
- `go vet ./...`
- `go build ./...`
- `git diff --check`
- repeated manual Windows startup verification (3 clean runs, confirmed
the
  browser opened and hit the server, no duplicate launches)
- `--no-browser` verification (confirmed no launch attempt occurs)
- non-fatal launcher failure covered by a unit test that injects a
  nonexistent opener binary

macOS/Linux launch paths were not runtime-tested on this Windows machine
—
they follow the standard `open`/`xdg-open` convention used across other
Go
CLIs but are unverified here. The full packaged release flow (`gox`,
`go.rice`, `go-winres`) was not exercised locally.
2026-08-24 07:28:40 +03:00
..
2024-02-12 11:06:45 -06:00
2024-02-12 11:06:45 -06:00
2024-02-12 11:06:45 -06:00
2024-02-12 11:06:45 -06:00

Maputnik Desktop [GitHub CI status][github-action-ci]


A Golang based cross platform executable for integrating Maputnik locally. This binary packages up the JavaScript and CSS bundle produced by maputnik and embeds it in the program for easy distribution. It also allows exposing a local style file and work on it both in Maputnik and with your favorite editor.

Report issues on maplibre/maputnik.

Install

You can download a zip file containing desktop binaries for Linux, OSX and Windows from the latest releases of maplibre/maputnik.

Usage

Simply start up a web server and access the Maputnik editor GUI at localhost:8000.

maputnik

Expose a local style file to Maputnik allowing the web based editor to save to the local filesystem.

maputnik --file basic-v9.json

Watch the local style for changes and inform the editor via web socket. This makes it possible to edit the style with a local text editor and still use Maputnik.

maputnik --watch --file basic-v9.json

Choose a local port to listen on, instead of using the default port 8000.

maputnik --port 8001

Specify a path to a directory which, if it exists, will be served under http://localhost:8000/static/ . Could be used to serve sprites and glyphs.

maputnik --static ./localFolder

API

maputnik exposes the configured styles via a HTTP API.

Method Description
GET /styles List the ID of all configured style files
GET /styles/{filename} Get contents of a single style file
PUT /styles/{filename} Update contents of a style file
WEBSOCKET /ws Listen to change events for the configured style files

Build

From the root of the maplibre/maputnik project, install the deps and run the desktop-build command.

npm install
npm run build-desktop

You should now find the maputnik binary in your desktop/bin directory.