openzeppelin/openzeppelin-skills

setup-stylus-contracts

Set up a Stylus smart contract project with OpenZeppelin Contracts for Stylus on Arbitrum.

First seen Mar 5, 2026

Installation

$ npx skills add openzeppelin/openzeppelin-skills --skill setup-stylus-contracts

Summary

  • Set up a Stylus smart contract project with OpenZeppelin Contracts for Stylus on Arbitrum.
  • Use when users need to: (1) install Rust toolchain and WASM target for Stylus, (2) create a new Cargo Stylus project, (3) add OpenZeppelin Stylus dependencies to Cargo.toml, or (4) understand Stylus import conventions and storage patterns for OpenZeppelin.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from openzeppelin/openzeppelin-skills · top by installs.

npx skills add openzeppelin/openzeppelin-skills

Browse all from openzeppelin/openzeppelin-skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 208
License LICENSE
Default branch main
Open issues 3
Status Active

Skill metadata

Parsed from SKILL.md frontmatter.

LicenseAGPL-3.0-only
More metadata
author
OpenZeppelin

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 2,960 B
  • docs SUMMARY.md 377 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 179 installs

SKILL.md

Stylus Setup

Rust & Cargo Stylus Setup

Install the Rust toolchain and WASM target:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup target add wasm32-unknown-unknown

Install the Cargo Stylus CLI:

cargo install --force cargo-stylus

Create a new Stylus project:

cargo stylus new my_project

A Rust nightly toolchain is required. The project should include a rust-toolchain.toml specifying the nightly channel, rust-src component, and wasm32-unknown-unknown target. Check the rust-contracts-stylus repo for the current recommended nightly date.

Adding OpenZeppelin Dependencies

Look up the current version from crates.io/crates/openzeppelin-stylus before adding. Add to Cargo.toml:

[dependencies]
openzeppelin-stylus = "=<VERSION>"

Enable the export-abi feature flag for ABI generation:

[features]
export-abi = ["openzeppelin-stylus/export-abi"]

The crate must be compiled as both a library and a cdylib:

[lib]
crate-type = ["lib", "cdylib"]

Import Conventions

Imports use openzeppelin_stylus (underscores) as the crate root:

use openzeppelin_stylus::token::erc20::{Erc20, IErc20};
use openzeppelin_stylus::access::ownable::{Ownable, IOwnable};
use openzeppelin_stylus::utils::pausable::{Pausable, IPausable};
use openzeppelin_stylus::utils::introspection::erc165::IErc165;

Contracts use #[storage] and #[entrypoint] on the main struct, embedding OpenZeppelin components as fields:

#[entrypoint]
#[storage]
struct MyToken {
    erc20: Erc20,
    ownable: Ownable,
}

Public methods are exposed with #[public] and #[implements(...)]. The canonical pattern uses an empty impl block for dispatch registration, plus separate trait impl blocks:

#[public]
#[implements(IErc20<Error = erc20::Error>, IOwnable<Error = ownable::Error>)]
impl MyToken {}

#[public]
impl IErc20 for MyToken {
    type Error = erc20::Error;
    // delegate to self.erc20 ...
}

Top-level modules: access, finance, proxy, token, utils.

Build & Deploy Basics

Validate the contract compiles to valid Stylus WASM:

cargo stylus check

Export the Solidity ABI:

cargo stylus export-abi

Deploy to an Arbitrum Stylus endpoint:

cargo stylus deploy --endpoint="<RPC_URL>" --private-key-path="<KEY_FILE>"