It has been a very long time since the last Dev Pulse — almost three months, in fact! And you know what? It’s kind of been a good thing! In keeping with our promise, the last four releases of Holochain 0.1 have had few breaking changes for hApp developers and users, so the changelogs haven’t had much to report on. [Editor: 0.1.4 has had some breaking changes that you should know about; read the release notes below.] This has meant that devs can keep focusing on the thing that matters most to them — their app — rather than worrying about how we’re changing things on them yet again this week.

And things won’t be changing much even in Holochain 0.2. There are very few breaking changes, and almost none of them will be in your hApp code. With that said, the most significant breaking change is the replacement of QUIC transport with WebRTC — but remember that, true to our six-month promise, we’ll still keep running our QUIC proxy relay server for Holochain 0.1 until July 15th, and our bootstrap server now supports both QUIC and WebRTC.

Holochain 0.2.0’s first release candidate was published on 16th March, the full-feature release candidate 0.2.0-beta-rc.4 was published on 13 April, and the final release will be published on 27 April. I’ll share all the release notes on that date.

With that, let’s see what’s happened since 0.1.0 was released!

Holochain 0.1.1 to 0.1.4: Bug fixes and backports

Edit: After publishing some small breaking changes in 0.1.4, we received reports that it unexpectedly introduced issues in scaffolding and deployment. This happened because some structs were moved from holochain_integrity_types to hdi, which caused crate dependency resolution issues that bubbled up into our development environment build process. For now, we recommend that you do not upgrade your hApps or development environment to 0.1.4, and wait for the upcoming 0.1.5 release instead.

Rather than report on each release individually, I’ll just give you the full list of changes for all four releases. Although we’re still on the 0.1.x series, we did introduce two very minor breaking changes which should take mere moments of code refactoring.

  • Breaking (hApp manifests): The version field of a DNA section in a hApp manifest has been renamed to installed_hash and is now a single optional hash rather than an optional list of hashes. This field can be used to verify the integrity of a DNA at hApp install time. (#2157, #2180)
  • Bugfix, breaking (HDI, host API): Validation of DHT operations for private entries would fail for the StoreEntry op which would put the entry in the author’s own store. This has now been fixed. As the changelog says, this is a ‘slightly’ breaking change because FlatOp (previously OpType, see below) has some new enum variants that your validation code may need to match against. The compiler will tell you if your code needs to be refactored! (#1910)
  • New: OpType is renamed to FlatOp, and the Op::to_type() helper is renamed to Op::flattened(). This enum is used in validation callback to simplify otherwise complex switch code paths. The old names still exist as aliases to the new ones, so this isn’t a breaking change yet. (#1909)
  • New: Certain conductor API methods that can return CellMissing errors now return CellDisabled when the cell is present but disabled. (#2092)
  • New: Enabling or disabling a clone cell is now idempotent — if you try to enable an already enabled clone or disable an already disabled one, it’ll return a successful result rather than an error. (#2093)
  • New: The conductor can now be compiled to support tx5, the new WebRTC-based transport protocol to be used in 0.2.x. Note: This doesn’t mean that 0.1.x conductors can talk with 0.2.x, and is mostly for development purposes. Please don’t use this if you’re compiling your own conductor! (#1741)
  • Performance: When the last instance of a hApp is removed from a conductor, the shared DHT data is deleted to clear storage space. (#1805)
  • Performance: Performance of zome calls, particularly remote ones, has improved dramatically due to optimisation of capability lookups. Previously, mere hundreds of calls would show a noticeable slowdown as more commits were made to the source chain; now thousands of commits only affect zome call time by about a millisecond. (#2097)
  • Bugfix: When uninstalling the last instance of a hApp, locally stored DHT data is now cleaned up. (#1805)
  • Bugfix: Attempts to create duplicate clone cells (that is, clones of a DNA within one hApp with identical DNA hashes) are now rejected. (#1997)
  • Bugfix: The name field in a DNA manifest or definition incorrectly affected the DNA hash; this has now been fixed. (#2099)
  • Bugfix: The network seed was ignored for DNA roles whose provisioning was set to None in the hApp manifest at install time; this bug has been fixed. (#2102)

Read the full changelog for the 0.1 series.

JavaScript client 0.12.1 to 0.12.5

  • Update: Changes to the admin API’s NetworkInfo endpoint have been integrated, making JS client 0.12.1 the first release fully compatible with Holochain 0.1. (#172)
  • Development: The development environment for working on the repo has changed from nix-shell to a Nix flake; if you’re contributing to client development, you can now use nix develop in the root of the repo. (#175)
  • Improvement: When a websocket closes, reject pending API requests. (#178, #179)
  • Bugfix: Attempting to call a zome function by role name when giving a provenance now fails with an error. (Note: this change may be reverted in a future release.) (#176)

Rust client 0.3.1

  • Development: The development environment for working on the repo has changed from nix-shell to Nix flakes. (#12)

Tryorama 0.11.1 and 0.11.2

  • Development: Similar to the client repos, the development environment for working on this repo has changed to a Nix flake. (#166)
  • Improvement: Conductor logging now outputs at the info log level. (96bd726)

Launcher 0.9.1 to 0.9.3

These releases bring all sorts of UX improvements:

  • Improvement: The Launcher can now auto-update to the newest version.
  • Improvement: Windows .msi installer files are now code-signed.
  • Improvement: A 404 page is now shown for an improperly formed UI (that is, one without an index.html file).
  • Improvement: Support for multiple languages has been added, with German as the first alternative to English.
  • Improvement: The cell info card now shows the network seed.
  • Improvement: The arrival of new data in the app library is more obvious.
  • Bugfix: A bug on macOS has been fixed where Holochain processes would keep running after the Launcher was quit.

Read the release notes for full changelogs and known existing issues.

Around the community

Folks, the thing I’m most excited about right now is not beta releases — it’s the ways in which the developer ecosystem is growing and blooming (I guess I’ve got springtime on my mind again).

Developers are busy learning how to build hApps — the Holochain Foundation, in collaboration with our education partner Mythosthesia, ran an online course last month, and the quality of commitment among participants was encouraging. These folks are going places. There are already some exciting demo projects and plans for mature apps built on Holochain.

We’re starting to see in-person meetings happen around the world; there was a Holochain hackathon in Copenhagen and Neighbourhoods meetups in Wellington and Auckland. Online events like the Holochain in Action co-learning meetings are starting again too.

The most recent Holochain in Action featured a demo of Neighbourhoods’ Social Sensemaker DNA.

This coincides with the first public release of the first developer preview of their Social Sensemaker. You can read through the documentation for creating a sensemaker-powered hApp or watch these five videos to get a taste of what it’s about.

It’s exciting to see the developer community warming up! Sprouts are emerging!

Cover photo by Marc Schulte on Unsplash