wails
Wails is a Go framework for building cross-platform desktop applications that combine a Go backend with a web-based frontend rendered in the operating system's native webview. It lets developers expose Go methods to JavaScript and package the result as a lightweight native binary without bundling a full browser like Electron.
MITPermissive — free to use in commercial and proprietary software, with attribution.View license →
Production readiness
4/5- Actively maintainedCommits in the last 6 months
- No known vulnerabilitiesNot yet scanned
- Clear, usable licenseMIT (permissive)
- Proven adoptionWidely used
- Has documentationDocumentation indexed
go get wailsOur analysis
Wails is a framework for creating desktop applications using Go for application logic and standard web technologies (HTML/CSS/JS, or frameworks like React/Vue/Svelte) for the UI. It uses the platform's native webview rather than shipping a full Chromium runtime, producing small native binaries.
When to use wails
Choose Wails when you want to build desktop apps with a Go backend and a web-based frontend, value small binary sizes and low memory compared to Electron, and want a clean two-way bridge that auto-generates JS bindings from Go methods. It's a good fit for Go-centric teams who still want modern web UI tooling.
When not to
Avoid it if your team is primarily JS/TS-based (Electron or Tauri/Rust may fit better), if you need a pure-Go native widget toolkit without web tech (Fyne or Gio), or if you require fully consistent cross-platform rendering since native webviews differ across OSes. Mobile targets are not its focus.
Strengths
- Much smaller binaries and lower memory footprint than Electron by reusing the OS webview
- Idiomatic Go backend with automatic, type-aware bindings exposed to the frontend
- Works with any standard frontend toolchain (Vite, React, Svelte, Vue, etc.)
- Single-binary distribution simplifies deployment
- Active community and broad popularity in the Go ecosystem
Trade-offs
- Relying on native webviews means rendering and feature inconsistencies across Windows/macOS/Linux (WebView2 vs WebKitGTK vs WKWebView)
- Linux support depends on WebKitGTK versions that can be fragile
- Smaller plugin/ecosystem breadth than Electron
- v3 is still in active development, so APIs and docs (per this readme, ~20% migrated) are evolving
- Requires comfort with both Go and web frontend tooling
Maturity
Wails is a well-established, widely-starred project (35k+ stars) with v2 considered production-ready. The documentation here describes v3, which is still under active development with docs noted as incomplete. Teams should weigh v2 stability against v3's newer features when adopting.
Wails v3 Documentation
Prerequisites
D2 Diagram Library. You can download the binary manually from Github releases or use the following
# Use install script:
curl -fsSL https://d2lang.com/install.sh | sh -s --
# Install from source with Go
go install oss.terrastruct.com/d2@latest
World-class documentation for Wails v3, redesigned following Netflix documentation principles.
📚 Documentation Redesign (2025-10-01)
This documentation has been completely redesigned to follow the Netflix approach to developer documentation:
Problem-first framing - Start with why, not what
Progressive disclosure - Multiple entry points for different skill levels
Real production examples - No toy code
Story-Code-Context pattern - Why → How → When
Scannable content - Clear structure, visual aids
Status: Foundation complete (~20%), ready for content migration
See IMPLEMENTATION_SUMMARY.md for full details.
🚀 Project Structure
Inside of your Astro + Starlight project, you'll see the following folders and files:
.
├── public/
├── src/
│ ├── assets/
│ ├── content/
│ │ ├── docs/
│ │ └── config.ts
│ └── env.d.ts
├── astro.config.mjs
├── package.json
└── tsconfig.json
Starlight looks for .md or .mdx files in the src/content/docs/ directory.
Each file is exposed as a route based on its file name.
Images can be added to src/assets/ and embedded in Markdown with a relative
link.
Static assets, like favicons, can be placed in the public/ directory.
🧞 Commands
All commands are run from the root of the project, from a terminal:
CommandActionnpm installInstalls dependenciesnpm run devStarts local dev server at localhost:4321npm run buildBuild your production site to ./dist/npm run previewPreview your build locally, before deployingnpm run astro ...Run CLI commands like astro add, astro checknpm run astro -- --helpGet help using the Astro CLI
👀 Want to learn more?
Check out Starlight’s docs, read the Astro documentation, or jump into the Astro Discord server.