| What is tracked | Count |
|---|---|
| Collections | 83 |
| Canonical collections | 81 |
| Curated views | 2 |
| Explicit unique assets | 26,806 |
| Explicit collection memberships | 27,143 |
| Primary memberships | 26,806 |
| Secondary or curated memberships | 337 |
| Memberships with traits | 9,728 |
| Membership source | Collections |
|---|---|
Reviewed static assets.json |
80 |
| Collection or computed adapters | 2 |
| Marketplace-indexed exceptions | 1 |
| Active aggregator sources | 0 |
| Available aggregators | 3 |
Explicit membership counts exclude collections resolved later from chain facts, including Bitcoin Stamps and Pre-Ethereum.
Trait types: ATK, Affiliation, Artist, Attack, Card, Chapter, Date, Element, Emoji, HP, Health, ID, Kaleidoscope ID, Month, Name, No, Pioneer, Rarity, SPD, Season, Series, Speed, Story, Type, Year.
Available aggregators: orbital, pepe-wtf, tokenscan.
The public catalog of Counterparty asset collections. One collection is one folder. Changes are made through pull requests.
This repo controls collection names, descriptions, links, membership, and editorial traits. It does not create sale listings. To sell an asset, use a marketplace application. To add a project to the catalog or correct its data, use this repo.
Catalog inclusion does not automatically enable trading. Each consumer chooses which collections it supports.
| I want to... | Go here |
|---|---|
| Add my collection | Add a collection |
| Fix a name, description, or link | Find the folder in collections/ and edit meta.json |
| Add, remove, or correct an asset | Edit that collection's assets.json; see asset membership |
| Add or correct traits | Edit the asset's attributes in assets.json; see traits |
| Use my collection's API | Add a local adapter.ts and remove assets.json; see switching sources |
| Report a problem without writing code | Open a collection change request |
| List an asset for sale | Use a marketplace application; no repo change is needed |
For contribution steps, see CONTRIBUTING.md. GitHub can make small edits in the browser: open a file, click the pencil, describe the change, and submit a pull request from the fork GitHub creates.
collections/<slug>/
meta.json name, type, description, art frame, founding year, and links
assets.json reviewed static membership, preferred when available
adapter.ts optional collection-operated API adapter
README.md collection-specific notes
icon.ext optional square icon: png, jpg, webp, or svg
logo.ext optional wide logo
The folder name is a stable lowercase kebab-case slug, such as rare-pepe.
Useful examples:
- Age of Rust uses a small static
assets.json. - Kaleidoscope uses a collection API adapter.
- Pre-Ethereum is a computed curated view.
- Bitcoin Stamps documents marketplace-indexed membership.
meta.json contains editorial information only:
{
"name": "Rare Pepe",
"kind": "canonical",
"description": "The original card canon, issued on Counterparty from 2016 to 2018 across 36 series.",
"art_frame": "card",
"founded": 2016,
"links": {
"website": "https://rarepepedirectory.com"
}
}Required fields are name, kind, description, and art_frame.
art_frame is card, square, or landscape, based on the collection's
dominant artwork shape. founded is the year the project launched; every
collection carries one, and a new collection should too. Without it, a
marketplace dates the collection from its oldest member's issuance, which
overstates the age of a collection that adopted assets registered before it
existed. Optional links are website, x, and discord. See the
meta.json schema.
assets.json contains the complete reviewed membership snapshot:
{
"assets": [
{
"asset": "RAREPEPE",
"attributes": [
{ "trait_type": "Artist", "value": "Mike" },
{ "trait_type": "Series", "value": 1 },
{ "trait_type": "Card", "value": 1 }
]
},
{ "asset": "ANOTHERASSET" }
]
}asset must be a Counterparty protocol identifier:
- named asset:
RAREPEPE - numeric asset:
A9538869118141223875 - subasset longname:
DANK.COOKIES
Both a subasset's numeric identifier and longname are accepted. Prefer the
longname when it is easier to review. Consumers can resolve both forms to the
same compact identity and retain the longname for display. See the
assets.json schema.
Traits use { "trait_type", "value" }, matching common NFT metadata. The
registry defines Artist, Series, and Card today. Repeat Artist for a
collaboration. Other traits are preserved.
Do not put supply, divisibility, issuance dates, ownership, prices, listings, or sales in this repo. Consumers derive chain and market facts independently.
A canonical collection is an asset's main home. An asset represented in
canonical collections has one primary home. CI rejects duplicate primary homes.
A curated collection is a view across existing assets, such as Pre-Ethereum.
It does not claim their identity or double-count their activity.
If a canonical collection includes an asset whose primary home is another collection, keep the entry and mark it secondary:
{ "asset": "SATOSHICARD", "primary": false }CI names the conflicting collections when it finds a duplicate primary. A
canonical collection must keep at least one primary asset. If every member is
an overlap, use "kind": "curated" instead.
The first source that exists wins:
collections/<slug>/assets.jsoncollections/<slug>/adapter.tsfor a collection-operated API or computed view- an adapter in
aggregators/
There is no silent fallback. If the selected source fails, the build fails. Do
not put assets, adapters, provider URLs, or source configuration in meta.json.
An aggregator can help create an initial static snapshot. After assets.json
is committed, the static file takes precedence. See the
collection guide,
adapter contract, and
aggregator guide.
For most additions:
- Create
collections/<slug>/meta.json. - Create
collections/<slug>/assets.json. - Add a short
README.md. - Add an icon or logo if available.
- Open a pull request and explain how reviewers can verify the change.
For a correction, edit only the affected file. You do not need to regenerate unrelated data.
Run the full check with Node.js 22. There is no install step:
npm run checkCI checks JSON shape, Counterparty identifiers, membership conflicts, adapter
fixtures, and live materialization when applicable. Generated dist/ files are
not committed.
More detail:
- Collection contribution guide
- Contributor and PR expectations
- Collection and aggregator adapters
- Standard collection feed
- Public schemas
- Open a collection change request
- Cake Commons: no reliable membership list has been found. A PR with a verifiable list is welcome.
Membership entries may include "asset_type": "currency" for a project's
payment or utility currency, or "asset_type": "collectible". Omission means
unclassified; it is not a claim about divisibility or supply. For example:
{ "asset": "PEPECASH", "asset_type": "currency" }Currencies retain their collection membership, artwork and other metadata. The registry publishes the classification without deciding whether a consumer should display or trade the asset. Consumers apply their own eligibility rules. Static files and adapters use the same field, preserved in feed-v1 exports.
The initial currency annotations match the explicit quote-asset lists in
XCP/exchange
and XCP/explorer.
They are reviewed registry metadata, not a runtime dependency on those repos.
Do not classify assets by CASH/COIN name matching: collectible names can
contain those words too.