DEVELOPER DOCS
Irys SDK

Installing

Install using npm:

npm install @irys/sdk

or yarn:

yarn add @irys/sdk
ℹ️

If you get a warning saying bigint: Failed to load bindings, pure JS will be used (try npm run rebuild?) during install, it can be safely ignored. For details on how make it go away, see our troubleshooting guide.

Importing

import Irys from "@irys/sdk";

Connecting to a node

Connect to any of our three nodes, using a serialized JWK file when using an Arweave wallet:

const getIrysArweave = async () => {
	const url = "https://devnet.irys.xyz";
	const token = "arweave";
	const key = JSON.parse(fs.readFileSync("arweaveWallet.json").toString());
 
	const irys = new Irys({
		url, // URL of the node you want to connect to
		token, // Token used for payment and signing
		key, // Arweave wallet
	});
	return irys;
};

Or a private key when using an EVM or Solana wallet:

const getIrys = async () => {
	const url = "https://devnet.irys.xyz";
	// Devnet RPC URLs change often, use a recent one from https://chainlist.org/chain/80001
	const providerUrl = "";
	const token = "matic";
 
	const irys = new Irys({
		url, // URL of the node you want to connect to
		token, // Token used for payment
		key: process.env.PRIVATE_KEY, // ETH or SOL private key
		config: { providerUrl }, // Optional provider URL, only required when using Devnet
	});
	return irys;
};

Funding a node

Fund a node using any of our supported tokens:

const fundNode = async () => {
	const irys = await getIrys();
	try {
		const fundTx = await irys.fund(irys.utils.toAtomic(0.05));
		console.log(`Successfully funded ${irys.utils.fromAtomic(fundTx.quantity)} ${irys.token}`);
	} catch (e) {
		console.log("Error uploading data ", e);
	}
};

Uploading

Data uploaded to Irys is given a millisecond-accurate timestamp, attributes and authorship details before being passed to Arweave for permanent storage. This information is used to create a signed receipt that can be used to verify the data's provenance at any time.

Uploading data

const uploadData = async () => {
	const irys = await getIrys();
	const dataToUpload = "GM world.";
	try {
		const receipt = await irys.upload(dataToUpload);
		console.log(`Data uploaded ==> https://gateway.irys.xyz/${receipt.id}`);
	} catch (e) {
		console.log("Error uploading data ", e);
	}
};

Uploading a file

const uploadFile = async () => {
	const irys = await getIrys();
	// Your file
	const fileToUpload = "./myImage.png";
 
	const tags = [{ name: "application-id", value: "MyNFTDrop" }];
 
	try {
		const receipt = await irys.uploadFile(fileToUpload, { tags: tags });
		console.log(`File uploaded ==> https://gateway.irys.xyz/${receipt.id}`);
	} catch (e) {
		console.log("Error uploading file ", e);
	}
};

Uploading a folder

You can upload a group of files as a single transaction from both the server and the browser.

ℹ️

When uploading a folder, files can be accessed either directly at https://gateway.irys.xyz/[transaction-id] or https://gateway.irys.xyz/[manifest-id]/[file-name]

Server

const uploadFolder = async () => {
	const irys = await getIrys();
 
	// Upload an entire folder
	const folderToUpload = "./my-images/"; // Path to folder
	try {
		const receipt = await irys.uploadFolder("./" + folderToUpload, {
			indexFile: "", // optional index file (file the user will load when accessing the manifest)
			batchSize: 50, //number of items to upload at once
			keepDeleted: false, // whether to keep now deleted items from previous uploads
		}); //returns the manifest ID
 
		console.log(`Files uploaded. Manifest ID ${receipt.id}`);
	} catch (e) {
		console.log("Error uploading file ", e);
	}
};

Browser

const webIrys = await getWebIrys();
 
const files: File[] = [];
const tags: { name: string; value: string }[][] = [];
 
// Convert Files to TaggedFiles
const taggedFiles = files.map((f: TaggedFile, i: number) => {
	f.tags = tags[i];
	return f;
});
 
const response = await webIrys.uploadFolder(taggedFiles);

Querying

In addition to using the query package to search Irys and Arweave, you can also search directly from the Irys SDK. The following shows how to search for all transactions posted to Node 1, paid for with Matic, and uploaded during a three day period.

For more details on all search functions, see query package documentation.

const result = await irys
	.search("irys:transactions")
	.url("https://node1.irys.xyz/graphql")
	.token("matic")
	.fromTimestamp(new Date("2023-07-01"))
	.toTimestamp(new Date("2023-07-03"));

3rd party build tools

Parcel

If using Parcel (opens in a new tab), you will need to manually enable package exports (opens in a new tab) by adding the following to the package.json file in your project root directory.

{
	"@parcel/resolver-default": {
		"packageExports": true
	}
}