wailsapp/wails
 Watch   
 Star   
 Fork   
8 days ago
wails

Wails v3.2.0-nightly.20261103

Wails v3 Nightly - v3.2.0-nightly.20261103

Nightly preview of the upcoming v3.2.0.

Changed

  • [v3] refresh systray menus on Menu.Update in PR by @johnmaguire
  • [v3/Windows] Implement SetIcon for windows in PR by @hypherionmc

🤖 This is an automated nightly pre-release generated from the latest changes on master. It is not selected by @latest; install it by its exact tag.

Installation:

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.2.0-nightly.20261103

Tip: always pin an exact version (e.g. @v3.2.0-nightly.20261103) in go.mod and CI rather than @latest.

9 days ago
wails

Wails v3.2.0-nightly.20261102

Wails v3 Nightly - v3.2.0-nightly.20261102

Nightly preview of the upcoming v3.2.0.

Changed

  • DisableOverscroll instead of DisableBounce in PR by @lethusang

🤖 This is an automated nightly pre-release generated from the latest changes on master. It is not selected by @latest; install it by its exact tag.

Installation:

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.2.0-nightly.20261102

Tip: always pin an exact version (e.g. @v3.2.0-nightly.20261102) in go.mod and CI rather than @latest.

10 days ago
wails

Wails v3.2.0-nightly.20261101

Wails v3 Nightly - v3.2.0-nightly.20261101

Nightly preview of the upcoming v3.2.0.

Added

  • add experimental CGO-free macOS and Linux backends in PR by @taliesin-ai
  • native YAML builds, portable packaging and signing in PR by @taliesin-ai

Fixed

  • Fix assorted v3 nightly build issues and clean up dependencies in PR by @taliesin-ai
  • repair v3 release validation and fixture classification in PR by @taliesin-ai
  • resolve cross-platform release validation failures in PR by @taliesin-ai

🤖 This is an automated nightly pre-release generated from the latest changes on master. It is not selected by @latest; install it by its exact tag.

Installation:

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.2.0-nightly.20261101

Tip: always pin an exact version (e.g. @v3.2.0-nightly.20261101) in go.mod and CI rather than @latest.

10 days ago
wails

Wails v3.1.0

Wails v3 Weekly Release - v3.1.0

Added

  • add experimental CGO-free macOS and Linux backends in PR by @taliesin-ai
  • native YAML builds, portable packaging and signing in PR by @taliesin-ai

Changed

  • avoid copying discarded desktop metadata in PR by @taliesin-ai
  • format content lengths without fmt in PR by @taliesin-ai
  • select index roots without collecting candidates in PR by @taliesin-ai
  • reuse non-seekable file copy buffers in PR by @taliesin-ai
  • avoid allocating a reader for sniffing prefixes in PR by @taliesin-ai
  • skip MIME sniff reads for known extensions in PR by @taliesin-ai
  • prevent queue growth and shrink oscillation in PR by @taliesin-ai
  • avoid allocating discarded request contexts in PR by @taliesin-ai
  • skip disabled debug log preparation in PR by @taliesin-ai
  • allocate MIME sniff buffers lazily in PR by @taliesin-ai
  • reduce hyperlink formatting allocations in PR by @taliesin-ai
  • remove temporary bullet formatting allocations in PR by @taliesin-ai
  • reduce UUID string conversion to one allocation in PR by @taliesin-ai
  • reduce statement-handle formatting allocations in PR by @taliesin-ai
  • eliminate temporary name-based UUID digest allocation in PR by @taliesin-ai
  • avoid copying unfinished command-output lines in PR by @taliesin-ai
  • stream executable copies during package staging in PR by @taliesin-ai
  • avoid rescanning unfinished output lines in PR by @taliesin-ai
  • reuse compiled command routing patterns in PR by @taliesin-ai
  • avoid metadata lookups during runtime discovery in PR by @taliesin-ai
  • reduce localized fallback page allocations in PR by @taliesin-ai
  • avoid recompiling patterns for each processor in PR by @taliesin-ai

