The Holochain development team is moving to regular weekly releases of the Holochain conductor, HDK, and supporting libraries. These regular releases will bring incremental improvements in stability, performance, and developer ergonomics. This comes at the right time, because Dev Camp 8 is starting on September 28th – less than two weeks! Yes, it’s finally here!
This week’s release, Holochain v0.0.106, is a small one in terms of developer-facing features, bringing a new admin API endpoint for hApp uninstallation and the first iteration of a ‘web hApp bundle’ format. Along with some low-level features… just small ones, like, you know… sharding (!!!)
[ EDIT 17 Sept: The changelog has one correction; relaxed chain top ordering isn't available yet. ]
[ EDIT 20 Sept: I've added two breaking changes to the changelog; app developers take note! ]
Dev Camp 8: huge turnout, exciting curriculum
Yes, the community-led Dev Camp 8 is finally about to happen. We’ve all been astounded by the response — the organisers have received over 1500 applications from all over the world. That’s seven times more than last Dev Camp! This is a nice problem to have, but it has meant that the organisers have had to figure out how to deal with so many more participants. So they’ve taken the past couple months to strategise with the developer community and Holo organisation to make sure it’s a success for all.
It also adds some new features, which aren’t required for Dev Camp but are required for a couple of tools that will be used in Dev Camp. These tools are Launcher, an end-user hApp runner, and create, the beginning of a new RAD scaffolding tool. In order to support Launcher, the conductor admin API now has an `UninstallApp` endpoint and there’s a new web hApp bundle format.
To me, Launcher, create, and web hApp bundling feel like big news. They aren’t ready for prime time yet, though, so I’ll share more about them later.
Still time to register for Dev Camp!
Yes, that’s right. Even with the huge number of applications, and even though it starts in only 12 days, you can still join the Dev Camp. It’s free, the curriculum sounds really fun, and it’s got a great crew of leaders, facilitators, teachers, and mentors. It’ll last six weeks (with a break in the middle), with weekly live sessions for Europe time zones and support sessions for Asia-Pacific and the Americas. There’ll also be a Discord server where you can talk with participants and support folks any time you like.
I’ll write more about the Dev Camp next week, but in the meantime — go and sign up!
Holochain v0.0.106 release notes
Sharding has landed (sort of)
The sharding code is all written, integrated, and ready to be turned on with a configuration setting. When it’s disabled, a Holochain conductor operates as it always has — in ‘full-sync’ mode, with every node storing a copy of every piece of data. This is how Holochain will be deployed on HoloPorts until we can test sharding further.
If you want to experiment with sharding, here’s how to turn it on in the conductor config:
network:
# … transport config excluded …
tuning_params:
gossip_dynamic_arcs: true
And if you’re feeling extra adventurous, there are other gossip tuning params you can play with too.
Web hApp bundles
There already is a hApp bundle format, which bundles up all the DNAs necessary for the Holochain side of a full hApp. You can use the hc app
command, which takes a hApp manifest file and produces a bundle with the extension .happ
.
This new web hApp bundle and manifest format (link to source code; documentation hasn’t been published yet) adds the ability to include a zip file full of web UI assets, along with the rest of the hApp, in a bundle with the extension .webhapp
. This will be used as a common format for both Holo hosting and the Launcher.
Full changelog
- [ EDIT: This feature is included, but a merge issue caused it to be inactive. It'll be reactivated in next week's release. ] Relaxed chain top ordering (#939 and #941): If you’ve been getting
HeadMoved
errors when making lots of zome calls from your UI, this new feature could be helpful. Rather than having to call that function again if another function has beaten it, it allows you to specify that its batch of writes can be ‘rebased’ on the new chain top. This is an option for any entry logic that doesn’t require strict source chain ordering. WebAppManifest
andhc web-app
(#973): This is the beginning of a bundle format for hApps that contain both a DNA bundle and a web-based UI. This format will be used by both the upcoming Launcher and the Holo Hosting App.UninstallApp
(#969): This admin API endpoint had already been stubbed out; now it’s functional. It allows hApp managers like the Launcher to completely remove a hApp.- Sharding compiled in (#943): No longer hidden behind a feature flag, sharding can now be turned on with the conductor configuration parameter
network.tuning_params.gossip_dynamic_arcs
. - [ EDIT: Added to changelog 20 Sept ] Hashes are no longer serialised to Base64 strings by default; if you depend on this behaviour, add the
"encoding"
feature flag to theholo_hash
dependency in your zomeCargo.toml
file:
holo_hash = {version = "0.0.6", features = ["encoding"]}
- [ EDIT: Added to changelog 20 Sept ]
Timestamp
structs have changed. If your zome code or client code directly interacts withTimestamps
and their serialised representations, you may need to do some refactoring. Otherwise, you should only need to recompile your zomes against HDK 0.0.106. - [ EDIT: Added to changelog 21 Sept ]
sys_time
now returns aTimestamp
rather than aDuration
.
Documentation Drive follow-up: new goodies for new devs
A couple months ago, community dev Connor Turland instigated a Documentation Drive. (And I’m so grateful to him.) Here are three exciting things that came out of that work.
Updated Application Architecture
Of all the Core Concepts, the one I was least satisfied with was Application Architecture. I felt like it didn’t do a great job of explaining how hApps are put together and run, and Connor agreed. So he rewrote it, I massaged it and added new pictures, and now you can read the updated version. If the Holochain stack never made sense to you before, it probably will now! (Also, it doesn’t talk about donuts anymore. 🍩 Hopefully this more straightforward description of agent-centricity is easier to understand.)
hApp development tutorials
There are two getting-started tutorials that show you, in actual code, how to create a hApp. happ-client-call-tutorial
, written by Connor and Jost Schulte, shows you how to connect a UI to a hApp (in both TypeScript and Rust). There's also its companion happ-build-tutorial
, written by many in the community, that walks you through the basics of structuring, writing, compiling, and running a hApp.
[ EDIT: Previously I said Connor was solely responsible for happ-build-tutorial
. ]
Holochain community wiki
A community knowledge repository has been sorely needed for a while. Previously, devs have had to comb through forum posts, Open Dev blog posts, GitHub readmes, and Dev Pulses to find good quality information. Now there’s a place to put the best of it! The community wiki already has a number of great guides and howtos, and there’s always room for more contributions. It’s not technically an official resource, but the folks writing articles in there are so skilled that it’s probably more useful than the official dev portal right now 😊
Holochain In Action videos
Holochain In Action is a community of developers actively building on and learning about Holochain. I’ve mentioned them before, and invited you to join the community, but I realised that their weekly session recordings really ought to be shared.
So let’s start with the most recent one, session 17. It showcases the Elemental Chess hApp and dives into the code, explaining how it implements player profiles and game invitations. If you’re working on a hApp with a social component, especially a game hApp, this would be a good one to watch.
Wow! That feels like plenty for this week. I have a feeling there will be an equal amount really soon — the developer ecosystem is growing faster than I can keep up with it!
Cover photo by Leon Contreras on Unsplash