Holochain Forum

Help us by testing your hApp over the Internet with Holoscape and sim2h!

With the the combination of sim2h and Holoscape we have a fully working Holochain stack again - for the first time since we abandoned the Go prototype in 2018.

This is super exciting and creating a shift for us internally as we are switching over to more and more full-integration user testing of hApps and are looking into dogfooding!

As I describe in yesterday’s blog post about sim2h, we are running a public sim2h switch-board server at wss://sim2h.holochain.org:9000. This allows anybody to run hApps over the internet and easily connect Holochain conductor instances for real-world alpha testing of hApps! The latest Holoscape release is configured to default to sim2h as the networking implementation and to using this public server.

Also, since v0.0.2 (current latest is v0.0.3), Holoscape contains a simple prototype of a hApp store that currently is backed by our hApp-index repository. It allows users to install hApps with a few clicks.

The result is that with Holoscape, hApps can be installed and used over the internet without requiring the user to have in-depth knowledge about Holochain and all the details of how to setup conductors with DNAs and UIs. It should just work.

With this thread I want to invite all of you hApp developers to use Holoscape, sim2h and the hApp-index to share, run and test your hApps over the internet and discuss your results with us here!

What do you need to do?

1. Create your hApp-bundle
If you have a working hApp, consisting of at least one DNA and one UI, the only thing you would need to add, in case you did not yet, is a hApp-bundle file. hApp-bundle files are like a manifest for a hApp, describing the used DNAs, UIs and potentially bridges - and the relationship between all of these. Holoscape can read and install hApp-bundle files. It will follow any links inside the bundles to download DNAs and UIs and only install them if they are not yet installed (-> several hApps can reference the same DNA they both depend on via bridging, Holoscape will not install that dependency twice).

Let’s have a look at an example:

bridges = []

name = "holofuel"
id = "__holofuel"
dna_hash = "QmcnYu8B54tFnJUv68aB3imPRwLxqJH2DQzjkX9Dvxmsf9"
uri = "https://holo-host.github.io/holofuel/releases/download/v0.11.1-alpha1/holofuel.dna.json"

name = "HoloFuel"
id = "holofuel-app"
ui_bundle_hash = "Qm34abcde"
uri = "file:./holofuel-ui.zip"

ui_handle = "holofuel"
instance_id = "__holofuel"

Here we have the simple case of only one DNA/instance and one UI. The DNA is linked to remotely. The UI is expected to be delivered as zip file, next to the bundle. Please note that we have to include the empty array bridges = [] in this case so Holoscape can parse the file. (There is no good reporting in Holoscape yet, a parse error might result in no contents being shown.)

The last section conveys the information that the UI uses the DNA - and it does so under a certain name: holofuel, set with the ui_handle variable. This is the name of the instance the UI assumes to be there when run inside a conductor. The string holofuel will be hard-coded inside the UI in any occurrence to callZome(...).

2. Deploy your hApp-bundle
You can install your hApp in Holoscape from a local file first. You should start with that to test your hApp-bundle and DNA and UI files.

Once you are sure your bundle works, you can send the bundle file to your users via any channel of your choosing. In order to not have to send several MBs of DNA and UI binaries, best upload those files somewhere (like a release on your Github repository) where they become accessible via public URL which you then put into the bundle.

Now, if you want to share your hApp with the world, please create a pull-request to the hApp-index as described in its readme! Once that PR gets merged, your hApp will show up in all Holoscape instances and becomes installable with just two clicks :sunglasses:

3. Come back to this thread and share your findings
Holochain, sim2h and Holoscape, everything is still alpha. But we are getting close to actual usability. We are currently iterating quite quickly and finding new bugs as we try more hApps, and fix those bugs as we go. We expect this to continue for a few more weeks until we can really use most of the existing hApps. But we need that testing and raising of issues in order to know what really is needed for the next increment of usability. Also, we want to find out what the scaling limits of sim2h and the current Holochain core code are - under real-world conditions. This is why I’m reaching out to you folks with this request :slight_smile:

As of the time of this writing, the Holochain crew is working mainly on two issues that you might experience as well (though the actual data, if you do and with what hApp, would be extremely helpful for us!):

  • There is an occasional deadlock of Holochain core that might be logged with IMMORTAL LOCK.
  • In some hApps under some conditions, we can’t seem to see entries on a node that wasn’t online when those entries were created.

These problems might be solved in a few days - and we might have found new ones with your help.

But we had many surprisingly smooth test runs of hApps within the last few weeks, so we think it is a good time to broaden the circle of alpha testing and invite your collaboration and feedback!

Final note: As described here, we want to utilize sim2h’s capability to log network messages for debugging. Holoscape clarifies this in the network setup wizard if the default public server is chosen. Please only use our server if you are ok with us logging network traffic for this purpose.


@EzraWeller @simwilso @mikeg @marcus @newprometheus @petersgrandadventure @guillemcordoba @ViktorZaunders would love to see you all test and provide us feedback. We want this to be a collaborative process.


