> ## Documentation Index
> Fetch the complete documentation index at: https://dubhe.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# CLI - Dubhe

> Learn how to use the dubhe cli.

# Dubhe CLI for Sui

Before getting started with Dubhe CLI, please install the required dependencies:

```bash theme={null}
pnpm install -D @0xobelisk/sui-cli @0xobelisk/sui-common
```

> Note: @0xobelisk/sui-common contains essential configuration type definitions like DubheConfig.

## The Dubhe CLI

The Dubhe CLI is a development toolkit for building and managing Dubhe projects on the Sui blockchain.

Core features:

1. [`schemagen`](#schemagen): Generate Dubhe schemas automatically from your store schemas configuration
2. [`publish`](#publish): Deploy your Dubhe projects to any Sui network (mainnet/testnet/devnet/localnet)
3. [`upgrade`](#upgrade): Upgrade your Dubhe Move contracts
4. [`node`](#node): Manage local Sui node for development
5. [`faucet`](#faucet): Interface with Sui faucets to fund addresses on testnet/devnet/localnet
6. [`generate-key`](#generate-key): Generate a new account key pair and save it to a .env file
7. [`check-balance`](#check-balance): Check the balance of the account
8. [`config-store`](#config-store): Store configuration for the Dubhe project
9. [`build`](#build): Build Dubhe Move contracts
10. [`test`](#test): Run tests for Dubhe contracts
11. [`doctor`](#doctor): Check development environment and install required tools
12. [`wait`](#wait): Wait for services to be ready
13. [`watch`](#watch): Watch configuration file for changes
14. [`switch-env`](#switch-env): Switch between different network environments
15. [`convert-json`](#convert-json): Convert Dubhe config to JSON format
16. [`load-metadata`](#load-metadata): Load package metadata
17. [`info`](#info): Display account and network information

## Installation

The CLI should be installed as a project dependency rather than globally. When you create a new project using `pnpm create dubhe`, the CLI is automatically added as a dev dependency.

## Using the CLI

Some commands expect a dubhe config in the same folder where the CLI is being executed. This includes `schemagen` and `publish`.

`faucet` and `node` can be executed anywhere.

## Commands

### `schemagen`

Generate Store libraries from a `dubhe.config.ts` file. See the [Store Config and `schemagen` documentation](./schemas/config) in the Store section for more details.

```bash theme={null}
dubhe schemagen [--config-path <path>] [--network <network>]

Options:
  --config-path    Path to config file (default: "dubhe.config.ts")
  --network        Target network (mainnet/testnet/devnet/localnet)
```

### `publish`

Deploy Dubhe contracts to Sui network. This tool will use the `dubhe.config.ts` to detect all systems and schemas to deploy them to the specified network.

Before deploying the contract, please ensure:

1. You have sufficient tokens in your account for deployment fees
2. For testnet/devnet/localnet deployments, you can get test tokens via `dubhe faucet`
3. For localnet deployments, ensure your local node is running

```bash theme={null}
dubhe publish --network <network> [--config-path <path>] [--gas-budget <number>]

Options:
  --network        Target network (mainnet/testnet/devnet/localnet) (default: localnet)
  --config-path    Path to config file (default: "dubhe.config.ts")
  --gas-budget     Optional gas budget for transaction
```

### `upgrade`

Upgrade deployed Dubhe contracts.

```bash theme={null}
dubhe upgrade --network <network>

Options:
  --network        Target network (mainnet/testnet/devnet/localnet)
  --config-path    Path to config file (default: "dubhe.config.ts")
```

### `node`

Manage local Sui node using the official `sui` binary.

```bash theme={null}
dubhe node [--data-dir <path>] [--force]

Options:
  --data-dir    Path to the data directory (default: ".chk")
  --force       Force restart: stop existing node and remove data directory (default: false)
```

Local RPC endpoint: `http://127.0.0.1:9000`

Note: Make sure your local node is running properly before using other commands that require a local node (e.g., `dubhe publish --network localnet`).

### `faucet`

Request test tokens from the Sui faucet. The default faucet service automatically gives test tokens to accounts in `.env`.

```bash theme={null}
dubhe faucet --network <network> [--recipient <address>]

Options:
  --network     Network to request tokens on (testnet/devnet/localnet) (default: localnet)
  --recipient   Optional recipient address (uses PRIVATE_KEY env if not specified)
```

### `generate-key`

Generate new account keypair.

```bash theme={null}
dubhe generate-key [--force] [--use-next-public]

Options:
  --force           Force generate new keypair (default: false)
  --use-next-public Use NEXT_PUBLIC_ prefix for client-side usage (default: false)
```

### `check-balance`

Check account balance on specified network.

```bash theme={null}
dubhe check-balance --network <network>

Options:
  --network    Network to check balance on (mainnet/testnet/devnet/localnet) (default: localnet)
```

### `config-store`

Store configuration for the Dubhe project.

```bash theme={null}
dubhe config-store --network <network> [--config-path <path>] [--output-ts-path <path>]

Options:
  --network          Network to store config for (mainnet/testnet/devnet/localnet)
  --config-path      Path to config file (default: "dubhe.config.ts")
  --output-ts-path   Output path for generated TypeScript config (e.g., ./src/config/generated.ts)
```

### `build`

Build your Dubhe Move contracts.

```bash theme={null}
dubhe build --network <network> [--config-path <path>] [--dump-bytecode-as-base64]

Options:
  --network                Target network (mainnet/testnet/devnet/localnet)
  --config-path           Path to config file (default: "dubhe.config.ts")
  --dump-bytecode-as-base64  Output bytecode as base64
```

### `test`

Run tests for Dubhe contracts.

```bash theme={null}
dubhe test [--config-path <path>] [--test <test_name>] [--gas-limit <limit>]

Options:
  --config-path    Path to config file (default: "dubhe.config.ts")
  --test          Name of specific test to run
  --gas-limit     Set gas limit for test (default: "100000000")
```

### `doctor`

Check development environment and install required tools automatically.

```bash theme={null}
dubhe doctor [--install-all]

Options:
  --install-all    Automatically install all missing tools (default: false)
```

The doctor command checks for:

* Node.js version compatibility
* Docker service availability
* Required development tools (sui, postgres, etc.)
* Port availability for local services
* Network connectivity

### `wait`

Wait for service(s) to be ready before proceeding.

```bash theme={null}
dubhe wait [--url <url>] [--localnet] [--timeout <ms>] [--interval <ms>]

Options:
  --url        URL to wait for (single service)
  --localnet   Wait for all dubhe localnet services (default: false)
  --timeout    Timeout in milliseconds (default: 180000)
  --interval   Check interval in milliseconds (default: 1000)
```

Examples:

1. Wait for a specific service:

```bash theme={null}
dubhe wait --url http://localhost:4000
```

2. Wait for all localnet services:

```bash theme={null}
dubhe wait --localnet
```

### `watch`

Watch configuration file for changes and automatically run schemagen.

```bash theme={null}
dubhe watch
```

This command monitors `dubhe.config.ts` for changes and automatically runs `dubhe schemagen` when the file is modified.

### `switch-env`

Switch between different network environments.

```bash theme={null}
dubhe switch-env --network <network>

Options:
  --network    Target network (mainnet/testnet/devnet/localnet) (default: localnet)
```

### `convert-json`

Convert Dubhe configuration to JSON format.

```bash theme={null}
dubhe convert-json [--config-path <path>] [--output-path <path>]

Options:
  --config-path    Path to config file (default: "dubhe.config.ts")
  --output-path    Output path for JSON file (default: "dubhe.config.json")
```

### `load-metadata`

Load package metadata for a deployed contract.

```bash theme={null}
dubhe load-metadata --network <network> [--config-path <path>] [--package-id <id>]

Options:
  --network        Network to use (mainnet/testnet/devnet/localnet) (default: localnet)
  --config-path    Path to config file (default: "dubhe.config.ts")
  --package-id     Package ID to load metadata for (optional)
```

### `info`

Display account and network information.

```bash theme={null}
dubhe info --network <network>

Options:
  --network    Network to check (mainnet/testnet/devnet/localnet) (default: localnet)
```

This command shows:

* Current network
* Account address
* Account balance

## Environment Setup

Some commands require environment variables to be set:

* `PRIVATE_KEY`: Required for deployment and some other operations
* Can be set up using a `.env` file in your project root

When using the deployer, you must set the private key of the deployer using the `PRIVATE_KEY` environment variable. You can make this easier by using [`dotenv`](https://www.npmjs.com/package/dotenv) before running commands.

## Network Support

The CLI supports the following networks:

* Mainnet
* Testnet
* Devnet
* Localnet

For testnet/devnet/localnet operations, you can get test tokens using the `faucet` command.
