Kate v0.23.4 (April 2023)#

The v0.23.4 is April’s experimental release of Kate, including a handful of bugfixes, some new features, and a database redesign (a breaking change).

UI redesign & code simplifications#

This version has a minor UI redesign including more playful sans-serif fonts and a more pervasive use of button hints in the status bar. There’s now some audio feedback for keyboard/gamepad actions and a more consistent handling of “X” as a “go back” button.

Custom themes are going to land sometime later this year, there’s still some work needed on how they’re going to be distributed, and how to divide up capabilities in themming (e.g.: allowing people to install CSS files directly is too dangerous, since Kate relies heavily on having specific visual cues for security).

There’s been quite a lot of work in simplifying parts of the code, such as focus handling and game/OS scene handling. Though the code is still very much experimental, this should make management a little bit easier.

Storage and memory usage improvements#

Cartridges are now unpacked in the IndexedDB storage, which means that cartridge binary changes do not affect already installed cartridges.

Besides that, this has the benefit of improving memory usage for installed cartridges, as the game does not need to keep all of the files in memory while running. For games with a larger size, this should allow a little smoother playing, as long as individual files have reasonable sizes as well.

While reading files has an added latency because of this, files are still loaded from local storage, so it should be fast enough for most use cases.

New ObjectStorage API#

This version adds a new ObjectStorage API, which is a key/value store with enforced quota. This should allow cartridges to serialise save data while protecting users from malicious cartridges trying to overload the device’s storage.

Each cartridge gets 32MB of storage in the object store. There will be a capability to request more storage in future versions, but for now this should be enough for most save data use cases.

Note that the ObjectStorage API does not protect against degrading the device storage by abusing writes. That’s something that may be looked into for future versions.

A new JS packaging tool#

This version does away with Browserify as a way of packaging Kate code and introduces a new tool, Glomp, which handles packaging JavaScript (and other web files) in a simplified manner.

This was a requirement for improving Kate security, as Browserify is too large to manually audit, and it injects packages arbitrarily in the output.

Glomp is not yet verified, and it does not handle mal-formed JavaScript; those are the next steps before a stable release of Kate.

Loading images in HTML entry-point#

Images included in the HTML entry-point are now loaded while sandboxing the HTML page, so they should work in the same way as images dynamically loaded. Paths still need to point to a valid cartridge file path (e.g.: /images/loading.png)

Active Resources Area#

It’s hard to know what applications are doing sometimes. Previously Kate distinguished between trusted/untrusted prompts (like confirmation dialogs and menus) by showing a red border around the screen. But that doesn’t work for things like “this game is using my microphone”.

This version of Kate introduces the “Active Resources Area”, a small display of icons to the right of the “= KATE =” engraving in the emulator that shows which special resources the current application or game is using.

Currently this is used to display the use of screen recording (a small red bullet is displayed), or the lack of persistent storage (a hard drive with a clock is displayed).

Lack of persistent storage here means that data stored in Kate is stored in a “best effort” manner, where the browser might delete it if the device is running out of space. This should only be an issue when using Kate online, without having it installed as a WebApp.

Playing habits#

This version of Kate now collects small playing habit data by default, meaning that we store locally when a cartridge was last played, and how much time in total was spent in each cartridge. There’s a new settings screen where this feature can be turned off, and collected data both visualised and deleted.

The last_played data is used to sort entries in the Home screen. The total play times are not currently used for anything, just available locally.

Pinned versions on the web#

The web version of the Kate emulator no longer updates automatically. We record what version you’re running, and offer the option to update at your leisure from the About Kate screen.

This is needed because, since all data is stored locally, some upgrades require updating the local data due to format changes, and these updates can run for a few minutes if you have a lot of data. Having the player initiate these updates means less surprises when they’re just trying to play something.

This also gives players a chance of reviewing what has changed between the current version and the new one.