BAMFS
Use BAMFS

Quickstart

Put a folder on chain from the web app, and read it back from anywhere.

BAMFS is live on Base and Base Sepolia. Base is real money; Base Sepolia takes faucet ETH and is the place to try things first.

Prerelease. The contracts are unaudited, nothing is locked, and ownership has not been renounced. Upload to Base accordingly.

Use the web app

bamfs.xyz is the whole flow, and it needs no install:

  1. Connect a wallet on Base, or switch to Base Sepolia to rehearse.
  2. Drop a folder on the page.
  3. Name it. That mints a project NFT and publishes the folder to it.

The upload is chunked, deduplicated against what is already on chain, and compressed with FastLZ by default. The app shows the transaction plan — how many transactions, and what each one costs — before you sign anything.

When it finishes you get a root CID. That CID is served straight out of contract storage:

https://bamfs.xyz/g/cid/<root>/index.html

Read without an account

Reading is permissionless and needs no wallet, no key, and no configuration — the gateway resolves any stored content by CID, whether or not a project points at it:

https://bamfs.xyz/g/cid/<root>/

Two layers, kept separate

The distinction worth learning before anything else:

  • Content is permissionless and immutable. Anyone can write bytes; they are addressable by CID forever; nothing owns them.
  • A project is an ABX NFT. Its owner publishes root CIDs to it and moves tags. ownerOf is the entire authorization model.

Content does not need a project to exist or resolve. A project is one representation of content, and anyone can build a different one.

The CLI

The bamfs CLI does everything the app does, plus diffing, pinning, and proving. It is not published to npm yet — that ships with the open-source release — so today it is built from the repository:

pnpm install
pnpm --filter @bamfs/cli build

Reads need nothing else; the canonical addresses are compiled in. --chain picks the network, and defaults to Base:

bamfs info --project-id 0 --chain base
bamfs read <root> --path index.html --chain base

Writes need a funded key, in the environment only — the CLI never reads one from disk:

export BAMFS_PRIVATE_KEY=0x…
bamfs upload ./site --chain base --dry-run          # compute CIDs, spend nothing
bamfs upload ./site --chain base --name my-project  # mint and publish

--dry-run runs the whole pipeline offline, so you can see the root CID and the transaction count before committing to either.

See the CLI reference for the full surface.

Next

  • Projects — versions, tags, and handing one off.
  • Compression — why FastLZ is the default.
  • IPFS — the CID your content also has, and pinning it.
  • Deployments — addresses, and picking an RPC.

On this page