Your site, on chain.

Publish a folder from the Vulpine wallet and it lives in the BSV blockchain: no server, no hosting bill, no host to switch it off. Change one file later and only that file goes up again. Every version is kept.

Publish your first siteGet the wallet

Pay once

A small site costs a fraction of a cent to publish, paid from your wallet as you publish it. The site has nothing to renew.

Every version, kept

Change one file and publish: the new version shows under the same address. Any earlier version can be put back with one press.

Public or sealed

A public site anyone can open, or a .void site sealed with a key that only its link carries.

Your name on it

Point a .fox name you hold at your site, and it follows every update.

Publish your first site

About two minutes, start to finish.

  1. Get Vulpine. For Windows, Mac, Linux or Android, from the download page. Make a wallet and write its recovery phrase down somewhere safe.
  2. Put a little BSV in it. Receive shows your address. A few cents' worth publishes many sites.
  3. Open Sites. It is on the Vulpine desktop. Not there? All apps, then Sites.
  4. New site. Give it a name, then choose Public or .void (which?).
  5. Add its files. Choose a folder (on a computer), a .zip, or a few files: pages, styles, scripts, pictures, fonts. It needs at least one .html page; pick the one it opens on, usually index.html. Links between your files keep working on chain.
  6. Check, preview, publish. The price shows before you pay anything. Preview it, then Publish.
  7. Share it. Copy link or Share. Anyone with Vulpine opens it in the Browser by its link, or by your .fox name.

Change it, any time

In Sites, press Manage on your site. Edit a page right there, replace or remove a file, add files, start a new text file, or update the whole thing from a folder or a .zip. Then Publish the update.

Only the files that changed go on chain, so an update usually costs less than the first publish. The site's address stays the same, and everyone who opens it sees the new version.

Every version, kept

Versions lists each version of your site and what changed in it. Make live puts any of them back: that is a new version too, so nothing is ever lost. On a computer, Download .zip gives you the files of any version.

Everything you publish stays on chain. A newer version replaces what people see, but older versions can still be read by anyone who has the site's link. Publish nothing you would need to take back.

Public or .void

⛓ Public

Anyone can open it, by its address or by a .fox name pointed at it. Its files and its name are on chain in the open.

🕳️ .void

Unlisted and sealed. Every file is encrypted before it goes on chain, and the key is part of the site's link: whoever has the link can open it, and nobody else can, us included.

About .void links

Give it a name

Hold a .fox name? In Sites, Manage your public site, then under .fox names press Point here. From then on yourname.fox opens your site, and every update shows under it by itself. It takes about a minute to reach everyone. Unpoint it any time.

What it costs

You pay the network to store your site, from your wallet, when you publish. The wallet shows the exact price before you pay.

For exampleSatsIn dollars
A one-page site, 20 KB2,130…
A small site: 10 files, 500 KB50,580…
A big site: 60 files, 5 MB503,080…
An update: one 10 KB page changed1,190…

Limits

For builders: how a site runs

A site opens in Vulpine's browser, in a sealed frame. That is what makes it safe to open anyone's site, and it shapes how you build one:

A .void site's board

A .void page gets window.VOID: { key, board, read }, the site's key, its board's address on chain, and the services it may read. It reads posts from the board's address, opening each with the key. To post, the page seals the post with the key and hands it to the wallet:

parent.postMessage({ type: 'void-post', box, id }, '*')

// the wallet answers, once it is sent:
{ type: 'void-posted', txid, hex, id }    // hex: the transaction, so the page can show the post at once
{ type: 'void-error', message, id }

The person is asked once, while the site is open, before their posting pocket pays for anything.

The network's boards

Every public board on the network (4chain's /FG/, /POL/, any other) is an address on chain: the key is sha256('vulpine-board:' + SLUG), so any page can work it out from the board's name. Every post on the board pays one sat there, so a page reads the board by reading that address's history, with no server in between. Each post is an OP_RETURN of Vulpine, fwetch-post and the post as JSON ({ p, b, t, reply, img, board, tr }). The network also writes two records there: board-index, which lists older posts, and board-hide, which lists what the moderators took down. Believe them only when house 0's key signed an input of their transaction. 4chain on chain is one page that does all this, and it is a site itself, so you can read its source: open chain:1d4019489f5332a924c7776bfbfde10c45d60155bc07c21977ea1812f8a0f5d8_0 in Vulpine's Browser.

To post on a board, a page hands the post to Vulpine. The network writes it anonymously, the way it writes every anonymous post:

parent.postMessage({ type: 'board-post', id, post: { board: 'FG', b: 'words', reply, tr, imgData } }, '*')

// the wallet answers, once it is sent:
{ type: 'board-posted', txid, id }
{ type: 'board-error', message, id }

The person is asked once, while the site is open. Nothing is paid from their wallet.

Ads on Cregs List

Cregs List is an address too: its key is sha256('vulpine-app:cregs'). Every ad, every change to one and every taking down pays one sat there, so a page reads the classifieds from that address's history. An ad is an OP_RETURN of Vulpine, fwetch-classified and the ad as JSON ({ p, title, body, category, city, location, price, currency, imgs, t, pub, sig }). city names one of the network's cities by its slug (new-orleans-us). Each ad is signed by its poster's identity: the record without pub and sig, keys sorted, as JSON, signed with BRC-42's "anyone" (protocol [0, 'fwetch identity'], key 1), so any page can check who posted it. The network lists older ads there (app-index) and what was taken down (app-hide); believe those only when house 0 signed. Cregs List on chain does all of this, signature checks included, and it is a site itself: chain:d9e56fbc66bbe64e4478e5267395873c9236e19875d5be5186831fae988a2ca8_0.

To post an ad, change one or take one down, a page hands it to Vulpine, which asks the person every time and signs it with their wallet. The network pays:

parent.postMessage({ type: 'classified-post', id, ad: { title, body, category, city, location, price, currency, anon, alias, parent, pub } }, '*')
parent.postMessage({ type: 'classified-remove', id, txid, title, pub }, '*')
parent.postMessage({ type: 'open-listing', id, txid }, '*')   // the ad in Vulpine's Cregs List, to reply to its poster

// the wallet answers:
{ type: 'classified-posted', txid, record, id }   // record: the signed ad, so the page can show it at once
{ type: 'classified-removed', txid, id }
{ type: 'listing-opened', id }
{ type: 'classified-error', message, id }

A change (with parent) or a taking down is only for an ad this wallet posted: pub is the key that signed it.

The format

Open, and all on chain. Anything that follows it can read a Vulpine site; no Vulpine server is needed to open one by its address.

Questions

Do visitors need Vulpine?
Today, yes: sites open in Vulpine's browser, on a computer or on Android.
Can I delete my site?
No. Nothing written to the chain can be deleted. You can publish a new version or unpoint your .fox name, but earlier versions stay readable to anyone who has the link.
Who can change it?
Only the wallet identity that published it: every version is signed with a key made for that one site from your wallet. Keep your recovery phrase safe. Lose it and the site stays up, but nobody can update it again.
Does it need a server?
No. Your wallet writes the site to the chain, and Vulpine reads it straight from public chain services (GorillaPool, WhatsOnChain, JungleBus). A .fox name is looked up through the Vulpine network.
What if Vulpine went away?
Your site is ordinary inscriptions in an open format. Anything that follows it can read your site.
What can't a site do?
Run code on a server, keep a database on one, or load things from other websites. It can do anything a page can do in the browser, read the chain, and (a .void site) post to its own board.