Holochain 0.5.3 ready for use
Building on the big speed and reliability improvements in past Holochain 0.5.x releases, Holochain 0.5.3 is ready for general development. We’ve taken feedback on user experience and made further improvements to startup time and gossip reliability.
The big changes in Holochain 0.5.3 are:
- Agents more quickly declare and share their ‘storage arc’, the region of the DHT they claim to be holding. This makes other nodes recognise them as an authority so they can start sending new data directly to them.
- Nodes detect and remember offline peers now. If any peer is unresponsive, the node makes a note of this in their peer metadata and doesn’t try requesting data from them or gossiping until they receive a new agent info record about them (which online peers will publish every twenty minutes).
- All DHT requests are now sent to three random peers in parallel, and the quickest peer to respond with data wins. (Note that this isn’t necessarily the most in-sync peer, although this has always been true of DHT gets. This is helpful for nodes that don’t hold any DHT data for the address being requested, such as mobile nodes, and for any DHT query with a GetStrategy::Network.) Previously one peer at a time was contacted, and if that peer was unresponsive or didn’t hold the data, the request would time out in 60 seconds and return no data.
You don’t need to do anything special to update your project to Holochain 0.5.3. HDK 0.5.2 and HDI 0.66.2 are compatible with Holochain 0.5.3, so most projects could simply choose to update Holochain but continue using the same zome dependencies. But if you do want to update your zomes to use HDK 0.5.3 and HDI 0.6.3, you’ll need to also add one explicit dependency; read the upgrade guide for instructions.
CI tooling changes
If you’re a regular contributor to Holochain repositories, we’ve introduced new org-wide policies and processes, enforced by CI workflows. All commit messages must be in the Conventional Commits format, e.g., feat: Add new admin API endpoint ListFoos or fix!: Change serialization for delete_foo(). A new bot, cocogitto, will enforce these rules on a PR by posting error comments and blocking merge for any commit that doesn’t comply.
Conventional Commits will be used in two ways:
- The commit messages will be used to decide how to bump version numbers (see the Conventional Commits website for details).
- The changelog will now be automatically generated from commit messages.
Read the release automation readme for details on how commits and merges work now. I found this section of this config file especially helpful in understanding how commit messages are parsed into changelog items.
Office Hours 25 June: mobile WASM support
During our last Office Hours call, the topic of WebAssembly runtimes came up — specifically Wasmer’s support for mobile operating systems. We have supported various approaches in the past, including precompiled binaries for iOS (now removed) and an interpreted WebAssembly back-end. Some topics discussed include:
- Maintaining the interpreted back-end (WAMR)
- The challenge of pre-compiling WebAssembly bytecode to machine code and including in a package, which results in large package sizes
- Supporting Google’s V8 as a WebAssembly back-end, which is currently supported by Wasmer, but only for 64-bit ARM devices
This topic is super important, as most people’s phones are their primary computing devices, and we also happen to have a partner who makes mobile phones. Discussions are ongoing, and we need your input too. If you develop mobile applications, please share your needs in the #mobile-holochain channel in the DEV.HC Discord.