Breaking Changes
- Manager API Refactoring: Reorganized application API from flat structure to organized managers for better code organization and discoverability by @leaanthony in #4359
app.NewWebviewWindow()
→app.Window.New()
app.CurrentWindow()
→app.Window.Current()
app.GetAllWindows()
→app.Window.GetAll()
app.WindowByName()
→app.Window.GetByName()
app.EmitEvent()
→app.Event.Emit()
app.OnApplicationEvent()
→app.Event.OnApplicationEvent()
app.OnWindowEvent()
→app.Event.OnWindowEvent()
app.SetApplicationMenu()
→app.Menu.SetApplicationMenu()
app.OpenFileDialog()
→app.Dialog.OpenFile()
app.SaveFileDialog()
→app.Dialog.SaveFile()
app.MessageDialog()
→app.Dialog.Message()
app.InfoDialog()
→app.Dialog.Info()
app.WarningDialog()
→app.Dialog.Warning()
app.ErrorDialog()
→app.Dialog.Error()
app.QuestionDialog()
→app.Dialog.Question()
app.NewSystemTray()
→app.SystemTray.New()
app.GetSystemTray()
→app.SystemTray.Get()
app.ShowContextMenu()
→app.ContextMenu.Show()
app.RegisterKeybinding()
→app.KeyBinding.Register()
app.UnregisterKeybinding()
→app.KeyBinding.Unregister()
app.GetPrimaryScreen()
→app.Screen.GetPrimary()
app.GetAllScreens()
→app.Screen.GetAll()
app.BrowserOpenURL()
→app.Browser.OpenURL()
app.Environment()
→app.Env.GetAll()
app.ClipboardGetText()
→app.Clipboard.Text()
app.ClipboardSetText()
→app.Clipboard.SetText()
- Renamed Service methods:
Name
->ServiceName
,OnStartup
->ServiceStartup
,OnShutdown
->ServiceShutdown
by @leaanthony - Moved
Path
andPaths
methods toapplication
package by @leaanthony - The application menu is now macOS only by @leaanthony
Added
- Organized Testing Infrastructure: Moved Docker test files to dedicated
test/docker/
directory with optimized images and enhanced build reliability by @leaanthony in #4359 - Improved Resource Management Patterns: Added proper event handler cleanup and context-aware goroutine management in examples by @leaanthony in #4359
- Support aarch64 AppImage builds by @AkshayKalose in #3981
- Add diagnostics section to
wails doctor
by @leaanthony - Add window to context when calling a service method by @leaanthony
- Add
window-call
example to demonstrate how to know which window is calling a service by @leaanthony - New Menu guide by @leaanthony
- Better panic handling by @leaanthony
- New Menu guide by @leaanthony
- Add doc comments for Service API by @fbbdev in #4024
- Add function
application.NewServiceWithOptions
to initialise services with additional configuration by @leaanthony in #4024 - Improved menu control by @FalcoG and @leaanthony in #4031
- More documentation by @leaanthony
- Support cancellation of events in standard event listeners by @leaanthony
- Systray
Hide
,Show
andDestroy
support by @leaanthony - Systray
SetTooltip
support by @leaanthony. Original idea by @lujihong - Report package path in binding generator warnings about unsupported types by @fbbdev in #4045
- Add binding generator support for generic aliases by @fbbdev in #4045
- Add binding generator support for
omitzero
JSON flag by @fbbdev in #4045 - Add
//wails:ignore
directive to prevent binding generation for chosen service methods by @fbbdev in #4045 - Add
//wails:internal
directive on services and models to allow for types that are exported in Go but not in JS/TS by @fbbdev in #4045 - Add binding generator support for constants of alias type to allow for weakly typed enums by @fbbdev in #4045
- Add binding generator tests for Go 1.24 features by @fbbdev in #4068
- Add support for macOS 15 "Sequoia" to
OSInfo.Branding
for improved OS version detection in #4065 - Add
PostShutdown
hook for running custom code after the shutdown process completes by @fbbdev in #4066 - Add
FatalError
struct to support detection of fatal errors in custom error handlers by @fbbdev in #4066 - Standardise and document service startup and shutdown order by @fbbdev in #4066
- Add test harness for application startup/shutdown sequence and service startup/shutdown tests by @fbbdev in #4066
- Add
RegisterService
method for registering services after the application has been created by @fbbdev in #4066 - Add
MarshalError
field in application and service options for custom error handling in binding calls by @fbbdev in #4066 - Add cancellable promise wrapper that propagates cancellation requests through promise chains by @fbbdev in #4100
- Add the ability to tie binding call cancellation to an
AbortSignal
by @fbbdev in #4100 - Support
data-wml-*
attributes for WML alongside the usualwml-*
attributes by @leaanthony - Add
Configure
method on all services for late configuration/dynamic reconfiguration by @fbbdev in #4067 fileserver
service sends a 503 Service Unavailable response when unconfigured by @fbbdev in #4067kvstore
service provides an in-memory key-value store by default when unconfigured by @fbbdev in #4067- Add
Load
method onkvstore
service to reload data from file after config changes by @fbbdev in #4067 - Add
Clear
method onkvstore
service to delete all keys by @fbbdev in #4067 - Add type
Level
inlog
service to provide JS-side log-level constants by @fbbdev in #4067 - Add
Log
method onlog
service to specify log-level dynamically by @fbbdev in #4067 sqlite
service provides an in-memory DB by default when unconfigured by @fbbdev in #4067- Add method
Close
onsqlite
service to close the DB manually by @fbbdev in #4067 - Add cancellation support for query methods on
sqlite
service by @fbbdev in #4067 - Add prepared statement support to
sqlite
service with JS bindings by @fbbdev in #4067 - Gin support by Lea Anthony in PR based on the original work of @AnalogJ in PR[https://github.com//pull/3537]
- Fix auto save and password auto save always enabled by @oSethoum in #4134
- Add
SetMenu()
on window to allow for setting a menu on a window by @leaanthony - Add Notification support by @popaprozac in #4098
- Add File Association support for mac by @wimaha in #4177
- Add
wails3 tool version
for semantic version bumping by @leaanthony - Add badging support for macOS and Windows by @popaprozac in #
Fixed
- Fixed nil pointer dereference in processURLRequest for Mac by @etesam913 in #4366
- Fixed a linux bug preventing filtered dialogs by @bh90210 in #4287
- Fixed Windows+Linux Edit Menu issues by @leaanthony in #3f78a3a
- Updated the minimum system version in macOS .plist files from 10.13.0 to 10.15.0 by @AkshayKalose in #3981
- Window ID skip issue by @leaanthony
- Fix nil menu issue when calling RegisterContextMenu by @leaanthony
- Fixed dependency cycles in binding generator output by @fbbdev in #4001
- Fixed use-before-define errors in binding generator output by @fbbdev in #4001
- Pass build flags to binding generator by @fbbdev in #4023
- Change paths in windows Taskfile to forward slashes to ensure it works on non-Windows platforms by @leaanthony
- Mac + Mac JS events now fixed by @leaanthony
- Fixed event deadlock for macOS by @leaanthony
- Fixed a
Parameter incorrect
error in Window initialisation on Windows when HTML provided but no JS by @leaanthony - Fixed size of response prefix used for content type sniffing in asset server by @fbbdev in #4049
- Fixed handling of non-404 responses on root index path in asset server by @fbbdev in #4049
- Fixed undefined behaviour in binding generator when testing properties of generic types by @fbbdev in #4045
- Fixed binding generator output for models when underlying type has not the same properties as named wrapper by @fbbdev in #4045
- Fixed binding generator output for map key types and preprocessing by @fbbdev in #4045
- Fixed binding generator output for structs that implement marshaler interfaces by @fbbdev in #4045
- Fixed detection of type cycles involving generic types in binding generator by @fbbdev in #4045
- Fixed invalid references to unexported models in binding generator output by @fbbdev in #4045
- Moved injected code to the end of service files by @fbbdev in #4045
- Fixed handling of errors from file close operations in binding generator by @fbbdev in #4045
- Suppressed warnings for services that define lifecycle or http methods but no other bound methods by @fbbdev in #4045
- Fixed non-React templates failing to display Hello World footer when using light system colour scheme by @marcus-crane in #4056
- Fixed hidden menu items on macOS by @leaanthony
- Fixed handling and formatting of errors in message processors by @fbbdev in #4066
- Fixed skipped service shutdown when quitting application by @fbbdev in #4066
- Ensure menu updates occur on the main thread by @leaanthony
- The dragging and resizing mechanism is now more robust and matches expected platform behaviour more closely by @fbbdev in #4100
- Fixed #4097 Webpack/angular discards runtime init code by @fbbdev in #4100
- Fixed initially-hidden menu items by @IanVS in #4116
- Fixed assetFileServer not serving
.html
files when non-extension request when[request]
doesn't exist but[request].html
does - Fixed icon generation paths by @robin-samuel in #4125
- Fixed
fullscreen
,unfullscreen
,unminimise
andunmaximise
events not being emitted by @oSethoum in #4130 - Fixed NSIS Error because of incorrect prefix on default version in config by @robin-samuel in #4126
- Fixed Dialogs runtime function returning escaped paths on Windows by TheGB0077 in #4188
- Fixed Webview2 detection path in HKCU by @leaanthony.
- Fixed input issue with macOS by @leaanthony.
- Fixed Windows icon generation task file name by @yulesxoxo in #4219.
- Fixed transparency issue for frameless windows by @leaanthony based on work by @Kron.
- Fixed focus calls when window is disabled or minimised by @leaanthony based on work by @Kron.
- Fixed system trays not showing after taskbar restarts by @leaanthony based on work by @Kron.
- Fixed fallbackResponseWriter not implementing Flush() in #4245
- Fixed fallbackResponseWriter not implementing Flush() by [@superDingda] in #4236
- Fixed macOS window close with pending async Go-bound function call crashes by @joshhardy in #4354
- Fixed Windows Efficiency mode startup race condition by @leaanthony
- Fixed Windows icon handle cleanup by @leaanthony.
- Fixed
OpenFileManager
on Windows by @PPTGamer in #4375.
Changed
- Removed
application.WindowIDKey
andapplication.WindowNameKey
(replaced byapplication.WindowKey
) by @leaanthony - ContextMenuData now returns a string instead of any by @leaanthony
- In JS/TS bindings, class fields of fixed-length array types are now initialized with their expected length instead of being empty by @fbbdev in #4001
- ContextMenuData now returns a string instead of any by @leaanthony
application.NewService
does not accept options as an optional parameter anymore (useapplication.NewServiceWithOptions
instead) by @leaanthony in #4024- Removed
nanoid
dependency by @leaanthony - Updated Window example for mica/acrylic/tabbed window styles by @leaanthony
- In JS/TS bindings,
internal.js/ts
model files have been removed; all models can now be found inmodels.js/ts
by @fbbdev in #4045 - In JS/TS bindings, named types are never rendered as aliases for other named types; the old behaviour is now restricted to aliases by @fbbdev in #4045
- In JS/TS bindings, in class mode, struct fields whose type is a type parameter are marked optional and never initialised automatically by @fbbdev in #4045
- Remove ESLint from templates by by @IanVS in #4059
- Update copyright date to 2025 by @IanVS in #4037
- Add docs for event.Sender by @IanVS in #4075
- Go 1.24 support by @leaanthony
ServiceStartup
hooks are now invoked whenApp.Run
is called, not inapplication.New
by @fbbdev in #4066ServiceStartup
errors are now returned fromApp.Run
instead of terminating the process by @fbbdev in #4066- Binding and dialog calls from JS now reject with error objects instead of strings by @fbbdev in #4066
- Improved systray menu positioning on Windows by @leaanthony
- The JS runtime has been ported to TypeScript by @fbbdev in #4100
- The runtime initialises as soon as it is imported, no need to wait for the window to load by @fbbdev in #4100
- The runtime does not export an init method anymore. A side effects import can be used to initialise it by @fbbdev in #4100
- Bound methods now return a
CancellablePromise
that rejects with aCancelError
if cancelled. The actual result of the call is discarded by @fbbdev in #4100 - Built-in service types are now consistently called
Service
by @fbbdev in #4067 - Built-in service creation functions with options are now consistently called
NewWithConfig
by @fbbdev in #4067 Select
method onsqlite
service is now namedQuery
for consistency with Go APIs by @fbbdev in #4067- Templates: moved runtime to "dependencies", organized package.json files by @IanVS in #4133
- Creates and ad-hoc signs app bundles in dev to enable certain macOS APIs by @popaprozac in #4171