This page shows any breaking changes to our Holochain documentation and how to update your code to match. Holochain Core is very fast moving software; we release often.

The documentation aims to stay up to date with the latest release, so there are occasional breaking changes that will cause you to need to update your code.

We want this to be as easy as possible, so we’ve committed to documenting not just the breaking changes, but the fixes as well.

0.3.7 → 0.3.8

Deprecated the entire Holochain Redux dev docs, rewrote the install guide, and pointed people to Holochain RSM.

0.3.6 → 0.3.7

Bumped to Holochain v0.0.52-alpha2. More textual changes in the tutorials re: consistency checks.

0.3.5 → 0.3.6

Bumped to Holochain v0.0.52. Changes in tutorial to fix s.consistency() no longer working.

0.3.4 → 0.3.5

Preparing for releasing Holochain RSM – added warning banners and a provisional resource guide.

0.3.3 → 0.3.4

Updated for Holochain v0.0.51. No breaking changes.

0.3.2 → 0.3.3

Updated for Holochain v0.0.50 and Nix v2.3.7. No breaking changes.

0.3.1 → 0.3.2

Simplified Holonix installation instructions for macOS and Windows.

0.3.0 → 0.3.1

New header and footer nav. That is all!

0.2.3 → 0.3.0

Introduction of hApp Bundle

This affects:

All Core Concepts tutorials past Hello Gui.

We can now use bundle.toml files to allow hc run to serve our UI and work with sim2h.

Out of date:

All code relating to conductor-cofig.toml. You no longer need to run a python web server. You no longer need to run the Holochain conductor directly.


Run hc directly with sim2h and set the agent name:

hc run --networked sim2h --agent-name Alice
You need to have a bundle.toml file in the root directory that points to your UI (if you have a UI).

0.1.* → 0.2.*

Introduction of Tryorama.

This affects:

All Core Concepts tutorials.

The testing framework has changed from diorama to tryorama.

Out of date code:
const path = require('path')
const tape = require('tape')

const { Diorama, tapeExecutor, backwardCompatibilityMiddleware } = require('@holochain/diorama')

process.on('unhandledRejection', error => {
  console.error('got unhandledRejection:', error);

const dnaPath = path.join(__dirname, "../dist/cc_tuts.dna.json")
const dna = Diorama.dna(dnaPath, 'cc_tuts')

const diorama = new Diorama({
  instances: {
    alice: dna,
    bob: dna,
  bridges: [],
  debugLog: false,
  executor: tapeExecutor(require('tape')),
  middleware: backwardCompatibilityMiddleware,

diorama.registerScenario("Test hello holo", async (s, t, { alice }) => {
  const result = await"hello", "hello_holo", {});
  t.deepEqual(result, { Ok: 'Hello Holo' })
New code:
const path = require('path');
const tape = require('tape');

const {
} = require('@holochain/try-o-rama');

process.on('unhandledRejection', error => {
  console.error('got unhandledRejection:', error);

const dnaPath = path.join(__dirname, "../dist/cc_tuts.dna.json")
const orchestrator = new Orchestrator({
  middleware: combine(singleConductor, tapeExecutor(tape)),
  globalConfig: {
    logger: false,
    network: {
      type: 'sim2h',
      sim2h_url: 'wss://',
const config = {
  instances: {
    cc_tuts: Config.dna(dnaPath, 'cc_tuts'),

orchestrator.registerScenario('Test hello holo', async (s, t) => {
  const {alice, bob} = await s.players({alice: config, bob: config}, true);
  const result = await'cc_tuts', 'hello', 'hello_holo', {});
  t.deepEqual(result, { Ok: 'Hello Holo' })

There are a lot of differences here; but one thing to watch out for is that you now need the instance name in the zome call.

- const result = await"hello", "hello_holo", {});
+ const result = await'cc_tuts', 'hello', 'hello_holo', {});

Was this helpful?