Breaking changes
sqlite.LibraryPathand theMYGO_SQLITE_LIBRARYenvironment variable have been removed. SQLite now loads through the native module system. To point it at a different library, setMYGO_NATIVE_SQLITECORE.
Highlights
- Native modules (experimental). Implement a Go interface in Swift, Rust, or Zig, and call it from your app.
mygo devgenerates and builds it. The API may change in breaking ways before it is stable. - Native video.
ui/videoplays video with each system's own engine: AVFoundation on macOS, Media Foundation on Windows, GStreamer on Linux, and the video element in browsers. Play, pause, seek, rate, volume, mute, and loop. - More audio formats. AAC, FLAC, and Apple Lossless decode, including inside MP4/M4A files and DASH fragments.
Native UI
- New
SplitButton: a button joined to a menu of related actions. - New
ListState.Choose, so the app can choose a row. - Charts support logarithmic and symmetric log scales.
- Scroll bars are styled like VS Code's editor, and each axis can hide its indicators.
- Focus scrolls the element into view, and
FocusOptions.PreventScrollkeeps the scroll where it is. - Accessibility: status messages are read out, tab panels and landmarks are announced, menu buttons say they open a menu, and read-only state is reported on more controls.
- Lists, outlines, and context menus do less work per frame.
Editor, rich text, and Markdown
- The code editor highlights Svelte, HCL/Terraform, ERB, Jinja, and Nix. Scripts are recognized by their
#!line. - Unified diffs and patches show their files, and read-only diffs end correctly at the final newline.
- Inline widgets can sit at the end of a line without capturing the caret.
- The rich text editor can hide its scroll bar, leave room above paragraphs, and report where the caret is. Apps can take keys, draw spans, and add to its menu.
- Markdown can turn inline code into links with
Options.CodeLink.
App and platform
App.Relaunchaccepts arguments for the new instance.App.ClearWindowStatesresets saved window positions.App.ChosenLocalereports the language the app chose, or "" when it follows the system.- Quit handlers run when the OS ends the session (logout or shutdown), so apps can save state then.
Power.KeepRunningstops macOS from throttling a background app, without keeping the computer awake.Window.SetInputRegionlets a window take clicks only on parts of it, for things like desktop pets.ClipboardOptions.Concealedmarks passwords and other secrets so clipboard managers leave them out of their histories.Shell.DefaultAppreports the app that opens a URL.Shell.PreviewItemshows a file in Quick Look on macOS.- Terminals let apps take dropped files first with
Options.OnDrop. - Apps can choose which client certificate a server asks for.
- The updater offers a release published while its window is open, retries when a server fails briefly, and shows release notes in more cases.
OnInstalledruns once an update is installed. - URLs that contain credentials are rejected by the fetch plugin.
Tooling
mygo devsigns the macOS development app with your Apple Development identity. Permissions and Keychain access survive rebuilds.mygo dev -backgroundkeeps the app from taking focus.- Linux packages can be built as RPMs, and
linux.dependsaccepts per-format dependencies.
Fixes
- macOS: minimized windows count as visible, native popovers follow the app's appearance, hidden or minimized windows draw at once, and password fields stay unreadable to assistive technology.
- Windows: transparent WebView backgrounds render correctly. Chinese text uses one font on English Windows. Numbers and Latin text wrap correctly. Native opening transitions are kept.
- Linux: template tray icons are white on dark desktops. Glyph positions match GTK. Default-app lookup works for files without an extension.
- Terminal: Ctrl+I, Ctrl+M, and Ctrl+[ send Tab, Enter, and Esc. URLs stop at the first non-ASCII character. A temporary read error no longer ends the program.
- Audio: audio is low-passed before downsampling, so 30 kHz sound no longer plays at 18 kHz.
- Clipboard: UTF-8 text is preferred over plain text when pasting.
Plugins
- The SQLite plugin runs SQLite as a native module, with faster queries and inserts. Apart from the removal above, its API is unchanged.
- The permissionflow plugin's Guide panel and permission names are localized.
Contributors
- @Amamiya23, @BABA983, @BabyLy233
- @DIYgod, @FleetingEcho, @Flyinsky2004
- @Garfielk, @Jonnyan404, @Sakurasan
- @ShinoharaHaruna, @Th1nkK1D, @TooonyChen
- @Yeman-sker, @ayuayue, @bestruirui
- @bketelsen, @brodienguyen, @cunninghamcard-bit
- @daodao97, @djyde, @echoVic
- @everroam, @getan, @hellozhangran
- @horizon0514, @imhalid, @imurfutur3
- @ji233-Sun, @jiaz, @joei4cm
- @k-azv, @kyya, @landaiqing
- @liby, @prometheusalpha, @pseudoyu
- @serious-snow, @smallnest, @sorrycc
- @wcqqq1214, @wiptgdxv, @zzstar101
Full Changelog: v0.8.3...v0.9.0