FRIDAY 5th Nov 2021
Announcement on Discord tech-announcements channel
We have released GoShimmer v0.8.0: This is a breaking feature release.

THURSDAY 11th Nov 2021
GoShimmer v0.8.1 released (minor update)

SATURDAY 13th Nov 2021. Iota Discord, SmartContracts channel. Evaldas [IF]: We won’t support versions of Goshimmer higher than in the 0.7.7, we’ve frozen it. Wasp is moving to the Chrysalis platform.

MONDAY 8th Nov 2021
SWARM v1.0.0 released

Installing an Iota Goshimmer node on a Netcup virtual server (Ubuntu 20.04) using SWARM

last change to this doc - 13 Nov 2021

NB is not an official Iota site but this guide includes many Iota official links. Please note also that Goshimmer is regularly being updated so these instructions may be out of date. See the official Iota Wiki for the latest and best information. If you want to give feedback then the author of these notes is @dumdave on the Iota Discord server.

If you wish to contribute to the preparation and improvement of this guide and others coming on the website then please demonstrate the efficiency of the Iota network by donating a few Miota to this Iota address, but remember that most credit should go to the clever creators of SWARM, and of Goshimmer itself.


There will (soon) be an additional section on using Goshimmer with Wasp for Smart Contracts.

The Iota Goshimmer node

Iota Goshimmer is the node which is connected to the next version of the Iota network (v2.0), which is fully functional but not yet released. That will make several new features available, including added security and an interesting new concept called Mana. It is also an essential part of the new Iota Smart Contracts system - see also the Wasp guide below for more.

Iota 2.0 runs on its own development network. Everything is experimental and subject to change. Tokens in Iota 2.0 DevNet don't have value.

You should install an Iota Goshimmer node if you are interested in experiencing the future Iota network as it develops. If you are planning on experimenting with Iota Smart Contracts then you may also find having your own Goshimmer node useful - though in the short term there are 'community' Goshimmer nodes that you can attach to instead if that is your main interest. For other nodes see also these guides.

Guide 1. See also: notes on installing an Iota Hornet Node with SWARM
Guide 2. See also: notes on installing an Iota Bee Node with SWARM
Guide 3. Notes on installing an Iota Wasp Node with SWARM

SWARM Script

SWARM is an interactive shell script written using 'whiptail'. This provides a user-friendly menu to perform virtually all of the necessary actions. it is produced by TangleBay. For interest, you can see their Github at the following address, though please follow the guide below for installation etc.

Please note that SWARM can also install two other Iota nodes, Hornet and Bee, as well as Wasp which is for Iota Smart Contracts. See above for more.

Support by Iota and TangleBay

If you are planning to install an Iota node then you are strongly advised to join the Iota Discord which has channels covering each and every aspect of the Iota project and hundreds of enthusiastic members who will give you advice. Tanglebay also has a Discord for more specific issues to do with SWARM - they also offer other useful services. The Iota website is also a good starting point.

Netcup Virtual Server

These notes are based on an installation on a Netcup virtual server running Ubuntu, but obviously are applicable to other similar server setups. Why Netcup, located in Karlsruhe, Germany? The cost for a one year contract was Euro 72.61 (including VAT) as at Oct 2021 - about £62.

Netcup virtual server offering

You may find the process of ordering a little different because of their 'know your customer' procedures. So (a) place your order online. Be sure to complete all of the requested details inc. phone numbers. (b) be contacted while they check who you are. (c) receive an invoice and access to your Customer Control Panel (d) pay the invoice (e) get access to your Server Control Panel. They are quite used to dealing with English speakers so no need to brush up on your German first. All interfaces are naturally available in English!

NB The Server Control Panel is also useful later if you need to reboot the server because you cannot get access. It has a Powercycle option that does the trick! Use the Control option on the left menu.

Netcup Server Control Panel

Installing Ubuntu is trivial. Select the server, go to Media on the lefthand menu then Images on the top menu. On the main screen select the Distribution 'Ubuntu 20.04 LTS' then follow the menu options.

There are many steps needed after that to set up a secure SSH connection, but notes on that are available in many places. These notes continue on from a situation where SSH has already been setup

Uncomplicated Firewall

One thing that is worth mentioning is the need for a firewall, in this case 'ufw'. The key commands at the Terminal are in this form:

sudo apt install ufw => the installation

sudo ufw status => see which ports are allowed and disallowed

sudo ufw allow 22/tcp => or just sudo ufw allow 22 (or deny)

The Iota Wiki has the following information for ports for Goshimmer. This link is also a good starting point if you have 'developer skills' and want to delve into more detail.

Goshimmer ports

Installing SWARM

Check with the SWARM Github site Readme for the latest information if in doubt. That currently suggests using:

curl -sL | sudo bash -

After that, simply typing 'swarm' (quote marks not needed) at any time in Terminal while connected to your server should trigger the script and give you the menu below. Just use the arrow keys and Enter to navigate around. To exit a screen usually you use right arrow to get to Cancel and then press Enter.

