That’s right, Holochain has hit another milestone on its roadmap. I’m excited about this one, because it completes a feature that many application design patterns require: cell cloning. This feature lets an application make copies of a DNA, keeping its functionality but creating a new network. Some or all app users can then join that cloned network. This can be used for private spaces within a larger group, temporary storage, opt-in participation in certain spaces, and things like that.

Holochain release notes

Holochain 0.0.164: Archiving, restoring, deleting clones

Release date: 28 September 2022
HDI compatibility: 0.1.2, 0.1.3
HDK compatibility: 0.0.152, 0.0.153, 0.0.154
Breaking changes: app API, admin API, DNA manifest format

New: This release completes the inner work in Holochain needed to reach the Cell Cloning milestone. Clones can now be archived, restored, and deleted using the conductor APIs — the app API for archiving and the admin API for restoring and deleting. (#1578)

Clones are automatically given role IDs consisting of the original’s role ID plus the suffix .0, .1, .2, and so forth. Because not everyone using an app will be joining the same cloned DHTs or in the same order, these numbers are local to the user and shouldn’t be expected to correspond to the same cloned DNAs across all users. Instead, clones ought to be identified by the clone’s DNA hash, which will be affected by the DNA modifiers passed in when the clone was created.

What’s the difference between archiving a cell and deleting it, and why do you have to use two separate APIs to finish the job? Well, an app should have the power to retire cloned cells as needed (think of a temporary workspace), but in order to protect the user from data loss it shouldn’t have the power to delete those cells’ data, either through software bugs or malice. The admin API endpoints that let a user restore or permanently delete cells will generally be available through the UI of the software controlling the conductor — the Holochain Launcher, for instance.

Breaking: The term ‘DNA modifiers’ is a new one for this release. It describes the network seed, properties, and origin time — everything that affects a DNA’s hash without affecting its running code. (Theoretically, properties can affect the way the DNA behaves, but only in the same way that environment variables affect a shell script.)

As a result of the above work, these modifiers are now bundled together in one DnaModifiers structure wherever you interact with them. All fields are still optional (except for origin_time, which I’ll get to below), but the field modifiers is required because you have to supply a value for at least one field in order to actually modify the DNA. Here’s where you might see this struct:

  • DNA manifests
  • The admin API endpoints RegisterDna and InstallAppBundle
  • The app API endpoint CreateCloneCell

Breaking: The origin_time field in your DNA manifest, now part of the `modifiers` struct, is now required. This field is still optional for the admin API endpoints that install DNAs or clone cells, as they will default the DNA manifest.

Read the changelog.

Holochain 0.0.165: Relaxed RegisterDnaPayload call

Release date: 30 September 2022
HDI compatibility: 0.1.2, 0.1.3
HDK compatibility: 0.0.152, 0.0.153, 0.0.154
Breaking changes: none

This release contains only one small change: When calling RegisterDnaPayload via the admin API, the entire DNA modifiers struct can be omitted if you have no modifiers to give. Previously you had to provide an empty struct. (#1600).

Read the changelog.

Holochain 0.0.166: Breaking change in gossip

Release date: 5 October 2022
HDI compatibility: 0.1.2, 0.1.3, 0.1.4
HDK compatibility: 0.0.152, 0.0.153, 0.0.154, 0.0.155
Breaking changes: network protocol, HDI/HDK, Rust test utilities

  • Breaking (network protocol, HDI/HDK): This release breaks compatibility with the network protocol, making it clearer what the basis of link-add operations should be. The only consequences for you is that users of your hApp won’t be able to use both this conductor and previous conductors in the same DHT, and you may have to add or remove a few .into()s and change your use of AnyDhtHash to AnyLinkableHash if you’re using baseless links in your zome code. Note that this doesn’t break host API compatibility; you can still mix and match zomes and conductors in this compatibility series. (#1601)
  • Breaking (Rust test utilities): There have been some small changes to helpers for creating inline zomes in our Rust-based test utilities. This is unlikely to affect you, even if you have been using Sweettest to write your zome tests. (#1598)
  • Bugfix: Attempting to restore a cloned cell by ID would fail; this is now fixed. (#1603)

Read the changelog.

Known issues

  • We’re still working on gossip performance issues for large entries.
  • The scheduler is still not firing correctly; it’s being worked on.
  • With the version bump of HDI to 0.1.0, developers are noticing some dependency mismatches on new zome projects that prevent them from being compiled. A fix is in the works.

Client release notes

JavaScript client 0.9.0 - 0.9.2: cell cloning

I’m rolling these three releases into one, because 0.9.1 and 0.9.2 are just bug fixes. These releases bring support for the conductor’s new cell cloning features by exposing createCloneCell, restoreCloneCell, and deleteArchivedCloneCells. Keep in mind that the latter two are admin API calls and should only be used if you’re building a UI to control the conductor itself — not just a hApp UI.

Download the client and read the release notes.

Rust client 0.2.0: cell cloning

This release also adds support for cell cloning. Download the client, read the release notes, and read the documentation (app API, admin API).

Tryorama release notes

Tryorama 0.9.0: cell cloning

And once again, we have another dev tool that’s been updated to support cell cloning. Tryorama and TryCP (the orchestrator for multi-conductor tests) now let you write tests that involve this new feature.

Download Tryorama and read the release notes.

Berlin hackathon, Oct 28-30

This will be the first Holochain community hackathon since before COVID set everything sideways! If you’re in the area, these hackathons are wonderful opportunities to meet other lovely devs in the community and create some fun little experiments with a P2P app dev stack.

If you’ve been to a traditional hackathon, this one won’t be like that. Holochain hackathons are much more low-key, collaborative, healthy events where hacking and learning happen simultaneously with rich conversations about everything that matters.

It’s being hosted at the headquarters of Jolocom, longtime supporters of the DWeb movement. (Fun fact: I got to be present for the wedding of Iryna and Joachim, Jolocom’s UX designer and CEO, at DWeb Camp!)

Sign up for the hackathon!

Conclusion (almost)

With the above updates to Holochain and the JavaScript and Rust clients, this completes the Holochain-side work needed for the cell cloning milestone. The only things remaining are support in the Holochain Launcher, and of course implementation in hApps along with developer feedback. So get hacking and tell us what you think!