github wailsapp/wails v3.0.0-alpha.10

pre-release2 months ago

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 and Paths methods to application 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 and Destroy 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 usual wml-* 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 #4067
  • kvstore service provides an in-memory key-value store by default when unconfigured by @fbbdev in #4067
  • Add Load method on kvstore service to reload data from file after config changes by @fbbdev in #4067
  • Add Clear method on kvstore service to delete all keys by @fbbdev in #4067
  • Add type Level in log service to provide JS-side log-level constants by @fbbdev in #4067
  • Add Log method on log 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 on sqlite 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 and unmaximise 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 and application.WindowNameKey (replaced by application.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 (use application.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 in models.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 when App.Run is called, not in application.New by @fbbdev in #4066
  • ServiceStartup errors are now returned from App.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 a CancelError 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 on sqlite service is now named Query 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

Don't miss a new wails release

NewReleases is sending notifications on new releases.