Skip to main content

Getting Started with Rust


Rust and Cargo are required to use You can find installation instructions in the Rust documentation.

We recommend you update Rust to the latest stable version rustup update stable. The nightly version should be fine, but there is a chance some changes are not compatible.

no_std is not currently supported, but we are working on it, and we will provide it as a feature once the new implementation is ready.


cmake and openssl are required. In order to run the build process successfully using Cargo you may need install additional build tools on your system.


cmake can be downloaded from the official cmake website. openssl can be installed with vcpkg or chocolatey.

  • Installing openssl with vcpkg :

    ./vcpkg.exe install openssl:x64-windows
    ./vcpkg.exe integrate install
    # you may want to add this to the system environment variables since you'll need it to compile the crate
  • Installing openssl with chocolatey :

    choco install openssl
    # you may need to set the OPENSSL_ROOT_DIR environment variable
    set OPENSSL_ROOT_DIR="C:\Program Files\OpenSSL-Win64"


cmake and openssl can be installed with Homebrew by running the following commands:

brew install cmake
brew install openssl@1.1
# you may want to add this to your .zshrc or .bashrc since you'll need it to compile the crate
OPENSSL_ROOT_DIR=$(brew --prefix openssl@1.1)


You can install cmake and openssl with your distro's package manager or download from their websites. On Debian and Ubuntu you will also need the build-essential package.


To use the library, add this to your Cargo.toml :

iota-wallet = { git = "", branch = "dev" }


In order to use the library, you first need to create an AccountManager :

use iota_wallet::{account_manager::AccountManager, client::ClientOptionsBuilder, signing::SignerType};
use std::path::PathBuf;

async fn main() -> iota_wallet::Result<()> {
let storage_folder: PathBuf = "./my-db".into();
let manager = AccountManager::builder()
.with_storage(&storage_folder, None)?
// If no mnemonic is provided, then the Stronghold file is the only way for a backup
manager.store_mnemonic(SignerType::Stronghold, None).await?;
let client_options = ClientOptionsBuilder::new()
let account = manager
let address = account.generate_address().await?;
println!("Address: {}", address.address().to_bech32());