Chromia
Start Building

02 / 06Advanced

Project setup and configuration

Make sure the following prerequisites are in place before you begin:

Set up PostgreSQL database

Set up PostgreSQL database

Rell needs PostgreSQL 16.3. You can use the IDE without a database, but you won't be able to run a node with it. A console or a remote postchain app also runs without a database.

By default, Rell expects this database configuration:

  • database: postchain
  • user: postchain
  • password: postchain

Install

  1. Set up Homebrew by following the Homebrew installation guide.

  2. Install PostgreSQL:

    shell
    brew install postgresql@16brew services start postgresql@16createuser -s postgres
  3. Create and configure the database:

    plsql
    psql -U postgres -c "CREATE DATABASE postchain WITH TEMPLATE = template0 LC_COLLATE = 'C.UTF-8' LC_CTYPE = 'C.UTF-8' ENCODING 'UTF-8';" -c "CREATE ROLE postchain LOGIN ENCRYPTED PASSWORD 'postchain'; GRANT ALL ON DATABASE postchain TO postchain;"
Install Chromia CLI

Install Chromia CLI

Follow these steps to install and update the Chromia CLI.

Prerequisite

You need the following before you start:

  • PostgreSQL database: Follow Set up PostgreSQL database.
  • RELL_JAVA environment: Chromia CLI runs on a Java runtime, version 21 or later. The package managers handle this for you, so no manual setup is required. To choose which Java runtime runs Chromia CLI, set the RELL_JAVA environment variable to the location of a valid Java installation.

Installation

Install Chromia CLI through a package manager, or download it from Chromia CLI Packages.

On macOS, install Chromia CLI (chr) as follows:

  1. Install Homebrew if you don't have it yet:

    bash
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. Register the Chromia repository with Homebrew:

    bash
    brew tap chromia/core https://gitlab.com/chromaway/core-tools/homebrew-chromia.git
  3. Install Chromia CLI:

    bash
    brew install chromia/core/chr
  4. Confirm the installation by printing the version:

    bash
    chr --version

Updating Chromia CLI

To get the newest Chromia CLI, download it from the packages page. If you installed it through a package manager, update it with the command for your platform:

shell
brew updatebrew upgrade chr

Docker

With Docker, you can run a self-contained Linux container that already includes the Chromia CLI. You still need the PostgreSQL database set up.

The published images require Docker to be installed and configured on your host. For Windows, Mac, and Linux instructions, see install Docker in the Docker documentation.

Start the Docker container with Chromia CLI pre-installed

Run the latest Chromia CLI by passing the CLI image name and chr to docker run:

shell
docker run --rm -v $(pwd):/usr/app registry.gitlab.com/chromaway/core-tools/chromia-cli/chr:<latest version> chr

To update or uninstall the Docker image, consult the Docker command line reference.

bash
#!/bin/bash# Allocate a pseudo-TTY one when run in interactive modeif [ -t 0 ] && [ -t 1 ] ; then TTY="--tty"; else TTY=""; fidocker run \  # Sets the network to host to not need to change the database hostname (linux only)  --network=host \  # Set timezone based on system settings (linux only)  -e TZ=$(cat /etc/timezone) \  # Sets process ownership to current user  --user $(id -u):$(id -g) \  --mount type=bind,source="/etc/passwd",target=/etc/passwd,readonly \  --mount type=bind,source="/etc/group",target=/etc/group,readonly \  # Configures ssh-agent (only needed if chr install is called on non-public repositores)  -e SSH_AUTH_SOCK=$SSH_AUTH_SOCK \  --volume "$SSH_AUTH_SOCK:$SSH_AUTH_SOCK" \  --mount type=bind,source="${HOME}/.ssh",target=${HOME}/.ssh,readonly \  --mount type=bind,source="${HOME}/.config/jgit",target=${HOME}/.config/jgit \  # Mounts current folder into the container (Use `Get-Location` on PowerShell)  --mount type=bind,source="$(pwd)",target=/usr/app \  --interactive ${TTY} \  --rm \  registry.gitlab.com/chromaway/core-tools/chromia-cli/chr:${CHR_VERSION:-latest} chr "$@"

First, create a new project with Chromia CLI.

shell
chr create-rell-dapp asset_management
shell
cd asset_management

Remove src/main.rell together with its test file src/test/data_test.rell. In their place, add a folder named main under src.

Add these files to src/main:

  • module.rell
  • entities.rell
  • functions.rell
  • operations.rell
  • queries.rell

Splitting code into files by purpose is standard practice and keeps the project easy to read.

Put the following in src/main/module.rell:

src/main/module.rell
module;

Next, generate an admin keypair:

shell
chr keygen --file .chromia/admin_keypair

Any operation guarded by admin.require_admin(); is authorized with this keypair.

Finish the setup in your chromia.yml file:

  • list the dependencies in a new libs section
  • set the admin_pubkey for the dapp. You can read the key with cat .chromia/admin_keypair.
chromia.yml
blockchains:  asset_management:    module: main    moduleArgs:      lib.ft4.core.admin:        admin_pubkey: x"---YOUR_ADMIN_PUBKEY---"compile:  rellVersion: 0.14.8database:  schema: schema_asset_managementtest:  modules:    - test  moduleArgs:    lib.ft4.core.admin:      admin_pubkey: x"033112FB1F0DF70D1EF4098E2F5F7DCB79BB9AD1570513F6CBDF6F9F4EDAC63771"libs:  ft4:    registry: https://gitlab.com/chromaway/ft4-lib.git    path: rell/src/lib/ft4    tagOrBranch: v1.2.0r    rid: x"E96915FD7C9A5DD4E183D86F4A5B4BB5083A7CC1EDEB1465EDFFC926E67C93F6"    insecure: false  iccf:    registry: https://gitlab.com/chromaway/core/directory-chain    path: src/lib/iccf    tagOrBranch: 1.87.0    rid: x"9C359787B75927733034EA1CEE74EEC8829D2907E4FC94790B5E9ABE4396575D"    insecure: false

Install the dependencies with:

shell
chr install
Written for this site from Chromia’s public course. Code samples are the course’s own.