Fixed

  • implement SetTooltip for the system tray in PR by @fan711
  • read dark mode from the settings portal in PR by @TechHutTV
  • let Window.SetZoom go below 1.0 in PR by @APshenkin
  • deliver to each Go listener in emit order in PR by @DevLumuz
  • read event hooks under hookLock in Emit in PR by @DevLumuz
  • always advertise the tray Menu property so a tray created after Run is not dropped in PR by @AlbinoGeek
  • hold main-thread work sent before Run until Run starts in PR by @AlbinoGeek
  • use correct asset url in github updater provider in PR by @gavidroselj
  • keep request body when WebView2 omits Content-Length in PR by @strraaa
  • report macOS and GTK screens in DIP space (mixed-DPI bounds) in PR by @julianstorer
  • don't report a dismissed notification as a click in PR by @bercedev
  • stop dev processes when the terminal closes in PR by @xmasdev
  • map changelog runs to squash-merge commits in the evidence check in PR by @taliesin-ai
  • hold the taskbar-restart debounce for a second in PR by @taliesin-ai
  • keep size constraints through a fullscreen that starts there in PR by @taliesin-ai
  • do not resize a fullscreen or maximised window to fit a new constraint in PR by @taliesin-ai
  • do not raise a dialog before Run in the liquid-glass example in PR by @taliesin-ai
  • a dialog asked for before Run does nothing instead of waiting forever in PR by @taliesin-ai
  • fall back when desktop entry has no command in PR by @taliesin-ai
  • sniff current content without retaining filenames in PR by @taliesin-ai
  • recognize mixed-case asset extensions in PR by @taliesin-ai
  • release consumed content-sniffer buffers in PR by @taliesin-ai
  • release removed ringqueue references in PR by @taliesin-ai
  • honor header deletions before fallback selection in PR by @taliesin-ai
  • commit fallback response headers before flush in PR by @taliesin-ai
  • discover only exact index files in PR by @taliesin-ai
  • avoid bodies and full reads for non-seekable HEAD in PR by @taliesin-ai
  • fill MIME sniffing prefix across short reads in PR by @taliesin-ai
  • commit successful empty non-seekable responses in PR by @taliesin-ai
  • avoid duplicating expanded URI targets in PR by @taliesin-ai
  • preserve paths during field expansion in PR by @taliesin-ai
  • respect XDG desktop-file search directories in PR by @taliesin-ai
  • commit sniffer headers on empty flush in PR by @taliesin-ai
  • skip directories shadowing desktop entries in PR by @taliesin-ai
  • preserve targets found inside executable paths in PR by @taliesin-ai
  • release callback captures after timer fires in PR by @taliesin-ai
  • avoid false ldconfig library matches in PR by @taliesin-ai
  • constrain filesystem library fallback matches in PR by @taliesin-ai
  • remove cache invalidation data race in PR by @taliesin-ai
  • honor the optional logger configuration in PR by @taliesin-ai
  • avoid shared start URL mutation and stale ports in PR by @taliesin-ai
  • stop dev proxy retries on request cancellation in PR by @taliesin-ai
  • return 404 for missing bundled assets in PR by @taliesin-ai
  • handle bundled runtime HEAD requests in PR by @taliesin-ai
  • preserve escaped paths when routing services in PR by @taliesin-ai
  • order oversized numeric prerelease identifiers correctly in PR by @taliesin-ai
  • reject HTTP errors before saving tooling downloads in PR by @taliesin-ai
  • honor the launch deadline during desktop discovery in PR by @taliesin-ai
  • preserve request bodies across development proxy retries in PR by @taliesin-ai
  • close HTTP response bodies on every return path in PR by @taliesin-ai
  • preserve cancellation errors in parallel library searches in PR by @taliesin-ai
  • reject failed GitHub tag responses before decoding in PR by @taliesin-ai
  • preserve literal bracketed template paths in PR by @taliesin-ai
  • install wails3 once and preserve installer errors in PR by @taliesin-ai
  • ignore hidden entries and headers in comment blocks in PR by @taliesin-ai
  • surface stable release lookup errors in PR by @taliesin-ai
  • print plain messages without format interpretation in PR by @taliesin-ai
  • avoid write panics after loading JSON null in PR by @taliesin-ai
  • return snapshots for whole-store reads in PR by @taliesin-ai
  • propagate errors after partial row iteration in PR by @taliesin-ai
  • keep extraction destination paths literal in PR by @taliesin-ai
  • release prepared-statement handles on close and reopen in PR by @taliesin-ai
  • handle preparation racing with close or reopen in PR by @taliesin-ai
  • honor HEAD requests for the fallback index page in PR by @taliesin-ai
  • require complete hexadecimal statement handles in PR by @taliesin-ai
  • preserve the default in-memory database under concurrency in PR by @taliesin-ai
  • separate stderr from parsed HEAD output in PR by @taliesin-ai
  • generate runtime assets from embedded bundles in PR by @taliesin-ai
  • detect TODO, FIXME and TBD placeholders in PR by @taliesin-ai
  • validate release notes API responses in PR by @taliesin-ai
  • respect task directories in status checks in PR by @taliesin-ai
  • prevent same-file copy data loss in PR by @taliesin-ai
  • include the task directory in cache identity in PR by @taliesin-ai
  • probe ports once per check in PR by @taliesin-ai
  • avoid a panic when cache entries decode as null in PR by @taliesin-ai
  • increment numeric prereleases without integer limits in PR by @taliesin-ai
  • prevent legacy checks from hiding cache misses in PR by @taliesin-ai
  • run default tasks in the executor base directory in PR by @taliesin-ai
  • preserve literal percent signs in explorer commands in PR by @taliesin-ai
  • align precondition and task command directories in PR by @taliesin-ai
  • replace symlinks with generated regular files in PR by @taliesin-ai
  • preserve existing DMGs when builds fail in PR by @taliesin-ai
  • preserve quoted regex and path backslashes in PR by @taliesin-ai
  • validate generated icon sizes before image allocation in PR by @taliesin-ai
  • route command chains and redirections through the shell in PR by @taliesin-ai
  • preserve previous Linux packages on build failure in PR by @taliesin-ai
  • use platform-specific shell fallback execution in PR by @taliesin-ai
  • serve assets with repeated leading path slashes in PR by @taliesin-ai
  • recognize stable versions with build metadata in PR by @taliesin-ai
  • report resource-generation failures accurately in PR by @taliesin-ai
  • prevent races when replacing the active reporter in PR by @taliesin-ai
  • serialize concurrent cache-file saves in PR by @taliesin-ai
  • support multiple template equality candidates in PR by @taliesin-ai
  • normalize null saved category maps in PR by @taliesin-ai
  • show diagnostics from failed variable shell commands in PR by @taliesin-ai
  • keep shell chains out of the implicit Go cache in PR by @taliesin-ai
  • serialize Linux category persistence in PR by @taliesin-ai
  • cache Go outputs with quoted or escaped spaces in PR by @taliesin-ai
  • preserve Mac icons when encoding fails in PR by @taliesin-ai
  • stop discarding invalid Go test count flags in PR by @taliesin-ai
  • retain source permissions for new file copies in PR by @taliesin-ai
  • Fix assorted v3 nightly build issues and clean up dependencies in PR by @taliesin-ai
  • repair v3 release validation and fixture classification in PR by @taliesin-ai
  • resolve cross-platform release validation failures in PR by @taliesin-ai

