With the expected date of Holochain’s first-ever beta release this week, I thought it’d be good to go into the sequence of events that are coming before and after that moment. If you’re a developer who’s been waiting for stability before you jump into developing hApps, or if you’ve got an existing codebase and have put it on pause, this will tell you when you can jump back in.
Keep in mind that this is our best estimate of timelines; things may roll out slightly differently depending on what we encounter. In a project like this, there’s a big difference between “we’ve made a release” and “our whole ecosystem of dev tools is ready for you to use”. So there’ll be a bit of time after the release date as we update all the dependencies.
After that, I’ll share some release notes for updates that’ve happened since last Dev Pulse. Note that these are still just release candidates, so they’ll only be relevant if you’ve been keeping up with them in order to help us hunt for bugs and missing features in the leadup to beta.
And lastly, we've got another developer course coming up! If you wanted to attend the first one but couldn't, now's your chance — it's all online and happening in March.
Releasing a full DWeb app dev stack, piece by piece
Because Holochain is a full development stack for P2P apps, dev tools are important. And with every change in the core runtime and its APIs, all those tools have to be updated and re-released. We learned a lot of valuable stuff about what this means after our first release candidate in December — it was the first time we tried to update all the components in sync with each other. It became a dress rehearsal for 0.1.0-beta, and we feel well prepared now.
Last week we released Holochain 0.1.0-beta-rc.3 and rc.4. We intend for rc.4 to be the final one before beta, which should happen later in the week — 26 January is the date we’re aiming for.
‘Beta release’ means simply that there will be an 0.1.0
release tag on GitHub (note the absence of -beta
), along with downloadable source code so you can compile your own binaries.
After that, devs will be able to update all the things that depend on it — specifically developer and user tooling. We’re anticipating that this will take a couple weeks, which should mean that everything will be ready to use by 9 February.
Here’s a roughly sequential list of everything that needs to happen for a ‘minimum usable release’:
- Holochain 0.1.0 release: A particular commit in the Git history is marked as the official release. It includes the conductor runtime, the host SDKs (HDI and HDK), the proxy service binary, and the
hc
dev tool. You’ll be able to see it on our GitHub releases page and download the source code to compile yourself. Binaries will appear on crates.io a day or two afterward, along with the HDI, HDK, and conductor API documentation reference. - The JavaScript and Rust clients, for building application front-ends, will be updated, released, and made available on NPM and crates.io. Many core parts of the dev and user ecosystem rely on these clients.
- The Tryorama test framework, used to write tests for your hApps and ours, will be updated, released, and made available on NPM.
- After the above components are updated, the scaffolder’s templates will be updated to include any changes. This is a new iteration of our rapid app development tool that can generate boilerplate back-end and front-end code for your hApp, along with tests and a Holonix dev environment setup to match your project’s Holochain dependencies.
- The
hc launch
dev command will be updated. This runs a bare-bones version of the Launcher to provide a minimal conductor environment, UI, and one or more agent nodes to test your full hApp. - DevHub, a hApp package repo (that’s right, a hApp for distributing hApps) will be updated to support any changes in Holochain, and will be incorporated into the Launcher. Internal QA testing will make sure it all works.
- The Launcher, an easy-to-use container for downloading and running hApps, will be updated and released, with installers for Linux, macOS, and Windows available on GitHub. Launcher includes DevHub so devs can upload apps and users can download them.
- Holonix, a shell environment that includes all the software needed to develop and test hApps, will be updated to include all of the above. It will be made available via the quick start installation method.
- Time to start building!
Holochain release notes
Holochain 0.1.0-beta-rc.3: Bugfixes, zome name included in signals
Release date: 17 January 2023
HDI compatibility: 0.2.0-beta-rc.1, 0.2.0-beta-rc.2
HDK compatibility: 0.1.0-beta-rc.1, 0.1.0-beta-rc.2
Breaking changes: app API
This is mostly a bugfix release, with one breaking change requested by hApp developers.
- Breaking (app API): App-generated signals now include the name of the zome that generated them, along with the existing cell ID. (#1750)
- New/bugfix: Pressing Ctrl+C on the command line gracefully shuts down the conductor, processing and cleaning up remaining cell tasks. (#1761)
- Bugfix: Calling
emit_signal
` from apost_commit
callback caused a panic; now it succeeds. (#1749) - Bugfix: Disabling and re-enabling an app caused all of its cells to become unresponsive when it tried to access the DHT. This happened because the agent had a zero storage arc when they rejoined; now their storage arc is recreated. Known issue: cells are still occasionally unresponsive when they’re re-enabled; the workaround is to disable and re-enable the whole hApp again. (#1744)
Holochain 0.1.0-beta-rc.4: WASM metering, host API versioning, bundle format change
Release date: 20 January 2023
HDI compatibility: 0.2.0-beta-rc.1 to 0.2.0-beta-rc.3
HDK compatibility: 0.1.0-beta-rc.3
Breaking changes: admin API, app API, host API, hApp bundles, HDK
In addition to some new and clarified content in the documentation (#1778, #1765, #1767), there are a few bugfixes and some low-level WASM, host interface, and bundling format changes that will require rebuilding your hApp but probably won’t require you to modify your code.
- Breaking (host API): Functions in the host interface are now versioned, and are also prefixed differently. For instance,
__zome_info
becomes__hc__zome_info_1
until its signature changes. This helps end-user hApp managers like Launcher and DevHub manage conductor/app compatibility. If you’re using the HDI and HDK, this will not require code changes; the names of the functions you use will stay the same (e.g.,zome_info
) and simply point to the newest supported underlying host function. You will need to recompile your zomes though, and of course if you’re bypassing HDI/HDK and calling the external functions directly, you will need to change your code. Also note that guest callbacks such asvalidate()
are not yet versioned. (#1781 and holochain-wasmer #90) - New, possibly breaking (hApps): WebAssembly metering has been re-enabled, this time increased from 10 to 100 giga-ops. This means that, after 100 billion WASM instructions, any zome call or callback will terminate, preventing buggy or malicious zomes from using up a machine’s resources. While this is 10× higher than the previous limit, we’re still asking you to test your code to see if it hits this limit. Also note that you’ll need to recompile your zomes, as the means of getting and setting input and output data has changed. (#1781 and holochain-wasmer #88)
- Breaking (admin API, hApp bundles): The
resources
of a bundle are now encoded as byte arrays rather than sequences of numbers, changing the format of hApp bundles. You’ll need to repackage your hApps to update them. (#1723) - Breaking (app API): Each
CellInfo
variant has its own cell type now:Cell
is split intoProvisionedCell
andClonedCell
. Additionally,CellInfo
enum variants are snake-cased during de-/serialization. TheCreateCloneCell
andEnableCloneCell
endpoints now returnClonedCell
instead ofInstalledCell
. The unimplemented endpointSignalSubscription
has also been removed. (#1763) - Breaking (app API): The
AppInfo
endpoint now includes the agent public key used to instantiate the app in its return value. (#1786) - Breaking (admin API): The
StartApp
endpoint, meant as a companion to the already removedPauseApp
, has been removed. (#1785) - Breaking (HDK): Links returned from
get_links
now contain the agent key of the author. Note: this means that otherwise identical links (that is, whose base, tag, and target are the same) are not deduplicated, unlike entries. This was the behaviour already; the newauthor
field merely makes that more explicit. (#1782) - Bugfix: When you tried to install a hApp for an existing agent and one of the cells being created already existed in another hApp, it would allow it. Now it returns an error. This error was unlikely to be encountered in daily use, because the usual method of installing a new hApp involves creating a new agent. (#1773)
- Bugfix: Disabled clone cells were being reenabled on conductor restart; now they stay disabled. (#1775)
- Improvements: The number of warnings in the conductor log has been reduced (#1779) and failed zome call errors have gotten more informative (#1783).
Read the full changelogs for the last two releases.
Known issues
- There are still intermittent issues with re-enabled hApps becoming unresponsive when they’re trying to access their DHTs. The current workaround is to disable and re-enable the hApp again.
- Disabling cells should now make them unresponsive, but some activity will continue in the background, namely they will continue to gossip. We intend to release a fix for this soon, though it may not go into the beta.
- As mentioned above, the new WASM metering might cause CPU-heavy zome functions to terminate early. This is not a bug but a new constraint to test your code against. We’re currently testing it against our own DevHub, which does some CPU-heavy data crunching in its zomes.
Client release notes
Javascript client 0.11.10: Signal handler changes, updated types
Release date: 11 Jan 2023
Holochain compatibility: 0.1.0-beta-rc.2
- New/breaking: App-generated signals now carry the name of the zome they were generated by.
- Breaking: A lot of changes have been made to various admin and app API types.
- Breaking: The final parameter, a signal-handling callback, has been removed from WebSocket-based connection-establishing functions, leaving only the traditional JavaScript-style
.on("signal", cb)
event-registering function. - Changed: All Launcher environment properties are now optional.
- Bugfix: Signals are now only emitted to the
AppAgentClient
that is set up to communicate with the cell the signals came from.
JavaScript client 0.11.11: Async crypto imports
Release date: 14 Jan 2023
Holochain compatibility: 0.1.0-beta-rc.2
- New: Utility functions that depend on crypto are now imported asynchronously.
JavaScript client 0.11.14: Zome name in signals, API documentation
Release date: 19 Jan 2023
Holochain compatibility: 0.1.0-beta-rc.3
- New/breaking: App-generated signals now carry the name of the zome they were generated by.
- Bugfix: The cell provisioning strategy type for clone cells has been fixed.
- New: The API now has auto-generated documentation, available in the GitHub repo.
JavaScript client 0.11.15: Bundle resource serialisation change
Release date: 23 Jan 2023
Holochain compatibility: 0.1.0-beta-rc.4
The changes in this version are all to keep compatibility with the rc.4 release of Holochain.
- New/breaking: In-line binary resources in a hApp bundle passed to
InstallApp
are now encoded in aUInt8Array
rather than an array of numbers. - Breaking:
CreateCloneCell
andEnableCloneCell
return aClonedCell
object instead ofInstallledCell
. - Breaking: The unused admin API endpoint
StartApp
has been removed. - Breaking: Wherever
Cell
was previously returned from an API end point, it’s now a union type that can be either aProvisionedCell
orClonedCell
. - Breaking:
CellInfo
variants are renamed to snake case.
Test framework release notes
Tryorama 0.10.2: AppAgentWebsocket
exposed
Release date: 15 Jan 2023
JavaScript client compatibility: 0.11.11
Holochain compatibility: 0.1.0-beta-rc.2
Along with an update to the JavaScript client, this release brings:
- New: The
AppAgentWebsocket
is available to the local conductor object via aconductor.appAgentWs()
getter function. This is now used by default byScenario.addPlayerWithApp()
. - Removed: In line with the JS client update, signals no longer have
type
anddata
properties.
Tryorama 0.10.3 and 0.10.4: JS client updates
- 0.10.3, released on 16 Jan 2023, updates to the unreleased bugfix JS client 0.11.12.
- 0.10.4, released on 16 Jan 2023, updates to the unreleased bugfix JS client 0.11.13.
Known issues
Tryorama hasn’t yet been updated to support the breaking changes in Holochain 0.1.0-beta-rc.4.
Holochain Developer Training again — this time it’s online!
A lot of people have asked us when there’ll be another dev training course, and specifically when there’ll be an online one. Well, we now have an answer for you: in March! It’ll be a six-day course spread out over two (long) weekends, and will have the same all-day intensive format as the in-person course last July.
This course won’t cover Rust, so it’ll be the best fit if you’re already familiar with Rust and are ready to jump right into Holochain. If you want to learn Rust so you can attend, the Rust website has three great getting-started resources.
Having attended the course in July (mostly to take photos and cook soup), I can say that the instructors have created a really effective course. Their goal is to leave nobody behind, and the lead facilitator Marcus has developed a unique course format over the last decade to do exactly that. He co-founded and led the famous Hack Reactor boot camp, which enjoys a remarkable amount of success equipping devs to be ready to build real software. Marcus and his co-facilitators are really excited to be adapting this format for teaching Holochain.
Learn more about the course on our website and apply here.