github egoist/mygo v0.9.0
MyGo 0.9.0

one hour ago

Breaking changes

  • sqlite.LibraryPath and the MYGO_SQLITE_LIBRARY environment variable have been removed. SQLite now loads through the native module system. To point it at a different library, set MYGO_NATIVE_SQLITECORE.

Highlights

  • Native modules (experimental). Implement a Go interface in Swift, Rust, or Zig, and call it from your app. mygo dev generates and builds it. The API may change in breaking ways before it is stable.
  • Native video. ui/video plays 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.PreventScroll keeps 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.Relaunch accepts arguments for the new instance.
  • App.ClearWindowStates resets saved window positions.
  • App.ChosenLocale reports 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.KeepRunning stops macOS from throttling a background app, without keeping the computer awake.
  • Window.SetInputRegion lets a window take clicks only on parts of it, for things like desktop pets.
  • ClipboardOptions.Concealed marks passwords and other secrets so clipboard managers leave them out of their histories.
  • Shell.DefaultApp reports the app that opens a URL. Shell.PreviewItem shows 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. OnInstalled runs once an update is installed.
  • URLs that contain credentials are rejected by the fetch plugin.

Tooling

  • mygo dev signs the macOS development app with your Apple Development identity. Permissions and Keychain access survive rebuilds.
  • mygo dev -background keeps the app from taking focus.
  • Linux packages can be built as RPMs, and linux.depends accepts 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

Full Changelog: v0.8.3...v0.9.0

Don't miss a new mygo release

NewReleases is sending notifications on new releases.