🗓️ This is a weekly release. Minor version numbers advance with time, not with features: a new minor is not a feature milestone. Nightly previews are published between weekly releases as -nightly pre-releases.

Installation:

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.1.0

Tip: always pin an exact version (e.g. @v3.1.0) in go.mod and CI rather than @latest.

10 days ago
wails

Wails v2.17.1

Installation

go install github.com/wailsapp/wails/v2/cmd/wails@v2.17.1

Changes

Security

  • Linux: child frames (iframes) embedded in the application window can no longer post to the privileged window.webkit.messageHandlers.external IPC bridge. WebKitGTK does not tell the native message handler which frame sent a message, so the bridge could be reached from cross-origin or sandboxed frames and the OriginValidator check ran against the top-level page rather than the calling frame. A guard script is now injected into every frame at document start and neutralises the bridge in non-top frames. Same-origin child frames still share their parent's origin and retain access to its bridge, so applications that embed untrusted same-origin content should not rely on this boundary. Affects Linux builds of v2.17.0 and earlier. Tracked as GHSA-r5j2-ghh9-2jqw

Other changes

  • test(v2/linux): verify native frame loading and document origin boundary (0d660b45a)
  • fix(v2/linux): prevent child frames entering privileged IPC (99fd52407)
  • chore(v2): update labstack/echo to 4.16.1 and goldmark to 1.7.17 (#6343) (1bb8882b3)
14 days ago
wails

Wails v3.1.0-nightly.20261028

Wails v3 Nightly - v3.1.0-nightly.20261028

Nightly preview of the upcoming v3.1.0.

Changed

  • Improve changelog generation speed by reusing compiled regex patterns in PR by @taliesin-ai
  • Reduce allocations when serving localized fallback pages in PR by @taliesin-ai
  • Speed up AppImage runtime discovery by avoiding unnecessary metadata lookups in PR by @taliesin-ai
  • Reuse compiled command routing patterns to improve wake performance in PR by @taliesin-ai
  • Improve performance by avoiding rescanning of unfinished output lines in PR by @taliesin-ai
  • Stream executable copies during MSIX package staging to reduce memory use and speed up builds in PR by @taliesin-ai
  • Avoid copying unfinished command-output lines to improve performance in PR by @taliesin-ai
  • Reduce allocations when generating name-based UUIDs in PR by @taliesin-ai
  • Reduce allocations when formatting SQLite statement handles in PR by @taliesin-ai
  • Reduce UUID string conversion to a single allocation in PR by @taliesin-ai
  • Reduce allocations when formatting changelog bullet entries in PR by @taliesin-ai
  • Reduce allocations when formatting terminal hyperlinks in PR by @taliesin-ai
  • Reduce allocations when serving assets by sniffing MIME buffers lazily in PR by @taliesin-ai
  • Skip debug log preparation in the asset server when debug logging is disabled in PR by @taliesin-ai
  • Reduce allocations in webview request handling by avoiding discarded request contexts in PR by @taliesin-ai
  • Speed up asset serving by skipping MIME sniffing for known file extensions in PR by @taliesin-ai
  • Reduce allocations when serving assets by avoiding a reader for content sniffing in PR by @taliesin-ai
  • Reduce allocations when serving non-seekable asset files in PR by @taliesin-ai
  • Speed up asset server index root selection by avoiding candidate collection in PR by @taliesin-ai
  • Improve asset server performance by formatting content lengths without fmt in PR by @taliesin-ai
  • Reduce memory copying when reading desktop file explorer metadata in PR by @taliesin-ai

Fixed

  • Retain source file permissions when copying to new destination files in PR by @taliesin-ai
  • Keep fullscreen and maximised windows from resizing when min or max size constraints change in PR by @taliesin-ai
  • Publish scheduled star history updates for the wailsapp/wails repository in PR by @taliesin-ai
  • Stop discarding invalid Go test count flags in wake in PR by @taliesin-ai
  • Preserve Mac icons when encoding fails in PR by @taliesin-ai
  • Fix build cache misses for Go outputs with quoted or escaped spaces in PR by @taliesin-ai
  • Serialize notification category persistence on Linux to prevent concurrent write races in PR by @taliesin-ai
  • Keep shell command chains out of the implicit Go build cache in PR by @taliesin-ai
  • Fix notification category maps failing to load when saved data is null in PR by @taliesin-ai
  • Show diagnostics from failed variable shell commands in PR by @taliesin-ai
  • Fix wake template matching when multiple equality candidates exist in PR by @taliesin-ai
  • Serialize concurrent cache-file saves to prevent corrupted cache writes in PR by @taliesin-ai
  • Prevent races when replacing the active reporter in PR by @taliesin-ai
  • Report resource-generation failures accurately in the CLI in PR by @taliesin-ai
  • Recognize stable versions that include build metadata in the CLI in PR by @taliesin-ai
  • Serve assets whose request paths contain repeated leading slashes in PR by @taliesin-ai
  • Fix shell fallback execution for wake on each platform in PR by @taliesin-ai
  • Preserve previous Linux packages when a build fails in PR by @taliesin-ai
  • Route command chains and redirections through the shell in PR by @taliesin-ai
  • Preserve quoted regex and path backslashes in wake command parsing in PR by @taliesin-ai
  • Preserve existing DMG files when packaging builds fail in PR by @taliesin-ai
  • Replace symlinks with generated regular files in bindings output in PR by @taliesin-ai
  • Preserve literal percent signs in Linux explorer commands in PR by @taliesin-ai
  • Align precondition and task command directories so they resolve consistently in PR by @taliesin-ai
  • Run default tasks in the executor base directory in PR by @taliesin-ai
  • Prevent legacy checks from hiding cache misses in PR by @taliesin-ai
  • Fix CLI prerelease numbering to increment without integer overflow limits in PR by @taliesin-ai
  • Avoid a panic when cache entries decode as null in PR by @taliesin-ai
  • Probe ports once per check in the CLI in PR by @taliesin-ai
  • Include the task directory in cache identity to avoid stale wake results in PR by @taliesin-ai
  • Prevent data loss when packaging copies a file onto itself in PR by @taliesin-ai
  • Make status checks respect task directories in PR by @taliesin-ai
  • Detect TODO, FIXME and TBD placeholders in changelog entries in PR by @taliesin-ai
  • Generate runtime assets from embedded bundles in the CLI in PR by @taliesin-ai
  • Separate stderr from parsed HEAD output in git commands in PR by @taliesin-ai
  • Preserve the default in-memory SQLite database under concurrent access in PR by @taliesin-ai
  • Return correct responses to HEAD requests for the fallback index page in PR by @taliesin-ai
  • Handle SQLite statement preparation racing with database close or reopen in PR by @taliesin-ai
  • Release prepared-statement handles when SQLite database is closed or reopened in PR by @taliesin-ai
  • Keep extraction destination paths literal when using gosod in PR by @taliesin-ai
  • Propagate errors from SQLite queries after partial row iteration in PR by @taliesin-ai
  • Return snapshots for whole-store reads in kvstore in PR by @taliesin-ai
  • Prevent write panics in kvstore after loading a JSON null value in PR by @taliesin-ai
  • Print plain terminal messages without interpreting format verbs in PR by @taliesin-ai
  • Surface errors when looking up the latest stable release in the updater in PR by @taliesin-ai
  • Ignore hidden entries and headers in changelog comment blocks in PR by @taliesin-ai
  • Install wails3 once and surface installer errors in the updater in PR by @taliesin-ai
  • Preserve literal bracketed template paths in gosod in PR by @taliesin-ai
  • Reject failed GitHub tag responses before decoding them in the updater in PR by @taliesin-ai
  • Preserve cancellation errors during parallel library searches in PR by @taliesin-ai
  • Close HTTP response bodies on every return path to prevent resource leaks in PR by @taliesin-ai
  • Preserve request bodies when the development proxy retries requests in PR by @taliesin-ai
  • Honor the launch deadline during desktop file explorer discovery in PR by @taliesin-ai
  • Reject HTTP errors before saving AppImage tooling downloads in PR by @taliesin-ai
  • Order oversized numeric prerelease identifiers correctly in semver comparisons in PR by @taliesin-ai
  • Preserve escaped paths when routing services in the asset server in PR by @taliesin-ai
  • Handle HEAD requests for the bundled runtime in the asset server in PR by @taliesin-ai
  • Return 404 for missing bundled assets instead of an incorrect response in PR by @taliesin-ai
  • Stop dev proxy retries when a request is cancelled in PR by @taliesin-ai
  • Avoid shared start URL mutation and stale ports in the asset server in PR by @taliesin-ai
  • Honor the optional logger configuration in the asset server in PR by @taliesin-ai
  • Remove data race in library path cache invalidation in PR by @taliesin-ai
  • Avoid false library matches when searching ldconfig output in PR by @taliesin-ai
  • Prevent asset server queue growth and shrink oscillation under load in PR by @taliesin-ai
  • Release callback captures after the debounce timer fires to avoid retaining stale references in PR by @taliesin-ai
  • Preserve file explorer targets found inside executable paths in PR by @taliesin-ai
  • Skip directories that shadow desktop entries in file explorer in PR by @taliesin-ai
  • Fix asset server headers not being sent when a response body is empty in PR by @taliesin-ai
  • Respect XDG desktop-file search directories when locating application icons in PR by @taliesin-ai
  • Preserve file paths during field expansion in the file explorer in PR by @taliesin-ai
  • Avoid duplicating expanded URI targets in file explorer in PR by @taliesin-ai
  • Commit successful empty non-seekable asset responses instead of leaving them pending in PR by @taliesin-ai
  • Fill MIME sniffing prefix correctly across short reads in the asset server in PR by @taliesin-ai
  • Avoid reading full response bodies for non-seekable HEAD requests in the asset server in PR by @taliesin-ai
  • Only serve exact index files when resolving directory requests in the asset server in PR by @taliesin-ai
  • Fix dismissed Linux notifications being reported as clicks on servers without action support in PR by @bercedev
  • Stop dev processes when the terminal closes in PR by @xmasdev
  • Hold Windows taskbar restart debounce for one second before clearing the flag in PR by @taliesin-ai
  • Fix fallback response headers being lost in the asset server in PR by @taliesin-ai
  • Honor header deletions before fallback selection in the asset server in PR by @taliesin-ai
  • Release removed ring queue references in the asset server to avoid memory leaks in PR by @taliesin-ai
  • Release consumed content-sniffer buffers in the asset server to reduce memory use in PR by @taliesin-ai
  • Recognize mixed-case asset file extensions when serving assets in PR by @taliesin-ai
  • Correctly detect content type in asset server without retaining filenames in PR by @taliesin-ai
  • Fall back to a default when a desktop entry has no command in PR by @taliesin-ai
  • Stop the liquid-glass example from showing a dialog before the app starts on non-macOS in PR by @taliesin-ai
  • Keep window size constraints when fullscreen starts from a constrained size on Windows in PR by @taliesin-ai
  • Fix dialogs called before Run blocking forever instead of returning in PR by @taliesin-ai

Security

  • Validate generated icon sizes before image allocation to prevent excessive memory use in PR by @taliesin-ai
  • Validate release notes API responses before use in PR by @taliesin-ai
  • Require complete hexadecimal statement handles in SQLite plugin in PR by @taliesin-ai
  • Constrain filesystem library fallback matches to prevent loading unintended libraries in PR by @taliesin-ai

🤖 This is an automated nightly pre-release generated from the latest changes on master. It is not selected by @latest; install it by its exact tag.

Installation:

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.1.0-nightly.20261028

Tip: always pin an exact version (e.g. @v3.1.0-nightly.20261028) in go.mod and CI rather than @latest.

15 days ago
wails

Wails v3.1.0-nightly.20261027

Wails v3 Nightly - v3.1.0-nightly.20261027

Nightly preview of the upcoming v3.1.0.

Changed

  • Link the 404 page to matching Wails v2 documentation pages on v2.wails.io in PR by @taliesin-ai
  • Move the v2 documentation site to v2.wails.io in PR by @taliesin-ai
  • Serve v3 documentation from wails.io and v2 documentation from v2.wails.io in PR by @taliesin-ai
  • Update v3.0.0 release notes and correct the security advisory claim in PR by @taliesin-ai

Fixed

  • Deliver Go event listener callbacks serially in emit order in PR by @DevLumuz
  • Always advertise the tray Menu property so trays created after Run are not dropped on Linux in PR by @AlbinoGeek
  • Hold main-thread work submitted before Run until the application starts in PR by @AlbinoGeek
  • Use the correct asset API URL when downloading GitHub updater release assets in PR by @gavidroselj
  • Fix screen bounds and positions on mixed-DPI macOS and Linux setups in PR by @julianstorer
  • Preserve request bodies on Windows when WebView2 omits the Content-Length header in PR by @strraaa
  • Fix data race in event hook emission by snapshotting hooks under lock in PR by @DevLumuz
  • Fix SystemTray.SetTooltip() doing nothing on Linux: the StatusNotifierItem tooltip description is now set (#6017)
  • Run changelog evidence check in the weekly release workflow in PR by @taliesin-ai
  • Fix release changelog evidence check to map runs to squash-merge commits in PR by @taliesin-ai
  • Fix Linux dark mode detection returning light on a dark desktop until the colour scheme changed, and linux:SystemThemeChanged never firing on the GTK4 backend. Both backends now share one implementation, backed by the org.freedesktop.appearance portal namespace (#6072)
  • Window.SetZoom no longer raises factors below 1.0 to 1.0 on framed windows (Windows, macOS, Linux): WebView2 ZoomFactor, WKWebView magnification and WebKitGTK's zoom level accept any positive value, and the Zoom window option already passed such values through. Frameless windows keep the 1.0 floor because their drag and resize regions are not adjusted for zoom (#4590); non-positive, NaN and Inf factors are now ignored instead of being raised to 1.0 — by @APshenkin

🤖 This is an automated nightly pre-release generated from the latest changes on master. It is not selected by @latest; install it by its exact tag.

Installation:

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.1.0-nightly.20261027

Tip: always pin an exact version (e.g. @v3.1.0-nightly.20261027) in go.mod and CI rather than @latest.

16 days ago
wails

Wails v3.0.0

Wails v3.0.0

Wails v3 is here. Build desktop and mobile applications with Go and the web frontend you already know, using each platform's native WebView instead of a bundled browser.

v3 is a ground-up rework of Wails. Applications, windows, services, events and platform features are now explicit objects you create and talk to directly, so multiple windows, system trays and background services are a normal part of the model rather than workarounds. It has been nearly four years since the first v3 alpha in January 2023. Thank you to everyone who tested, reported, translated, reviewed and contributed along the way.

📣 Read the announcement: Wails v3.0.0 Released 📚 Documentation: wails.io · Migrating from v2: v2 to v3 guide

Install

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0
wails3 setup    # guided setup: checks your system and installs what Wails needs
wails3 init     # create a new project

Wails v3 requires Go 1.26 or newer. We recommend Go 1.26.10 or 1.27.3 (or later), which include a crypto/x509 security fix. Run wails3 doctor at any time to check your setup.

What's new in v3

Application model

  • Multiple windows. Create, show, hide and close any number of windows at runtime, each with its own options, events and lifecycle.
  • Services. Your backend is ordinary Go: register services with the application and their exported methods become callable from the frontend. Services can have startup and shutdown hooks and can serve HTTP routes.
  • Manager APIs. Windows, menus, dialogs, events, screens, the clipboard and more are reached through clear manager objects on the application, instead of a single context-bound runtime package.
  • Events. Application, window and custom events, with typed payloads, available from both Go and JavaScript, plus platform system events.

Bindings

  • Generated with static analysis. wails3 generate bindings reads your Go source, so doc comments and real parameter names carry through to the generated TypeScript or JavaScript.
  • Models and enums. Go structs become TypeScript classes or interfaces, and Go enums become TypeScript enums.
  • Streams and raw messages. Stream data between Go and the frontend, or use raw messages and custom transports when you need full control.

Native user interface

  • System tray. Tray icons with menus, light and dark icons, macOS template icons, and the option to attach a window to the tray icon.
  • Menus. Application menus, context menus (including from HTML with WML attributes) and tray menus, all updatable at runtime.
  • Dialogs. Native message, question, file open and save dialogs, plus custom dialogs.
  • Frameless and custom windows. Frameless windows with native corners and shadows, custom title bars, drag regions and translucency, including native Liquid Glass on macOS 26 with a fallback on earlier versions.
  • Notifications. Native desktop notifications with actions.
  • Keyboard shortcuts. Window and application key bindings and global shortcuts; on macOS, letter accelerators follow the labelled key on AZERTY, QWERTZ, Dvorak and other layouts.
  • And more:
    • clipboard;
    • file drag and drop, plus HTML drag and drop;
    • screen and environment information;
    • dock badges on macOS;
    • start at login;
    • opening URLs and files in the default browser;
    • notch windows on macOS;
    • a per-window permissions map for the camera, microphone, geolocation and notifications.

Platforms

  • Windows (amd64 and arm64), macOS (Intel and Apple Silicon) and Linux (amd64 and arm64).
  • Linux uses GTK4 and WebKitGTK 6.0 by default. The legacy GTK3 stack is still available with -tags gtk3 until v3.1.
  • iOS and Android (experimental). The same main.go and frontend can run on mobile. Try it and tell us what you find; it isn't yet covered by the stability promise.
  • Server builds. Run the same application and services as an HTTP server, with no native window.

Build, ship and update

  • A build system you can see. Projects use a Taskfile-based build that you can read, extend and debug, instead of one opaque command.
  • Cross-compilation, with platform guides for building on and for every desktop target.
  • Code signing and installers. Signing for every platform, NSIS installers and MSIX packages for Windows, DMG and app bundles for macOS, and AppImage, deb, rpm and Arch packages for Linux.
  • An in-app updater. Pluggable providers (including GitHub Releases), cryptographic verification, an atomic swap with rollback, and a default UI you can theme or replace.
  • Single instance, file associations and custom URL protocols, so your app opens the files and links it owns.
  • Obfuscated builds and access to private macOS APIs when you need them.

Developer experience

  • wails3 setup, a guided setup wizard that checks and installs dependencies.
  • wails3 dev, live development with frontend hot reload and Go rebuilds, which stops its background processes when your app exits.
  • Templates for vanilla, React, Vue and Svelte, each in JavaScript or TypeScript, plus your own custom templates.
  • Testing support, including end-to-end testing guides.
  • An MCP service that lets AI tools drive and inspect a running Wails app.
  • A new documentation site at wails.io, built with M-Press, with tutorials, guides and API reference translated into nine languages.

Moving from v2

v3 is a new major version, so moving to it is a real port rather than a version bump. The main changes are:

  • the application and window lifecycle;
  • services in place of context-bound bindings;
  • direct application and window APIs in place of the v2 runtime package;
  • regenerated frontend bindings.

The migration guide covers each one with before-and-after examples.

Wails v2 isn't going away. It continues to receive critical updates, and its documentation is now at v2.wails.io. The two CLIs (wails and wails3) are separate binaries with different module paths, so you can install both.

Security

This release fixes every published Wails v3 security advisory except one: GHSA-2p5f-2gx8-mh8m is only partly fixed. Cross-origin child frames on Linux are now blocked, and the cases that remain open are listed under Known limitations below. If you are on v3.0.0-beta.30 or earlier, please upgrade.

  • Block reserved wails: messages from cross-origin child frames on Linux (GTK3 and GTK4) by injecting a guard script into all frames, mitigating GHSA-2p5f-2gx8-mh8m
  • Update github.com/klauspost/compress to 1.18.7 (GHSA-259r-337f-4rfw) and golang.org/x/image to 0.45.0, and build with Go 1.26.10 to pick up the crypto/x509 fix (GO-2026-6809)
  • Update vite to 8.2.4 or later in the runtime package, setup wizard, examples and project templates (GHSA-9jrq-w75r-8gcw, GHSA-rq7h-c2jc-7f22, GHSA-vfpm-58rq-9qcg, GHSA-r825-w8mm-5pxw, GHSA-587h-7wmj-h5pm, GHSA-698v-4r3x-3vcv)

Known limitations

  • Linux: the child-frame guard cannot stop a same-origin child frame (for example a srcdoc or about:blank iframe) from reaching the native message handler through its parent, because WebKitGTK gives the handler no frame information. Cross-origin frames, and sandboxed frames without allow-same-origin, are blocked. Do not embed untrusted same-origin content in a Wails window.
  • Android (experimental): the window.wails JavaScript bridge is exposed to every frame in the WebView. Do not embed untrusted third-party content in the app's WebView. A fix is planned for 3.0.1.
  • All platforms: bound-method calls from child frames go over HTTP to /wails/runtime, so the guard does not restrict them. Treat any iframe you embed as having access to your bound Go methods.

Changes since v3.0.0-beta.34

  • Fix Windows apps crashing with panic: SetTextColor failed when painting the application menu bar on some Windows builds (#6311)
  • Fix Windows apps crashing in applyDarkMode when uxtheme.dll was unloaded while its functions were still in use (#6358)
  • Keep a staged update safe while a restart is pending, and validate an update before replacing the installed application, so a damaged update rolls back instead of breaking a working app (#6350, #6360)
  • Fix wails3 update cli not finding v3 releases
  • Project templates pin @wailsio/runtime to the version of the CLI that generated them

Releases from here on

  • Weekly releases bump the minor version (v3.1.0, v3.2.0, ...).
  • Nightly pre-releases preview the next weekly (v3.1.0-nightly.YYYYMMDD).
  • Hotfixes bump the patch version.

Go's @latest always resolves to the newest weekly or hotfix release, never a nightly. The @wailsio/runtime npm package always has the same version as the Wails release. Pin an exact version in production builds.

To propose a new feature or a change to public behaviour, open a draft WEP (Wails Enhancement Proposal) pull request rather than a feature-request issue.

Thank you

Wails v3 exists because of the people who tested incomplete builds, reported hard bugs, translated documentation, answered questions and contributed code: see the credits page. Special thanks to Stffabi, Travis McLane, Atterpac, Lyimmi and fbbdev; to Valerio Tesei for his years of support; to our sponsors; and to JetBrains, ZSA and CodeRabbit.

If Wails is useful to you or your company, please consider sponsoring the project. 💙

Full changelog: changelog

22 days ago
wails

Wails v3.0.0-beta.34

Wails v3 Beta Release - v3.0.0-beta.34

Fixed

  • Fix Windows webview not regaining focus on window activation, and Tab being trapped inside the webview instead of moving to the native window and back (#3783)
  • Fix internal/webview2/pkg/webview2 COM vtable structs (ICoreWebView2_2.._27 and other derived interfaces) omitting the inherited method chain, which made calls land on the wrong vtable slot (#6129)
  • Fix Windows question dialogs ignoring custom button labels and never firing button callbacks; custom buttons are now shown with a TaskDialog (falling back to MessageBox with positional callback mapping when comctl32 v6 is unavailable) (#5794)
  • Fix wails3 dev hanging for 60s against Vite: the automatic frontend readiness gate now uses a TCP probe instead of an HTTP GET that sent no Accept header and received a 404 (#6209)
  • Keep systray menus working when updated while open in PR by @taliesin-ai
  • Handle transient WebView2 COM errors gracefully in runtime operations in PR by @leaanthony

🤖 This is an automated nightly release generated from the latest changes on master.

Installation:

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-beta.34

⚠️ Beta Warning: This is pre-release software. The API is stable, but you may still encounter issues before the final 3.0 release.

23 days ago
wails

Wails v3.0.0-beta.33

Wails v3 Beta Release - v3.0.0-beta.33

Added

  • Binding generator now emits a bindings/events module exporting a typed name constant for every discoverable event registered with application.RegisterEvent using a compile-time constant name (e.g. UserLogin for user:login), usable with Events.On/Emit without the Vite plugin (#5645)

Fixed

  • Fix Windows question dialogs ignoring custom button labels and never firing button callbacks; custom buttons are now shown with a TaskDialog (falling back to MessageBox with positional callback mapping when comctl32 v6 is unavailable) (#5794)
  • Fix wails3 dev hanging for 60s against Vite: the automatic frontend readiness gate now uses a TCP probe instead of an HTTP GET that sent no Accept header and received a 404 (#6209)
  • Keep systray menus working when updated while open in PR by @taliesin-ai
  • Handle transient WebView2 COM errors gracefully in runtime operations in PR by @leaanthony

🤖 This is an automated nightly release generated from the latest changes on master.

Installation:

go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-beta.33

⚠️ Beta Warning: This is pre-release software. The API is stable, but you may still encounter issues before the final 3.0 release.