This week brings a large update to the Holochain documentation, a lot of prep work for upcoming features, a couple bug fixes, and a new way for local agents to talk to a running instance.
- Container HTTP Interface: Communicate with hApps via HTTP Calls
- Documentation: Massive Update to Holochain Guidebook
- Internal WASM Work: Preparation for Large Data Payloads
- Bug Squashing: Links and Agent IDs
- New Container API Functions: Preparation for Admin GUI
- Breaking Changes: Capability Name Removed From All Zome Calls
1. Container HTTP Interface: Communicate with hApps via HTTP Calls
In 0.0.2, we provided a container interface that lets you talk to your locally running instances over WebSocket. In 0.0.3, we added a HTTP interface.
HTTP is well supported by almost all languages and frameworks (even bash scripts); this extends your options for connecting Holochain to other local things, such as GUIs, system scripts, other apps, and IoT devices.
The data format is identical to the WebSocket interface; you just send JSON-RPC calls to an endpoint and receive a response.
This interface was available on the container daemon in 0.0.3, and is now available in the `hc` command-line tool in the `develop` branch. Look for it in 0.0.4.
2. Massive Update to Holochain Guidebook
We’ve released a new Holochain Guidebook, with eight new articles on building your hApp’s DNA code, a completed section on building your DNA from source, and an intro article on writing tests. Our goal for the near future is to keep expanding our documentation so you have all the information you need.
3. Internal WASM Work: Preparation for Large Data Payloads
WASM imposes a limit on how much data can be moved around in memory at once; it’s 64 kb, which is barely enough for a small photo.
Large pieces of data can be chunked up into 64 kb pieces, which is what we intend to do for Holochain.
In preparation, we’ve been retooling memory management for WASM runtime. The code is tidied up and ready for the next steps.
4. Bug Squashing: Links and Agent IDs
Our hApp development teams noticed some strange behavior: requesting an entry’s links from the DHT would sometimes return an empty array. It turned out it was a caching issue, and we’ve already resolved it.
Another bug that surfaced was that agents’ IDs were not being published to the DHT. This prevented agents from adding links to each other’s agent IDs, which is a common pattern for notifications and other people-related activities. You can get the details in this interim bug fix.
You can look for both fixes to land in 0.0.4, OR download and compile the `develop` branch.
5. New Container API Functions: Preparation for Admin GUI
We covered the role of the container in the first Dev Pulse. To recap, it’s the program that holds all your Holochain apps, and connects them to each other, apps and utilities on your machine, and the outside world via the DHT.
It carries a heavy weight of responsibility, but we also want to make it easy to manage your personal Holochain world. We’re working on the admin GUI right now, which is pushing us to expose new functionality via the Container API.
The Container API can be controlled by any app that has the proper privileges on the same machine. We’ve now added these abilities, only available to clients that have admin privileges:
- Install or uninstall a DNA
- Show all installed DNAs
- Create or remove a DNA instances
- Start or stop a DNA instance
- List all created DNA instances
- Find out if a DNA instance is currently running
These things are currently done via a configuration file, but the admin GUI should make this process easy enough for anyone to use. Look for it in 0.0.4 or the `develop` branch.
6. Breaking Changes: Capability Name Removed From All Zome Calls
If you’ve been developing a Holochain app with the Rust HDK, you’ll need to know about an upcoming change that will impact any zome calls you make; we’ve removed the ‘capability’ component from all function calls. This means:
- The function path for JSON-RPC calls through the HTTP or WebSocket interfaces is now `instance_name/zome_name/function_name.`
- The node.js library’s `container.call()` function now takes only four parameters: instance name, zome name, function name, and params object.
- The Rust HDK’s `hdk::api::call` function now takes only four parameters: instance name, zome name, capability token (not yet used), and params object.
This is in preparation for true capability-based security for outside calls to your DNA’s zome functions, which will allow you and your DNA to control what locally running apps and DNAs gain access.
If you’ve used OAuth, it works like a bearer token, but it’s not tied to a particular user account.
This change will only affect you if you’re compiling from the `develop` branch, or if you’re reading this in the future after 0.0.4 is released.