Note that this is v0.9.9 but you can expect SWARM to be rapidly evolving. The first option on the main menu 'SWARM Menu' and then option 4 for 'Manage SWARM' allows you to update it as necessary.

SWARM Main Menu

Installing an Iota Goshimmer Node using SWARM

As these notes are concerned with installing an Iota Goshimmer node, select 4 on the front page of the SWARM Menu to get to this:

SWARM Goshimmer Menu

The first step is to Install Goshimmer, so select option 4 to get to this menu.

SWARM Goshimmer Install Menu

Finally, select Option 2 to trigger the installation of Goshimmer. Once that is done, back at the Goshimmer menu shown above select option 1 'Goshimmer Info' which should confirm that there is now a running Goshimmer installation by showing a screen like this one. Note that this shows that the 'txstream' plugin is enabled but usually this is disabled by default.

SWARM Goshimmer Info screen

The Iota Goshimmer Dashboard

Although it cannot be accessed easily yet on a remote server, it is worth looking at the Iota Goshimmer dashboard to show why it is useful. There is usually a login screen first, then it looks like this:

Goshimmer dashboard 1/2

Goshimmer dashboard 2/2

Setting up Reverse Proxy with SWARM

If you plan to set up other Iota nodes like Bee and Hornet then it is best to set up their Reverse Proxy at the same time as the Goshimmer one. SWARM goes through a process that includes using 'letsencrypt' to set up the SSL certificate for the domain you are using, which it ideally only needs to do once if you are using a single host name as below.

For example, if the Netcup setup being used for these notes was given the host name: and if Bee, Hornet, Goshimmer and Wasp were setup on the server they could be accessed by different ports as below.

In other words, the reverse proxy needs to use just the port number to distinguish where to redirect to. More information on this is below, but SWARM will arrange it all with no further input once you have supplied your choice of port numbers and told it the host name.

Hornet dashboard:

Bee dashboard:

Wasp dashboard:

Goshimmer dashboard:

NB Safari has been found to sometimes not display Goshimmer easily, while Chrome does.

NB If you are installing Wasp then there will be a 5th port needed for the Wasp API (e.g. 448)

Returning to SWARM, from the home page of the menu, select Proxy Menu. Be sure to have listed a port number for each of the items that you plan to install. If it is only Goshimmer then you need only one port number.

SWARM Reverse Proxy

IMPORTANT. You first need to configure the port settings before you deploy the reverse proxy, so be sure to first select Option 2 as below.

SWARM Configure Proxy

That takes you to this page, where you repeat the same procedure for any item you have installed or plan to install

SWARM Configure Proxy Goshimmer

For example, for Goshimmer you have this menu page which asks you in turn for the Goshimmer domain and the Goshimmer port. In this case the domain is: and the port is:447

SWARM Configure Proxy Goshimmer settings

Note that there is also a Proxy Settings option for the Landing Page - which is where SWARM can install the following. Note that it is dynamic with three options: Green=active Red=inactive Grey=not installed. Clicking on any of the images should take you to the Dashboard of the relevant node.

SWARM Landing Page 1

Deploying the Reverse Proxy

Now that you have entered the port settings etc, the reverse proxy can be deployed by SWARM. It uses 'nginx' for which the docs are here if you need to dig into what is happening. Further below there is more detail on the relevant files used etc but be aware that if you use SWARM it will reset any changes you make to fit the settings you entered through SWARM.

Returning to the SWARM menu, select 4 for the Proxy Installer as in the screen below.

SWARM Proxy Installer

You then have a menu to select the actual install. If all goes well then this should run and do several things. (a) Get an SSL certificate, (b) Run nginx and set up the reverse proxy by putting files into the /etc/nginx/sites-enabled folder, (c) Set up a landing page to make it easy to navigate between the nodes and to monitor their condition.

SWARM Proxy Installer page 2

Congratulations. You should now have access to the dashboard of your Goshimmer node. There is some more useful information below on the config.json file and the nginx reverse proxy files, but there is also one more useful area of SWARM to note.

SWARM Watchdog

Watchdogs are used to monitor if a system is running and to take appropriate action if not. SWARM implements a watchdog system. Go to the SWARM menu home page and select 1 then you should find the following screen where you select 2 to Configure SWARM.

Configure SWARM page

This page lets you decide whether to enable or disable Watchdog, and if you do enable it then to decide on the settings you'd prefer for various aspects of the installation. It is a very powerful tool so it is wise to spend a little time looking around here, particularly if you wish to make edits of some settings and do not want SWARM resetting them for you.

Configure SWARM Watchdog

This is a typical Watchdog 'info' page on SWARM v0.9.9 which shows just how much Watchdog is able to do.

Typical SWARM Watchdog info

Other Useful Stuff

You do not have to do everything through SWARM. For example, you can start and stop your Goshimmer node with the following commands.

systemctl stop goshimmer

systemctl start goshimmer

You can then look in the Goshimmer log to see how that went. The log is in the same place as the Goshimmer config.json file at /var/lib/goshimmer If you use Nano then Ctrl _ and Ctrl V get you to the end.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

End notes on Goshimmer Installation with SWARM


The Goshimmer Config file

