Language
Docs

Documentation

Contributors: bobinstein, Dan MacDonald, Jack Smith, dmac
Last Updated:

Path Manifests

Overview

When uploading files to Arweave each file is assigned its own unique transaction ID. By default these ID's aren't grouped or organized in any particular manner.

One picture of your cat might be stored with a transaction ID of bVLEkL1SOPFCzIYi8T_QNnh17VlDp4RylU6YTwCMVRwopen in new window, while another with FguFk5eSth0wO8SKfziYshkSxeIYe7oK9zoPN2PhSc0open in new window as its transaction ID.

Cat1Cat2
bVLEkL1SOPFCzIYi8T_QNnh17VlDp4...FguFk5eSth0wO8SKfziYshkSxeIYe7oK9zoPN2PhSc0

These transaction ID's are a bit unwieldy and make it difficult to find all of your relevant files. Without a path manifest, if you uploaded 100 pictures of your cat you would need to keep track of 100 different IDs and links!

Path Manifests are a way to link multiple transactions together under a single base transaction ID and give them human readable file names. In relation to the cat example, you could have one base transaction ID to remember and use it like a folder - accessing your cat pictures with more memorable filenames like {base id}/cat1.jpgopen in new window, {base id}/cat2.jpgopen in new window, etc.

Creating grouped sets of readable file names is essential for creating practical applications on Arweave, and unlocks the ability to host websites or other file collections as explored in the examples below.

What Can You Use Manifests For?


Any time you need to group files in a hierarchical way, manifests can be useful. For example:

This mirrors the common base path approach used by NFT collections when linking to NFT images and metadata on a storage API or IPFS.

  • Hosting websites:
    • https://arweave.net/X8Qm…AOhA/index.html
    • https://arweave.net/X8Qm…AOhA/styles.css
    • https://arweave.net/X8Qm…AOhA/public/favicon.png

Manifest Structure


Path Manifests are a special format of transaction created and posted to Arweave using the Tags:

{ name: "Content-type", value: "application/x.arweave-manifest+json" }

and having JSON formatted transaction data that matches the example below.

{
  "manifest": "arweave/paths",
  "version": "0.2.0",
  "index": {
    "path": "index.html"
  },
  "fallback": {
    "id": "cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI"
  },
  "paths": {
    "index.html": {
      "id": "cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI"
    },
    "js/style.css": {
      "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ"
    },
    "css/style.css": {
      "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ"
    },
    "css/mobile.css": {
      "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ"
    },
    "assets/img/logo.png": {
      "id": "QYWh-QsozsYu2wor0ZygI5Zoa_fRYFc8_X1RkYmw_fU"
    },
    "assets/img/icon.png": {
      "id": "0543SMRGYuGKTaqLzmpOyK4AxAB96Fra2guHzYxjRGo"
    }
  }
}
  • fallback:

Manifest version 0.2.0 introduced the fallback attribute. fallback is an object that accepts the sub attribute id, which defines an Arweave data item transaction id for the resolver to fall back to if it fails to correctly resolve a requested path.

Source and Further Reading in the official Arweave Path Manifest docs: Arweave Docsopen in new window