npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

rocketh

v0.17.23

Published

A framework-agnostic smart contract deployment system for Ethereum-compatible networks.

Readme

Rocketh

A framework-agnostic smart contract deployment system for Ethereum-compatible networks.

Features

  • 🔧 Framework Agnostic - Works with any Ethereum development toolchain
  • 📝 Deploy Scripts - Write deployment scripts that run anywhere, including in the browser
  • 🔄 Deterministic Deployments - Support for CREATE2 and CREATE3 deployment patterns
  • 💎 Diamond Pattern - First-class support for EIP-2535 Diamond proxies
  • 🔀 Proxy Patterns - Support for ERC1967, UUPS, Transparent, and ERC173 proxies
  • 📦 Named Accounts - Reference accounts by name instead of address
  • 💾 Deployment Tracking - Save and track deployments with transaction receipts
  • Contract Verification - Built-in support for Etherscan and Sourcify
  • 📄 Documentation Generation - Auto-generate documentation from deployed contracts

Packages

| Package | Description | | ---------------------------------------------------------- | ----------------------------------------------------- | | rocketh | Core deployment environment and execution | | @rocketh/core | Shared types and utilities | | @rocketh/deploy | Standard contract deployment | | @rocketh/proxy | Proxy deployment patterns (UUPS, Transparent, ERC173) | | @rocketh/diamond | EIP-2535 Diamond proxy support | | @rocketh/read-execute | Contract read/write utilities | | @rocketh/node | Node.js deployment executor | | @rocketh/verifier | Contract verification (Etherscan, Sourcify) | | @rocketh/export | Export deployments for frontend consumption | | @rocketh/doc | Documentation generation | | @rocketh/signer | Signer utilities | | @rocketh/router | Route-based contract deployment | | @rocketh/web | rocketh in web browser |

Installation

# Using pnpm
pnpm add rocketh @rocketh/deploy @rocketh/node

# Using npm
npm install rocketh @rocketh/deploy @rocketh/node

# Using yarn
yarn add rocketh @rocketh/deploy @rocketh/node

Documentation

For full documentation, visit rocketh.dev.

Getting Started

In this guide, we will create a new project using Rocketh from scratch..

Note if you want to use a full featured template, you can use the template-ethereum-contracts repository.

You can also use hardhat-deploy init, see hardhat-deploy for more information.

We will be using hardhat for contract compilation and hardhat-deploy to hook hardhat with rocketh.

Note While rocketh is agnostic to the compilation system you use, it require one and for this guide we will use hardhat.

Prerequisites

create a new directory and cd into it

We will be working in that folder going forward.

mkdir my-rocketh-project
# set the current directory
cd my-rocketh-project

initialize a new project

Just create a new package.json file with the following content:

file: package.json

{
	"name": "my-rocketh-project",
	"version": "0.0.0",
	"type": "module"
}

install dependencies

pnpm add -D hardhat @types/node typescript forge-std@github:foundry-rs/forge-std#v1.9.4 hardhat-deploy@next rocketh @rocketh/node @rocketh/deploy @rocketh/read-execute

create a new solidity file

First we create a new directory for our solidity files.

mkdir src

Then we create a new solidity file in that folder.

file: src/Counter.sol

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.28;

contract Counter {
  uint public x;

  event Increment(uint by);

  function inc() public {
    x++;
    emit Increment(1);
  }

  function incBy(uint by) public {
    require(by > 0, "incBy: increment should be positive");
    x += by;
    emit Increment(by);
  }
}

create a new hardhat config file

We then create a new hardhat config file.

file: hardhat.config.ts

import {defineConfig} from 'hardhat/config';
import HardhatDeploy from 'hardhat-deploy';

export default defineConfig({
	plugins: [HardhatDeploy],
	solidity: {
		profiles: {
			default: {
				version: '0.8.28',
			},
			production: {
				version: '0.8.28',
				settings: {
					optimizer: {
						enabled: true,
						runs: 200,
					},
				},
			},
		},
	},
	networks: {
		hardhatMainnet: {
			type: 'edr-simulated',
			chainType: 'l1',
		},
		hardhatOp: {
			type: 'edr-simulated',
			chainType: 'op',
		},
	},
	paths: {
		sources: ['src'],
	},
	generateTypedArtifacts: {
		destinations: [
			{
				folder: './generated',
				mode: 'typescript',
			},
		],
	},
});

create a new rocketh directory

Then we setup a rocketh by first creating a new directory for rocketh configurations.

mkdir rocketh

create a new rocketh config file

We create the rocketh config file.

file: rocketh/config.ts

/// ----------------------------------------------------------------------------
// Typed Config
// ----------------------------------------------------------------------------
import type {UserConfig} from 'rocketh/types';

// we define our config and export it as "config"
export const config = {
	accounts: {
		deployer: {
			default: 0,
		},
		admin: {
			default: 1,
		},
	},
	data: {},
} as const satisfies UserConfig;

// then we import each extensions we are interested in using in our deploy script or elsewhere

// this one provide a deploy function
import * as deployExtension from '@rocketh/deploy';
// this one provide read,execute functions
import * as readExecuteExtension from '@rocketh/read-execute';

// and export them as a unified object
const extensions = {
	...deployExtension,
	...readExecuteExtension,
};
export {extensions};

// then we also export the types that our config ehibit so other can use it

type Extensions = typeof extensions;
type Accounts = typeof config.accounts;
type Data = typeof config.data;

export type {Extensions, Accounts, Data};

create a new rocketh deploy file

the rocketh deploy file is used to export the deploy script function and the artifacts.

file: rocketh/deploy.ts

import {type Accounts, type Data, type Extensions, extensions} from './config.js';

// ----------------------------------------------------------------------------
// we re-export the artifacts, so they are easily available from the alias
import * as artifacts from '../generated/artifacts/index.js';
export {artifacts};
// ----------------------------------------------------------------------------
// we create the rocketh functions we need by passing the extensions to the
//  setup function
import {setupDeployScripts} from 'rocketh';
const {deployScript} = setupDeployScripts<Extensions, Accounts, Data>(extensions);

export {deployScript};

create a new rocketh environment file

the environment file is used to export the environment functions, to be used in test and scripts.

file: rocketh/environment.ts

import {type Accounts, type Data, type Extensions, extensions} from './config.js';
import {setupEnvironmentFromFiles} from '@rocketh/node';
import {setupHardhatDeploy} from 'hardhat-deploy/helpers';

// useful for test and scripts, uses file-system
const {loadAndExecuteDeploymentsFromFiles} = setupEnvironmentFromFiles<Extensions, Accounts, Data>(extensions);
const {loadEnvironmentFromHardhat} = setupHardhatDeploy<Extensions, Accounts, Data>(extensions);

export {loadEnvironmentFromHardhat, loadAndExecuteDeploymentsFromFiles};

create a new deploy directory

Then we can create a new deploy directory where our deploy scripts will be stored.

mkdir deploy

create a new deploy script

And here we create a basic deploy script for our Counter contract.

file: deploy/deploy_Counter.ts

import {deployScript, artifacts} from '../rocketh/deploy.js';

export default deployScript(
	async ({deploy, namedAccounts}) => {
		const {deployer} = namedAccounts;

		await deploy('Counter', {
			account: deployer,
			artifact: artifacts.Counter,
		});
	},
	{tags: ['Counter', 'Counter_deploy']},
);

compile

We can now compile our contracts using the following command:

pnpm hardhat compile

deploy

And finally we can deploy our contracts in a in-memory hardhat network using the following command:

pnpm hardhat deploy

License

MIT