base on Command line interface for supplying proofs to the Nexus network. [](https://github.com/nexus-xyz/nexus-cli/releases)
[](https://github.com/nexus-xyz/nexus-cli/actions)
[](https://github.com/nexus-xyz/nexus-cli/blob/main/LICENSE-APACHE)
[](https://github.com/nexus-xyz/nexus-cli/blob/main/LICENSE-MIT)
# Nexus CLI
A high-performance command-line interface for contributing proofs to the Nexus network.
<figure>
<a href="https://beta.nexus.xyz/">
<img src="assets/images/nexus-network-image.png" alt="Nexus Network visualization showing a distributed network of interconnected nodes with a 'Launch Network' button in the center">
</a>
<figcaption>
<strong>Verifiable Computation on a Global Scale</strong><br>
We're building a global distributed prover network to unite the world's computers and power a new and better Internet: the Verifiable Internet. Connect to the beta and give it a try today.
</figcaption>
</figure>
## Nexus Network
[Nexus](https://nexus.xyz/) is a global distributed prover network that unites the world's computers to power a new and better Internet: the Verifiable Internet.
There have been several testnets so far:
- Testnet 0: [October 8 – 28, 2024](https://blog.nexus.xyz/nexus-launches-worlds-first-open-prover-network/)
- Testnet I: [December 9 – 13, 2024](https://blog.nexus.xyz/the-new-nexus-testnet-is-live/)
- Testnet II: [February 18 – 22, 2025](https://blog.nexus.xyz/testnet-ii-is-open/)
---
## Quick Start
### Single-User Installation
For the simplest one-command install (especially for local testing or personal use). This is what most users will want to do:
```bash
curl https://cli.nexus.xyz/ | sh
```
**Note:** This script automatically installs Rust if you don’t have it and prompts for Terms of Use in an interactive shell.
Alternatively, if you’ve already downloaded `install.sh`:
```bash
./install.sh
```
### CI
The `install.sh` script is designed to do several things:
1. Install Rust if it's not already installed... and do it non-interactively if possible, so it does not bother the user.
2. Prompt the user to accept the Terms of Use (via bash) and enter their node id (via the Rust program)
```sh
# this is the part in the install.sh script has the brittle `< /dev/tty` part within CI environments
(
cd "$REPO_PATH/clients/cli" || exit
cargo run --release -- start --env beta
) < /dev/tty
```
This combination of bash and Rust is a bit brittle in CI environments. Consider these approaches instead:
1. **Build from source**:
```bash
git clone https://github.com/nexus-xyz/nexus-cli
cd nexus-cli/clients/cli
cargo build --release
./target/release/nexus-network start --env beta
```
2. **Download the script locally** (and optionally set `NONINTERACTIVE=1` if you need it to run without prompts):
```bash
curl -sSf https://cli.nexus.xyz/ -o install.sh
chmod +x install.sh
NONINTERACTIVE=1 ./install.sh
```
Building from source or running a downloaded script gives you more control over dependencies and versions, and avoids any unexpected prompts during automated runs.
---
## Local Testing with a Local HTTP Server
If you want to simulate `curl https://cli.nexus.xyz/ | sh` **locally**:
1. In the project’s root directory, start a local server:
```sh
python3 -m http.server 8080
```
2. In a separate terminal, run:
```sh
curl -sSf http://localhost:8080/public/install.sh | sh -x
```
3. Observe the script output and verify installation logic.
If you don’t have Rust installed, you will be prompted to install it (unless `NONINTERACTIVE=1` is set).
---
## Prerequisites
### Linux
```bash
sudo apt update && sudo apt upgrade
sudo apt install build-essential pkg-config libssl-dev git-all
```
### macOS
```bash
brew install git
```
### Windows
1. [Install WSL](https://learn.microsoft.com/en-us/windows/wsl/install).
2. Follow the Linux instructions above within WSL.
---
## Terms of Use
Use of the CLI is subject to the [Terms of Use](https://nexus.xyz/terms-of-use). First-time users running interactively will be prompted to accept these terms. For **non-interactive acceptance** (e.g., in CI), run:
```bash
NONINTERACTIVE=1 sh install.sh
```
or `export NONINTERACTIVE=1` before invoking the curl installer.
---
## Node ID
During the CLI’s startup, you’ll be asked for your node ID. To skip prompts in a
non-interactive environment, manually create a `~/.nexus/config.json` in the
following format:
```json
{
"node_id": "<YOUR NODE ID>"
}
```
---
## Current Limitations
- Only the latest CLI version is supported.
- Prebuilt binaries are not yet available.
- To submit programs to the network for proving, contact [
[email protected]](mailto:
[email protected]).
---
## Get Help
- [Network FAQ](https://docs.nexus.xyz/layer-1/network-devnet/faq)
- [Discord Community](https://discord.gg/nexus-xyz)
- Technical issues? [Open an issue](https://github.com/nexus-xyz/nexus-cli/issues)
---
## Repository Structure
```txt
nexus-cli/
├── assets/ # Media for documentation
├── clients/
│ └── cli/ # Main CLI implementation
├── proto/ # Shared network interface definition
└── public/ # Files hosted at cli.nexus.xyz
```
---
## Contributing
See [CONTRIBUTING.md](./CONTRIBUTING.md) for development setup and guidelines.
", Assign "at most 3 tags" to the expected json: {"id":"12433","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"