# Sapio Command Line Interface (CLI) The Sapio CLI is a utility tool for using different software components in the Sapio Project. You can use the Sapio CLI to build contracts and run other programs. Sapio CLI reads/writes local project directories for "org.judica.sapio-cli" based on your local system preferences. See https://docs.rs/directories/3.0.1/directories/ for more information. # Config A Sapio Config file (on linux at `~/.config/sapio-cli/config.json`) is a valid JSON file that looks like: ```json { "main": null, "testnet": null, "signet": null, "regtest": { "active": true, "api_node": { "url": "http://127.0.0.1:18443", "auth": { "CookieFile": "/home//.bitcoin/regtest/.cookie" } }, "emulator_nodes": { "enabled": true, "emulators": [ [ "tpubD6NzVbkrYhZ4Wf398td3H8YhWBsXx9Sxa4W3cQWkNW3N3DHSNB2qtPoUMXrA6JNaPxodQfRpoZNE5tGM9iZ4xfUEFRJEJvfs8W5paUagYCE", "ctv.d31373.org:8367" ] ], "threshold": 1 }, "plugin_map": { "example": "95db1a828dd1c9ab18d431eda9f99af46b9913e818277278a60708012f1d41b3" } } } ``` It will be populated automatically on startup if no config exists with default values. Only one network may be active at a time, but each network can have a defined configuration. The command line may be used to specify a different configuration. The emulator_nodes parameter, when enabled, uses a remote server to emulate CheckTemplateVerify-like functionality. You can replace emulators with your own servers (which can be started via the CLI), and you can set up emulation to work with an arbitrary M of N of your choice. Note that this may create issues with script lengths. You can read more about the emulator in [ctv_emulators](../ctv_emulators/README.md). The plugin_map parameter is used to map human readable names to keys for a plugin (you can see a plugin's key with the `cli contract load` command). This enables contracts plugins to be dynamically linked to one another per a user's preferences.