This document explains how to run Juno locally.
Before you begin developing and contributing to Juno, ensure the following tools are installed on your machine:
- Node.js (Website)
- Rust and Cargo (Installation)
- Docker (Windows, MacOS, or Linux)
- Clone the repository and install dependencies:
git clone https://github.com/junobuild/juno
cd juno
npm ci
- Start the emulator: This command runs a local emulator that replicates the behavior of the Internet Computer blockchain, deploying necessary smart contracts using a custom Docker image (repo) developed specifically for Juno.
npm run emulator
- Launch the front-end administration console: Open another terminal window and start the console, which is configured to interact with the emulator.
npm run dev
Tip
Both the emulator and the front-end server support live reloading, facilitating a smoother development experience.
Note
In addition to Cargo, a few additional tools are required to build the modules. See Required Tools for details.
You can manually build the smart contracts using standard Rust and Cargo commands targeting wasm32-unknown-unknown
. For example:
cargo build --target wasm32-unknown-unknown -p console --release
However, these commands do not instruct the emulator to redeploy the resulting builds. Therefore, to automate both build and deployment, we provide the following npm commands:
npm run build:console
npm run build:observatory
npm run build:satellite
npm run build:mission-control
npm run build:orbiter
The following additional tools are required when building the modules:
didc
is required to generate Candid files.
cargo install junobuild-didc
candid-extractor
is needed to extract Candid interfaces. Install it with:
cargo install candid-extractor
wasi2ic
is required to convert the Wasm of the Sputnik crate for compatibility with the Internet Computer. This is necessary because this module must be built with the wasm32-wasip1
target.
cargo install wasi2ic
Here are a few commands that can be useful when developing and contributing to Juno:
Command | Description |
---|---|
npm run ledger:transfer |
Transfer 55 ICP to a Mission Control (Wallet). |