The config file for the installation of Goshimmer is at: /var/lib/goshimmer. That folder contains two useful files: config.json and goshimmer.log. Leaving aside the log file until you need it, the config file looks like this (NB various random changes made to seeds, keys etc out of habit so do not rely on those). Note that the dashboard is on local port 8000, relevant for the nginx reverse proxy file lower down.

  "analysis": {
    "client": {
      "serverAddress": ""
    "server": {
      "bindAddress": ""
    "dashboard": {
      "bindAddress": "",
      "dev": false
  "autoPeering": {
    "entryNodes": [
    "bindAddress": ""
  "dashboard": {
    "bindAddress": "",
    "dev": false,
    "basicAuth": {
      "enabled": false,
      "username": "ghefred",
      "password": "HHgs nh"
  "database": {
        "directory": "mainnetdb",
    "inMemory": false
  "drng": {
    "pollen": {
      "instanceId": 1,
      "threshold": 3,
      "distributedPubKey": "",
      "committeeMembers": [
    "xTeam": {
      "instanceId": 1339,
      "threshold": 4,
      "distributedPubKey": "",
      "committeeMembers": [
    "custom": {
      "instanceId": 9999,
      "threshold": 3,
      "distributedPubKey": "",
      "committeeMembers": []
  "fpc": {
    "bindAddress": ""
  "gossip": {
    "bindAddress": ""
  "logger": {
    "level": "info",
    "disableCaller": false,
    "disableStacktrace": false,
    "encoding": "console",
    "outputPaths": [
   "disableEvents": true,
    "remotelog": {
      "serverAddress": ""
  "metrics": {
    "local": true,
    "global": false
  "mana": {
    "allowedAccessFilterEnabled": false,
    "allowedAccessPledge": [],
    "allowedConsensusFilterEnabled": false,
    "allowedConsensusPledge": []
  "network": {
    "bindAddress": "",
    "externalAddress": "auto"
  "node": {
    "seed": "base64:5+/pAeVqpV9sB6SYjXyqJRPxu01nnLqlx",
    "peerDBDirectory": "peerdb",
    "disablePlugins": [
    "enablePlugins": [
  "pow": {
    "difficulty": 22,
    "numThreads": 1,
    "timeout": "1m"
  "profiling": {
    "bindAddress": ""
  "prometheus": {
    "bindAddress": ""
  "webapi": {
    "bindAddress": "",
    "basicAuth": {
      "enabled": false,
      "username": "goshimmer",
      "password": "goshimmer"
  "broadcast": {
    "bindAddress": ""
  "networkdelay": {
    "originPublicKey": "YSuEdesfzqkzCQMdH1FGv3dsecvDxkd"


_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _


The Goshimmer Reverse Proxy File

As described above, the reverse proxy setup by SWARM uses nginx so the files are in: /etc/nginx/sites-enabled where there is one for each different port setting on the main domain. If you have all of the nodes set by SWARM then it will contain all of these

bee default goshimmer hornet wasp-api wasp-dashboard

An example Goshimmer file is below with a few lines removed to make the remainder clearer. Notice that at the top there is the domain name, and at the bottom it is listening on port 447 which was defined earlier in SWARM as the Goshimmer reverse proxy port. The next most important areas are the 'location' sections. The one with 'dashboard' in does a 'proxy pass' to local port 8083. That was the port set in the config.json file above for the dashboard.

Also see the third location section which redirects the default request on port 447 to the SWARM landing page at /var/www/html/swarm-nodes/ NB This one may not be in the SWARM settings

server {

        server_tokens off;
        ssl_session_cache shared:SSL:32m;
        add_header Strict-Transport-Security 'max-age=63072000; includeSubdomains' always;

        location ~ ^/(info|healthz|data|messages|data|ledgerstate|mana|drng|snapshot|faucet|spammer|tools) {
                include /etc/nginx/goshimmer/webapiauth.conf;
                default_type  application/json;
                proxy_pass http://localhost:8080;
                proxy_pass_request_headers on;
                proxy_set_header        Host $host;
                proxy_set_header        X-Forwarded-Port  $server_port;
                proxy_set_header Connection "keep-alive";
        location ~ ^/(app|ws|api|dashboard|neighbors|explorer|visualizer|drng|mana|chat) {
                include /etc/nginx/goshimmer/dashboardauth.conf;
                proxy_pass http://localhost:8083;
                proxy_http_version  1.1;
                proxy_cache_bypass  $http_upgrade;
                proxy_set_header        X-Forwarded-Port  $server_port;
                proxy_set_header Connection "keep-alive";

        location / {
                gzip off;
                alias /var/www/html/swarm-nodes/;
                index index.html;
                try_files $uri $uri/ =404;

    listen [::]:447 ssl http2;
    listen 447 ssl http2;
    ssl_certificate /etc/letsencrypt/live/;
    ssl_certificate_key /etc/letsencrypt/live/;


_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

While you are here, why not also visit the main area of the website. We are always keen to hear about more International projects to list.

Iota Smart Cities
Iota Identity and Trust
Iota Climate and eHealth
Iota Transport and Mobility