Indy File Folders Structure Guideline

Indy-node service works with some files and folders on the file system. We need to be careful when selecting this files and folders or adding new ones.

1. Use system-specific files and folder for indy-node service

As of now, we support indy-node service (using systemctl) on Ubuntu only. But in future we will support more platforms (CentOS, Windows Server, etc.)

So, we should follow the following principles:

  • Use system-specific folder for storing config files

    • Indy-config files
    • other config files (such as service config)

    Ubuntu: /etc/indy

  • Use system-specific folder for storing data, such as

    • ledger (transaction log, states)
    • Genesis transaction files
    • Node keys (transport and BLS)

    Ubuntu: /var/lib/indy

  • Use system-specific folder to store log files

    Ubuntu: /var/log/indy

  • Avoid using /home folder for indy-node service

2. Organize file folders to support possibility to work with multiple networks (live, test, local, etc.)

We may have multiple Networks (identified by different genesis transaction files) installed for the same indy-node service. The file structure should support it.

  • The current Network to work with is specified explicitly in the main config file (NETWORK_NAME=):

    Ubuntu: /etc/indy

  • Separate config files for each Network

    Ubuntu: /var/lib/indy/{network_name}

  • Separate data for each Network

    • Separate ledgers (transaction log, states)
    • Separate genesis transaction files
    • Separate Node keys (transport and BLS)

    Ubuntu: /var/lib/indy/{network_name}

  • Separate log files for each Network

    Ubuntu: /var/log/indy/{network_name}

3. Set proper permissions for files and folders

Make sure that all data, and, especially, keys have proper permissions. Private keys can only be read by the user the service is run for (indy user usually)

4. Provide a way to override config and other data for different networks

Each Network may have its own config extending base config.


  • /etc/indy - base config
  • /etc/indy/{network_name} - config extension

5. Client should use /home folder

Client doesn’t need a service, and should use its own home directory for files with proper permissions.

Indy-sdk uses ~/.indy_client

6. Separate node and client folders

Client and Node should be two independent products not sharing any common files/folders

7. It should be possible to work with both node and client (libindy) on the same machine

We may install and work with both node and client on the same machine independently

8. It should be possible to run client (libindy) for multiple users

We may have multiple users working with client code on the same machine. Each user must have separate data and key files with proper permissions.