mallow docs

SDKs and Programs

The npm and Rust packages for mallow's Solana programs, the program addresses, the token mints, and the metadata template for Gumball uploads.

API or SDK?

UseWhen
The HTTP APIYou want a finished transaction to sign. The builders work out the token standard, the royalty accounts, lookup tables, compressed-artwork proofs and the priority fee for you. Indexed data such as artworks, events, profiles and trending is only in the API. It works from any language
A program clientYou build the instructions yourself, to combine them with your own in one transaction or to call a mallow program from another program. Or you read and decode accounts straight from your RPC

Two things only the API can do:

  • Draws. A draw from a Gumball or Jellybean made on mallow needs mallow's co-signature, and mallow co-signs only transactions its own draw builder made. See Draws go through mallow
  • Scheduled bids. mallow places the bid for you later, so the record lives on mallow's side

Program Addresses

These are the mainnet addresses. Each one is the address in the program's source and in its published clients.

ProgramAddressWhat it doesSource
mallow MarketMMA7VebX8Pi5JrrvaTBBm7nW81sfCww7ZtLBBT1YCy8Fixed-price listings, edition sales and offersNot public
mallow AuctionMAUsg1KhgYQV2Kxr9ccAkv7bUod88Qi3AKe5nUN41oeAuctions: bids and settlementNot public
mallow RewardsMRWDBkgyy3t3aA9C85DhmPfj39ss2nUgdsNthsRba2NArtwork staking, SMORES rewards and store creditsNot public
mallow SweepstakesWEEpg22uXSMaDx9QjdVKeUaZtk2Vj19XusBeszTiTQHolds sweepstake entries in escrow and settles the drawNot public
mallow GumballMGUMqztv7MHgoHBYWbvMyL3E3NJ4UHfTwgLJUQAbKGaThe Gumball Machine: random draws of pre-minted artworksGitHub
Gumball GuardGGRDy4ieS7ExrUu313QkszyuT9o3BvDLuc3H5VLgCpSFThe rules a draw must pass: payment, allowlists, start time and more. Gumball and Jellybean both use itGitHub
mallow JellybeanJ3LLYcm8V5hJRzCKENRPW3yGdQ6xU8Nie8jr3mU88eqqThe Jellybean Machine: draws where an edition with less supply left is rarerGitHub

The same seven addresses hold a deployed program on devnet, checked on 12 October 2026.

A New artwork Gumball is the exception to the table. It runs on Metaplex's Core Candy Machine program, not on mallow Gumball, which draws pre-minted artworks only.

You don't have to take a sweepstake result on trust. The Sweepstake program decides every draw on chain, and Verifying a draw shows how to recompute one.

Token Mints

TokenMint
SMORESsmoEhMZMweWBnpd1QoU4ZjuVNBxMFchqy4NRMBbtW7V
mallowSOLMLLWWq9TLHK3oQznWqwPyqD7kH4LXTHSKXK4yLz7LjD

Program Clients

Each program has a client generated from its interface with Codama. A client holds the account decoders, the instruction builders, the address derivations, the error codes and the program address.

ProgramJavaScript, Solana KitJavaScript, UmiRust
Market@mallow-labs/mallow-marketmallow-market-client
Auction@mallow-labs/mallow-auctionmallow-auction-client
Rewards@mallow-labs/mallow-rewardsmallow-rewards-client
Sweepstake@mallow-labs/mallow-sweepstake-sdkmallow-sweepstake-client
Gumball and Gumball Guard@mallow-labs/mallow-gumball@mallow-labs/mallow-gumball-umimallow-gumball-client
Jellybean@mallow-labs/mallow-jellybean@mallow-labs/mallow-jellybean-umimallow-jellybean-client

The JavaScript packages are on npm and the Rust crates are on crates.io.

npm install @mallow-labs/mallow-market @solana/kit@7
cargo add mallow-market-client

The smallest useful call reads a listing straight from the chain, with no API key:

import { address, createSolanaRpc } from "@solana/kit";
import {
  MALLOW_MARKET_ERROR__LISTING_EXPIRED,
  MALLOW_MARKET_PROGRAM_ADDRESS,
  fetchMaybeListingFromSeeds,
  getMallowMarketErrorMessage,
} from "@mallow-labs/mallow-market";

const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");

// Derives the listing PDA from the mint and decodes the account.
const listing = await fetchMaybeListingFromSeeds(rpc, { mint: address("<artwork-mint>") });
if (listing.exists) {
  console.log(listing.data.seller, listing.data.price); // price is a bigint
}

