github itchio/itch v26.11.0

7 hours ago

This release adds a UI for uploading builds to itch.io with butler without needing to drop down to the terminal, upgrades to Electron 41 and TypeScript 6, and includes a handful of accessibility, hotkey, and Linux autostart fixes.

This version of the app is linked to butler version 15.27.0.

Uploading builds with butler

A new "Upload" entry in the sidebar opens a Builds page that lists every build you've pushed with butler, with project, channel, version, status, size, and pushed time. The list can be filtered by status (All / Live / Processing / Failed) and searched by project, channel, or version. Each row expands to show per-file details (archive, patch, signature, manifest, unpacked), the build ID, the user who pushed it, the original butler push command, and an error message if the push failed.

A new push dialog lets you push a build by picking a project, picking or creating a channel (with an option to mark new channels as hidden), entering an optional user version, and dropping a folder or .zip as the source. Recent source folders are remembered and offered for re-use.

Before pushing, you can run a preview that compares the source against the latest build on the channel and shows the number of files that would be uploaded, the patch size, the source size, and the top new, modified, and deleted files.

While a push is running, you can track it with a live progress display showing the current phase (preparing, diffing, uploading, finishing), bytes read and uploaded, patch size, and ETA. System notifications are used to update you on the status of the build.

New environment variable for launched games: ITCHIO_APP=1

Every program started via itch now has ITCHIO_APP=1 set in its environment. Games can read this to detect that they were started by the itch.io desktop app.

Login

  • The OAuth login screen now has a "Browser didn't open?" disclosure that reveals the OAuth URL with a copy button, so the URL can be pasted manually in environments where the app can't open a browser.

Hotkeys

  • Added zoom in (Ctrl/Cmd+=), zoom out (Ctrl/Cmd+-), and reset zoom (Ctrl/Cmd+0) to the View menu (#2305, #3099)

Linux

  • Fixed several issues with openAtLogin / openAsHidden and .desktop file handling (#3311):
    • The autostart .desktop file is now written to $XDG_CONFIG_HOME/autostart instead of $XDG_CONFIG_HOME directly
    • The installed .desktop file is now looked up in $XDG_DATA_HOME/applications and /usr/share/applications, instead of only /usr/share/applications
    • "Open as hidden" now actually starts the app hidden on autostart, by injecting a --hidden flag into the autostart copy's Exec= line; manual launches via menu or icon still show a window
    • The autostart .desktop file is no longer deleted on app startup when openAtLogin is its default-off value, so user-managed autostart files survive

Bug Fixes

  • Fixed prevent-sleep not engaging while a game is running, due to a null-check that was always falsy (#2293)
  • Fixed the Itch object in HTML games not being exposed to the page; now uses Electron's contextBridge instead of the deprecated webFrame.executeJavaScript (#3271)
  • Don't crash the React render when the saved locale code is invalid; locale codes are now normalized to BCP 47 (pt_BRpt-BR) and validated via Intl before use, falling back to English on invalid values (#2619)
  • Sidebar tab list now scrolls vertically when there are more tabs than fit, instead of clipping (#3401)
  • Fixed the "disable network in sandbox" checkbox in preferences being toggled when clicking elsewhere in the surrounding row
  • Fixed a bug where auto-update could get stuck cyling between items and never finishing any of them

Accessibility

  • The custom select dropdown (used for language, install location, sandbox type, and upload pickers) is now reachable by keyboard tab navigation and rendered as a real <button>

Internals

  • Upgraded Electron from 40 to 41
  • Upgraded to TypeScript 6; removed the legacy noImplicitAny: false and useUnknownInCatchVariables: false compatibility flags
  • Added a translation for butlerd error code 19000 so messages from butler surface as readable text instead of a raw code

Translations

  • Reworked the i18n sync script
  • Fixed the Weblate project URL
  • Synced translations

Development

  • Restored hot reloading on code changes; the renderer bundle is no longer cached across app refreshes
  • develop.mjs no longer leaves the terminal in a broken state when the app is interrupted with Ctrl-C (runs stty sane on exit)

Don't miss a new itch release

NewReleases is sending notifications on new releases.