@Connoropolous, @pospi, @sunyata, @josh, @larky, @dellams, addressing you folks in particular :slight_smile:


Can’t wait to have a functioning app to test :slight_smile: we got caught up with Mailboox in switching to Try-o-Rama, hope to get back on the case soon again!


Let us know if we can help you with setting up Try-o-Rama too, @ViktorZaunders!

1 Like

That would be great! Have you pushed the efforts that we did last session @guillemcordoba and maybe I could help get it going with some assistance from core people?

@abrahampalmer @JhonatanHern @rlkel0 @alx @jakob.winter pulling you into the conversation too! Would be grateful for your feedback, according to your available time of course.

Reporting my findings so far: On Linux (Ubuntu 19.10) I get this in the terminal, over and over:

connectConductor ws://localhost:4435
Passphrase socket not found (yet)

and two dialogues:

Seems like it can’t start the conductor.

@pauldaoust, this looks very much like it can’t start the conductor. I was hoping that the new generic build for Linux that I have added to the release page today (next to the binaries build for Ubuntu 18.04) would work on any distro/version. Can you try running that conductor binary manually? See the path to holochain-linux in your first screenshot.

Just to be sure, you’re trying Holoscape-v0.0.3-alpha-Linux-x64.tar.xz? Not Holoscape-v0.0.3-alpha-Ubuntu-18.04-x64.tar.xz, right?

Oops. Didn’t know the generic linux one was new. Will try and report back :+1:

Weird. The generic Linux build works just fine. (I’m using PeerChat; yay!) When I try to run holochain-linux directly in the Ubuntu build, it says

bash: ./holochain-linux: No such file or directory

but it’s definitely there, and executable, and it looks like an ELF binary. Strange, eh?

@pauldaoust, I guess No such file or directory refers to a shared object that the executable depends on and doesn’t exist on your machine. Which is the reason for having the generic build. You try and verify that you don’t have all the .so files listed by ldd holochain-linux.

But I’m very glad that the generic builds works for you! :slight_smile:

Ahhh interesting. It seems, though, that it’s able to satisfy all eight dependencies it needs (including linux-vdso.so.1, which is not actually a file but something the kernel injects directly).

Hey everyone, is anyone having issues with installing a hApp within Holoscape? I tried several times.
Platform: MacOS

Request: any way the Install hApp can be at the top? Before the hApps option?

Okay, for anyone who tried four times don’t give up! The fifth time worked for me. I successfully installed the bundle, but can’t get past that point. Every time I click on Install, it takes me back to the hApp Store.

  1. At the moment, I have not been successful at running the Peer Chat app.

  2. Another error messages (tried a few times). Will try again tomorrow.

  3. Log error

  4. Javascript error

@dhtnetwork, I believe all those issues are mainly caused by this prototype’s missing UX design :wink:

  1. The red EOF error in the install window is something that happens if there is an issue with the download. This is super simple code that won’t retry if there is a connection issue. Just reopening the details of that bundle is exactly how to combat this now. We might want to make this a bit more sophisticated if this happens a lot - but the real fix will be to use our real hApp store and get those files out of the DHT.

  2. After successful install of a bundle, it doesn’t show you anything. But the fact your screenshot shows Already installed means you’re good. You should find the hApps in the menu called hApps within Holoscape’s main menu you get when clicking on the system tray.

  3. I can’t see an error in your Log error screenshot. Holoscape will display this dialog after 60 seconds if the boot process isn’t finished by then. Did you maybe not respond to the passphrase dialog within 60 seconds? Or maybe you have accidentally closed the dialog. That would explain this as well.

But, yes: We need a proper UX revamp - the current state was me just quickly building MVP views. I’ve met with @ccxxoo yesterday, she is game to bring in her UX skills :star2:
In the mean time, I think we should create a screen-cast showing a quick walkthrough…


Yes! More screencasts! Always! :smile:


Hi @simwilso and @mikeg if you run into any issues with Holoscape and sim2h, feel free to report it there. Nico is observing the Holoscape thread so he can help troubleshoot any issues that arise.

Let us know your experience using Holoscape and sim2h.

I’m on mac 10.14.4 and was able to install holoscape v0.0.3-alpha and install identity manager and peer chat and access these hApps successfully.

Then when I tried to install HoloFuel hApp from a bundle file, it seemed to not install smoothly, so I restarted Holoscape and now I get stuck with error:

holochain process terminated with exit code 101

Now I can’t access any of the hApps in the system tray menu.

I tried uninstalling and installing but not sure how to remove configuration files from previous holoscape install.

Here is the log: https://hackmd.io/@ySAxTuSwS0GOIBNXZlPrsQ/BycCMSSsH

Thats my feedback/experience with holoscope so far.

Amazing work… it feels so close now.

@ThomasMiller, the conductor can’t start because of this:

Starting interfaces…
thread ‘main’ panicked at ‘called Result::unwrap() on an Err value: “Io Error: Address already in use (os error 48)”’, src/libcore/result.rs:1051:5

