Holochain 0.7.0 was released on 30 July (the same day we announced Holo Ventures and the HOTโHoloFuel migration date on a livestream). Along with a lot of performance and reliability improvements (one Wind Tunnel test is now 5ร faster) we've taken a hard look at the data model, identified where it's confusing or annoying to use, and redesigned it.
That does mean there'll be breaking changes. Quite a few, in fact โ more than the usual point release has. I think it's like breaking a bone to re-set it in the proper shape; momentary pain for long-term health.
The two big changes are in Action and Op/FlatOp.
(BTW: don't stop reading too early โ there's some exciting news at the bottom ๐)
Changes to Action
An Action used to be an enum of all the different action types you could write; now it's a simple struct containing two fields: header and data. This simplifies the guts of an action: whereas before the same common action header fields had to be replicated across every single enum variant's data, now the common fields are in header. (You can still use the old getter methods like action.author() to save yourself a few keystrokes though.)
Changes to Op and FlatOp
The names for all the Op variants are simpler: Register and Store are now gone. So now RegisterCreateLink is just CreateLink, and so forth. The contents of Op variants' data are simpler; wherever you might previously find an action struct like Update or Delete (now non-existent), you'll just find an Action.
FlatOp gets a further simplification; RegisterCreateLink and RegisterDeleteLink are collapsed into Link, whose data is an enum that you can match on for link creates and deletes. And the contents of its variants' data have changed as well for the same reason as Op, but in a different way. For instance, for CreateRecord, the OpRecord enum's variants now contain action data as TypedAction<CreateData> rather than Create.
Other changes
Because the breaking changes go all the way to the data model, 0.7.0's database and wire protocol are not compatible with 0.6, so you should consider this upgrade a clean break with whatever came before it.
The deprecated tx5 WebRTC transport backend has been removed, which means there are conductor config changes, and you'll also need to replace your bootstrap/proxy infrastructure with the iroh-based bootstrap server if you haven't already.
Note: The bootstrap server now also includes an iroh relay, so you don't have to go provisioning relay infrastructure with a separate binary!
The entire data model explained, on one page
One artifact of all this work is thorough (and up-to-date) documentation of Holochain's data model. You can find it in the holochain/holochain GitHub repo under docs/design/.
Updating your hApp, the easy way
As always, we provide an upgrade guide for 0.6โ0.7 and a compatibility table for you to work through. But because there are so many small things to change โ many of them tedious and mechanical โ and we live in the age of AI-driven dev, we've created an upgrade skill for AI coding agents. It's based on the upgrade guide, but it also encodes lessons learned from upgrading a few different real hApps. Try it out today and tell us how it went in the DEV.HC Discord!
Happy news: performance boosts and iOS support!
Cells run much quicker now, thanks to a combination of an update to the wasmer engine, keeping disabled zomes cold on app startup, and better memory management for compiled WASM code. One test scenario was clocked running 5ร faster than on 0.6!
The compiled WASM cache also lives in the database rather than the filesystem now, to prevent a malicious actor from swapping it out for something nasty.
And speaking of WebAssembly, Holochain 0.7 now supports wasmer's wasmi backend. This is an interpreted backend, which means it's a bit slower than the cranelift or LLVM backends, BUT โ and this is the exciting bit โ this backend complies with Apple's no-hot-loaded binaries policy. That means you can upload an app to the App Store!
We don't have any ready-to-go templates for this like the Kangaroo-Electron template for macOS, Linux, and Windows, and in testing we discovered an issue in the way the Lair keystore server is loaded (PR up already, hopefully will be merged in 0.7.1). But here's a screenshot of a very basic diagnostic hApp, built with Tauri, proving that it works on an iPhone:

