CLI is a tool for deploying a complete stack locally, for demonstration, testing, or development purposes.


Before using the CLI, make sure you have the following dependencies installed on your local machine:
  • Docker installed on your system but Podman works, too.
  • Go Compiler to run the CLI by its source code.
The CLI is only available from the codebase at the moment. Releasing compiled binaries are planned and in the works.
When you use Podman, make sure you have the network_backend set to netavark, if you have an older installation (before 4.0 released) as CNI network backend doesn't support name resolutions we use.
You also have to get the aardvark-dns plugin for the same reason.
If you use rootless containers, set your DOCKER_HOST environmental variable correctly, because if it's missing, Docker will assume it's /var/run/docker.sock and you can get misleading errors from it.

Run CLI from codebase

Step 1: By using command line – posix shells, Git Bash or PowerShell –, pull's GitHub repository by executing git pull, if you don't already have the repository on your local machine you have to clone the repository by executing git clone
Step 2: Open the project folder, and execute make up – alias to go run ./golang/cmd/dyo up – and wait until you get back the command prompt. It should take a few minutes the first time running, as it will pull a few docker images.
Step 3: Enter localhost:8000 in your browser's address bar. You're ready to use
dyrectorio's command-line interface (CLI) lets you run a complete dyrectorio development environment locally with the following services: UI Service (crux-ui), Backend Service (crux), PostgreSQL databases, Authentication, Migrations, and SMTP mock mail server. The CLI also runs the migration services. The default container names are listed below:
  • dyrectorio-stack_crux
  • dyrectorio-stack_crux-migrate
  • dyrectorio-stack_crux-ui
  • dyrectorio-stack_kratos
  • dyrectorio-stack_kratos-migrate
  • dyrectorio-stack_mailslurper
  • dyrectorio-stack_crux-postgres
  • dyrectorio-stack_kratos-postgres
  • dyrectorio-stack_traefik
The dyrectorio-stack prefix can be changed in the settings.yaml file of the application.
When you contribute to dyrectorio, you can turn off crux and crux-ui with the global options listed below or overriding the values in the settings file.

CLI commands

dyo [global options] command [command options] [arguments...]
up, u Run the stack
down, d Stop the stack
help, h Shows a list of commands or help for one command
--config value, -c value configuration location [$DYO_CONFIG]
--disable-crux, --dc disable crux(backend) service (default: false) [$DISABLE_CRUX]
--disable-crux-ui, --dcu disable crux-ui(frontend) service (default: false) [$DISABLE_CRUXUI]
--help, -h show help (default: false)
--version, -v print the version (default: false)
--write, -w enables writing configuration, storing current state (default: false)
As you seen above you can start the application with the up subcommand, after you finished your work, you can stop and remove the containers with the down subcommand.
Running the stack again without stopping it will result in containers stopped, removed then recreated.


The CLI generates a settings.yaml file containing the default configurations if the program doesn't find a configuration on the given path, or a default path if there isn't. Default paths is depending on your OS, you can find these on:
  • Linux: $XDG_CONFIG_HOME/dyo-cli/settings.yaml where the $XDG_CONFIG_HOME usually resolving to $HOME/.config.
  • Mac OSX: $HOME/Library/Application Support/dyo-cli/settings.yaml.
  • Windows: %AppData%/dyo-cli/settings.yaml.
The settings.yaml file contains the following:
# This option directly affects the docker images' tags.
# This applies to kratos, crux, and crux-ui. Currently we offer stable and latest tags.
version: latest
# Turns off backend and the migration that belongs to it.
crux_disabled: false
# Turns off frontend.
crux-ui_disabled: false
# The network's name where the containers will run. Agent will be installed here by
# agent's install script.
network-name: dyrectorio-stack
# Adjusts container and volume names' prefixes.
prefix: dyrectorio-stack
# The following settings are mostly self-describing, you can see the default values
# here. If an option isn't available here, the CLI will use a predefined default,
# where the secrets will be a new 32 character long random string. The ports here
# will be exposed for your convenience, if theres any local address that is bound to a
# defined port here, feel free to change it, and restart the CLI.
# Timezone of the application, affects both crux and crux-ui.
timezone: Europe/Budapest
crux-agentgrpc-port: 5000
crux-grpc-port: 5001
crux-ui-port: 3000
crux-secret: iX4B6KjrzKU7Bz6vg2jp89tIkAgZwaL7
cruxPostgresPort: 5432
cruxPostgresDB: crux
cruxPostgresUser: crux
cruxPostgresPassword: RbK2fDQ499lDJFwsFcFS5aqj9BEISFlU
traefikWebPort: 8000
traefikUIPort: 8080
traefikDockerSocket: /var/run/docker.sock
traefikIsDockerSocketNamedPipe: false
kratosAdminPort: 4434
kratosPublicPort: 4433
kratosPostgresPort: 5433
kratosPostgresDB: kratos
kratosPostgresUser: kratos
kratosPostgresPassword: ySW7ae1QRvi63RA2yBwJZwYQunI5CPNX
kratosSecret: B0VLli7yRs9hxdai7R2HCpZDHuf6mJcy
mailSlurperPort: 4436
mailSlurperPort2: 4437
Please note, this file stores some state too, in this case passwords and secrets. These have to match to use the installation multiple times as with bad passwords you won't be able to update or use the databases.

Get help

To get usage tips and learn more about available commands from within CLI, run the following:
go run . help
If you have additional questions or ideas for new features, you can start an issue or a new discussion on our CLI’s open-source repository. You can also chat with our team on Discord.
We’d love to hear from you!