console.log(MALLOW_MARKET_PROGRAM_ADDRESS); // MMA7VebX8Pi5JrrvaTBBm7nW81sfCww7ZtLBBT1YCy8
console.log(getMallowMarketErrorMessage(MALLOW_MARKET_ERROR__LISTING_EXPIRED)); // error 6002

What to know before you depend on them:

  • Solana Kit version. The Market, Auction, Rewards, Gumball and Jellybean clients are built for @solana/kit 7. The Sweepstake SDK pins @solana/kit 8.3.0
  • Error messages. getMallowMarketErrorMessage and the same function in the other clients return the text only outside production builds. With NODE_ENV=production they return a placeholder, so log the code number as well
  • Jellybean. The Kit client is marked as not yet tested in its repository. The Umi client is the tested one
  • Market, Auction and Rewards have no README on npm. The types are the documentation. The Gumball client has a README with examples
  • The Rust crates export the same pieces under generated, with the program address as a constant such as MALLOW_MARKET_ID

Other Packages

PackageWhat it's forState
@mallow-labs/mallow-sweepstake-sdkVerifies a sweepstake draw without mallow's servers, as a library and as the mallow-sweepstake command. Also the Kit client for the Sweepstake program, at /generatedDocumented in its README
@mallow-labs/mallow-commonToken mints and a token registry with symbols and decimals, plus the types mallow's own apps shareDocumented. Brings in Anchor, @solana/web3.js and Umi
@mallow-labs/kitHelpers on top of Solana Kit: Jupiter quotes, priority-fee constants, and checks for expired-transaction and low-balance errorsDocumented. Asks for @solana/kit 2, older than the program clients use
@mallow-labs/mallow-utilSmall helpers with no Solana dependency: Merkle roots and proofs, address shortening, explorer linksDocumented
@mallow-labs/mallow-rewards-sdkAn Anchor 0.29 client for the Rewards program: stake, unstake, claimDocumented
@mallow-labs/mallow-sdkAn older Anchor client for the Market and Auction programsLast published in February 2024. Its README covers installing only. Use the generated clients instead
@mallow-labs/mallow-solanaShared @solana/web3.js helpers the other packages build onNo README

To verify a sweepstake draw from a script:

npm install @mallow-labs/mallow-sweepstake-sdk
import { verifyDrawManifest } from "@mallow-labs/mallow-sweepstake-sdk";

const manifest = await (await fetch("<manifest-url>")).json();
const verification = await verifyDrawManifest(manifest);

console.log(verification.offlineIntegrityValid, verification.errors);

This checks the manifest against itself and against the drand signature. To also check it against the chain, use the command on the Sweepstake page.

To use the token registry:

import { MALLOW_SOL, SMORES, TokenBySymbol } from "@mallow-labs/mallow-common";

console.log(SMORES); // smoEhMZMweWBnpd1QoU4ZjuVNBxMFchqy4NRMBbtW7V
console.log(MALLOW_SOL); // MLLWWq9TLHK3oQznWqwPyqD7kH4LXTHSKXK4yLz7LjD
console.log(TokenBySymbol["USDC"].decimals); // 6

mallow-common pins @types/node

@mallow-labs/mallow-common 1.2.0 declares @types/node 20.14.8 as an exact peer dependency. In a project with another version, npm install stops with ERESOLVE. Pass --legacy-peer-deps to install it anyway.

These are the packages mallow's own apps are built on. Pin an exact version of any you depend on.

Gumball Metadata Template

When you load artworks into a New artwork Gumball on mallow.art, each image needs a JSON file beside it with the same name: 001.png and 001.json. Download the template for a still image or for an HTML artwork:

metadata-example.json
{
  "name": "My NFT #1",
  "description": "This is a description of my NFT",
  "attributes": [
    {
      "trait_type": "Background",
      "value": "Green"
    }
  ],
  "tags": ["photography", "my-custom-tag"]
}
FieldRequiredRules
nameYesText, 32 characters at most
descriptionYesText, 1,000 characters at most
attributesNoA list of traits. Each has a trait_type and a value, and both must be text. Write a number as "7", not 7
tagsNoA list of text tags. mallow lowercases each one and turns spaces into hyphens
animation_urlNoFor an HTML artwork, the address of the HTML, such as an ipfs:// link. Must not be empty
properties.categoryNoSet it to "html" beside animation_url, so mallow treats the artwork as HTML
  • Leave out image. mallow writes image and properties from the files you upload
  • For an HTML artwork, the uploaded image is the thumbnail and animation_url is the artwork
  • Any other top-level field in the file is kept as it is
  • The upload page checks every file before it uploads anything, and names the file and the field when one fails

On this page