So one of the interfaces is configured to use an address (port) which is already in use. Could you post your conductor-config.toml from your config directory? On macOS you find it at ~/Library/Application Support/Holoscape-default. You can also have Holoscape open a finder there with Settings-default -> Reveal config directory.

Also, if you delete or rename that directory you will get a fresh installation.

If you have used a previous version that might have rendered your conductor config broken by assigning the same port to two different interfaces which would explain the error you’re experiencing.


Thanks @lucksus

That got me unstuck and allows me to keep exploring.

Here is the old version of the conductor-config.toml from my mac config directory

persistence_dir = '/Users/thomasmiller/Library/Application Support/Holoscape-default'
ui_bundles = []
ui_interfaces = []

id = 'Personas & Profiles-agent'
keystore_file = '/Users/thomasmiller/Library/Application Support/Holoscape-default/storage/HcSCjgYchgGrepk4b7p6rzCfeMk87xjusp5BiC865ci7rEztmpqn4587v5w588a'
name = 'Personas & Profiles-agent'
public_address = 'HcSCjgYchgGrepk4b7p6rzCfeMk87xjusp5BiC865ci7rEztmpqn4587v5w588a'

id = 'Peer Chat Public-agent'
keystore_file = '/Users/thomasmiller/Library/Application Support/Holoscape-default/storage/HcSCjiPahV6en9jhiw7jwMaARHwrsg5xv93p6UggxXW6T7dzn4rDe6a34B8RW6r'
name = 'Peer Chat Public-agent'
public_address = 'HcSCjiPahV6en9jhiw7jwMaARHwrsg5xv93p6UggxXW6T7dzn4rDe6a34B8RW6r'

id = 'holofuel-agent'
keystore_file = '/Users/thomasmiller/Library/Application Support/Holoscape-default/storage/HcSCjVHCWjN6rfr9n5HaeNwjbtnqxqd3uB7NIoIOUheao5iiF5Ae45b5FmAPnsz'
name = 'holofuel-agent'
public_address = 'HcSCjVHCWjN6rfr9n5HaeNwjbtnqxqd3uB7NIoIOUheao5iiF5Ae45b5FmAPnsz'

callee_id = 'Personas & Profiles'
caller_id = 'Peer Chat Public'
handle = 'p-p-bridge'

file = '/Users/thomasmiller/Library/Application Support/Holoscape-default/dna/QmdDugxMbXLNoxiCY93Brnee3cQAReWoA73QyD6Jd9dLVC.dna.json'
hash = 'QmdDugxMbXLNoxiCY93Brnee3cQAReWoA73QyD6Jd9dLVC'
id = 'Personas & Profiles-dna'

file = '/Users/thomasmiller/Library/Application Support/Holoscape-default/dna/QmakmeiLMDFzN54CBUSk2UtvyYEUVdnLB6JPg2LLQ3TTrH.dna.json'
hash = 'QmakmeiLMDFzN54CBUSk2UtvyYEUVdnLB6JPg2LLQ3TTrH'
id = 'Peer Chat Public-dna'

file = '/Users/thomasmiller/Library/Application Support/Holoscape-default/dna/QmcnYu8B54tFnJUv68aB3imPRwLxqJH2DQzjkX9Dvxmsf9.dna.json'
hash = 'QmcnYu8B54tFnJUv68aB3imPRwLxqJH2DQzjkX9Dvxmsf9'
id = 'holofuel-dna'

agent = 'Personas & Profiles-agent'
dna = 'Personas & Profiles-dna'
id = 'Personas & Profiles'

path = '/Users/thomasmiller/Library/Application Support/Holoscape-default/storage/Personas & Profiles'
type = 'pickle'

agent = 'Peer Chat Public-agent'
dna = 'Peer Chat Public-dna'
id = 'Peer Chat Public'

path = '/Users/thomasmiller/Library/Application Support/Holoscape-default/storage/Peer Chat Public'
type = 'pickle'

agent = 'holofuel-agent'
dna = 'holofuel-dna'
id = 'holofuel'

path = '/Users/thomasmiller/Library/Application Support/Holoscape-default/storage/holofuel'
type = 'pickle'

admin = true
id = 'admin interface'
instances = []

port = 4435
type = 'websocket'

admin = false
id = 'Peer Chat-interface'

alias = 'peer-chat-public'
id = 'Peer Chat Public'

port = 10000
type = 'websocket'

admin = false
id = 'Identity Manager-interface'

alias = 'personas-profiles'
id = 'Personas & Profiles'

port = 10001
type = 'websocket'

admin = true
id = 'HoloFuel-interface'
instances = []

port = 10000
type = 'websocket'

state_dump = true
type = 'debug'
exclude = true
pattern = '.*'

exclude = false
pattern = '^lib3h'

exclude = false
pattern = '^holochain'

exclude = false
pattern = '^lib3h'

sim2h_url = 'wss://sim2h.holochain.org:9000'
type = 'sim2h'

path = '/Users/thomasmiller/Library/Application Support/Holoscape-default/conductor_login.socket'
type = 'unixsocket'

consistency = true
trace = true
1 Like