Type
parad0x.nullin your address bar and load a website that has no server, no host, no DNS — just a name on Solana pointing at content on Arweave. Nothing to seize, no one to send a takedown to.
This is a small, open browser extension that resolves .null domains. It reads a name's account on Solana, follows the pointer to Arweave, and loads the page. No backend, no tracking, ~100 lines of resolver logic. Read every byte before you run it.
- Load the extension (below).
- Type
parad0x.nullin the address bar. - It resolves on Solana and loads the live page from Arweave.
Don't trust it — verify on-chain:
| link | |
|---|---|
the .null registry (mainnet program) |
NXgQhepF…WhV8Np |
parad0x.null's on-chain name account |
DRDHB6…azS45 |
There is no Web Store listing yet — this is load-unpacked, on purpose, so you can read the code first.
git clone https://github.com/Parad0x-Labs/web0-resolver.git- Open
chrome://extensions(orbrave://extensions,edge://extensions). - Turn on Developer mode (top-right).
- Click Load unpacked.
- Select the
web0-resolver/extensionfolder — not the repo root. - Confirm it loaded: you should see Null Resolver at version 0.1.2.
Now type any .null name. Done.
Updating later?
git pull, then hit ↻ reload on the extension card. The version number is there so you can tell a fresh load from a stale one.
A normal site rents three things — a domain, a server, DNS. Pull any one and it's gone. .null removes all three:
you type the extension does you get
───────── ───────────────── ───────
parad0x.null → 1. read the name's account on Solana
2. take the arweave_txid it points to → the page,
3. load that content from Arweave from Arweave
-
The name is a Solana account (a PDA on the
null_registrarprogram). The owner controls it with a keypair. No registrar. - The content lives on Arweave — paid once, stored permanently. No server.
- The link between them is one field in the Solana account. Only the owner's key can change it. No DNS, no admin panel.
The extension catches the navigation (including the case where your browser's omnibox sends name.null to a search engine), does the lookup, and redirects the tab. That's the whole thing.
Want to resolve .null without a browser — from an agent, a script, a backend? See AGENTS.md. It's the same logic in ~15 lines of Node, with the on-chain byte layout and the RPC gotchas documented.
A name is just an account on the null_registrar program — a one-time ~0.003 SOL of rent (refundable if you ever close it), no annual renewal. Self-serve registration (one-command CLI + a simple UI) is rolling out next. Until then, watch this repo or follow @Parad0x_Labs. The resolver here is read-only — it never asks for a key, never signs anything.
Click the extension icon → Advanced to set your own Solana RPC (e.g. Helius, QuickNode, Triton). Whatever you save goes first in the resolver's RPC chain; the public fallbacks still back it up.
Leave it blank and it uses a built-in public chain (publicnode + onfinality). Do not set api.mainnet-beta.solana.com — see pitfalls.
| symptom | cause | fix |
|---|---|---|
| "Couldn't reach Solana — HTTP 403" |
api.mainnet-beta.solana.com returns 403 to any request with a browser Origin header (works from curl, fails from an extension — a classic trap). |
The default chain already avoids it. If you set a custom RPC, don't use mainnet-beta; use publicnode or a keyed provider. |
| Page won't load right after a fresh publish | Arweave gateway propagation lag — the tx is confirmed but one gateway hasn't synced. | The resolver probes gateway.irys.xyz → arweave.net → ar-io.net and uses the first that answers. Give it ~30–60s. |
| Still resolves to an old page | A .null name is a mutable pointer; the owner re-pointed it. Your browser may also be caching. |
Hard-reload. The on-chain account always shows the current pointer (check the explorer link above). |
| Typed name opened a search instead | The omnibox sent name.null to your search engine before the extension caught it. |
It catches the common search redirects; if your engine is unusual, type http://name.null directly. |
| Reload didn't change anything | Chrome loaded a stale copy. | Check the version on the extension card reads 0.1.2; if not, remove and re-add the extension/ folder. |
Browser support: works today in any Chromium browser (Chrome, Brave, Edge, Arc, Opera). Firefox and Safari ports, a mobile resolver, and a Web Store listing are on the roadmap.
extension/ ← load THIS folder as unpacked
manifest.json MV3 manifest
background.js catches .null navigation, redirects to the resolver page
codec.js pure decode helpers for the on-chain NullDomain layout
null-resolver-page.* the resolver page: Solana lookup → Arweave redirect + states
popup.* toolbar popup: status + custom-RPC setting
icon.png
test/codec.test.js 20 checks on the byte layout / base64url encoding
AGENTS.md resolve .null from code (for AI agents & backends)
Run the tests: node test/codec.test.js
- Read-only. The resolver only reads public Solana accounts and fetches public Arweave content. It never asks for, holds, or signs with a key.
- No backend, no analytics. Everything runs in your browser against public RPCs you can change.
-
host_permissionsis<all_urls>because it must see navigations to any*.nullURL. It does nothing on non-.nullpages.
Built by Parad0x Labs. MIT licensed — fork it, ship your own client, resolve .null anywhere.
null servers. null censorship. null permission.