Publishing and partner review
Read the review paths for a hook, a pool or a launchpad integration, the evidence each asks for, and the Hookr routes a listing needs.
On this page
Three ways to bring work to Hookr, and the evidence each one asks for. All three are manual review. None of them requires deploying anything on Hookr, and none of them changes a pool that is already open.
Analyze a Hook
Analyze takes an address or a source file and reports the hook's permission flags, the callbacks it implements, and what the source says it does. It is a read; it publishes nothing and it submits nothing.
Start here whether or not you intend to publish. The analyzer's output is also the input the publication path asks for, and it carries the fork lineage through to a draft submission.
Publish a Hook
Publish a hook is the path for putting a Uniswap v4 hook in the external hook catalog. Any supported v4 hook can be analyzed and indexed for free. Listing it on hookr.fun needs a Hookr route, which Listing Tiers sets out. The four proofs a submission carries:
| Proof | What it means |
|---|---|
| Source | a public repository at a pinned commit, with a license and attribution for anything forked |
| Tests | the failure paths, not only the happy path |
| PoolKey | the exact hook address a pool names, so a reader can check the claim against the chain |
| Readback | live state read from the deployment, not from the submission |
Deployment evidence is included only when it exists. A hook that is not deployed is listed as not deployed.
Listing Tiers
Analyzing a hook and indexing it are free. Listing a hook on hookr.fun needs at least one Hookr route.
Indexing is automatic. The analyzer reads the hook, Hookr keeps its report and a catalog record, and the hook shows in HookrScan and Discover with its live data. Listing is what Hookr does next: a hook page, a card in the Hooks marketplace, the outside-hook view with a trade link, and a place in the builder or on the launch floor where the hook fits. That second step is the one that needs a route.
| Tier | What Hookr does | What it asks |
|---|---|---|
| Build on Hookr | Runs the owner's logic as Hook Blocks on a Hookr hook, or on a hook the owner deploys | Nothing beyond the contracts: Hookr's share is set by the hook, and a pool's terms freeze when it opens |
| Indexed | The analyzer report and a catalog record, shown in HookrScan and Discover | Nothing. It is free and automatic, and a hook whose owner can change its fees is shown as owner-tunable |
| Listed | A hook page, a card in the Hooks marketplace, the outside-hook view with a trade link, and a place in the builder or on the launch floor | At least one Hookr route, below, and the four proofs above |
| Integrated | Builds for the hook: a swap path in the app, pool-page reads, vault and position cards, buttons for its permissionless calls, and the Uniswap hooklist and routing filings | Routes A and B together, with the freezes under Route B, agreed in writing before Hookr builds anything |
| Custody add-on | A deposit card for a vault, ladder or escrow that holds users' assets | Everything Integrated asks, withdrawals that are always open, and every pause or blocklist power stated |
The tiers apply to listing requests from 11 October 2026. A hook listed or submitted before then moves to them at its next update: a new version, a new pool or a change to its record.
The Three Routes
A Hookr route is a way Hookr is paid when it lists a hook it did not build. A hook needs at least one and may use more.
- Route A, the interface fee. The default. Hookr's app adds a disclosed fee to the swaps it builds into the hook's pools.
- Route B, an on-chain Hookr share. The hook pays Hookr a share of what it takes outside the LP fee, in a way the app can read back from chain.
- Route C, pools opened through Hookr's launcher. The hook's pools open on a Hookr hook or on a hook of the owner's own, where the contracts already set Hookr's share.
Three things hold on every route. Hookr never takes the base LP fee, on its own pools or on anyone else's. No route asks the owner to hold or bond HOOKR. And Hookr runs no keepers for an outside hook: the hook's permissionless calls get a button instead.
Route A: The Interface Fee
This is the default route, and it needs nothing from the hook's contract. Hookr's app takes a disclosed interface fee on the swaps it builds into the hook's pools. The fee is paid in the pool's quote token through the Universal Router's PAY_PORTION command, and the swap shows its rate before the trader signs. The app builds exact-input swaps on these pools: the trader names the amount sold, and the minimum received is stated after the fee. This page states no rate, because the swap that charges it is where it is shown. No hook is listed on this route yet, so no swap on hookr.fun charges it today.
A worked example. Say a team has deployed RebateHook, a Uniswap v4 hook that pays traders a rebate, and opened a TEAM/ETH pool that names it.
- The hook owner analyzes the hook at HookrScan, which is free. Then the owner submits it at Publish a hook with the four proofs: source at a pinned commit, tests that cover the failure paths, the pool's PoolKey, and live readbacks. The owner deploys nothing on Hookr and signs no transaction.
- Hookr reads the proofs. If they hold, it lists the hook: a hook page, a card in the Hooks marketplace, and a trade link on the pool's page. Each swap its app builds into the pool goes through the one pinned Universal Router, with a
PAY_PORTIONstep for the interface fee. - A trader opens the hook's page and starts a swap. The swap shows the interface fee's rate before the wallet opens, so the trader signs knowing it.
- Read on chain. The pool's
Initializeevent on the PoolManager carries its PoolKey, whosehooksfield is the listed address. The explorer shows the hook's verified source at that address. A swap's transaction callsexecuteon the Universal Router at0x8876789976dEcBfCbBbe364623C63652db8C0904with aV4_SWAPstep and aPAY_PORTIONstep, which names the quote token, the recipient and the rate in basis points. The quote token'sTransferto that recipient shows the amount.
Route B: An On-chain Hookr Share
The hook pays Hookr a share of what it takes outside the LP fee, and the chain proves it. Three conditions make a share a route. The recipient is an address only Hookr can change. The rate is one the hook's owner cannot lower without a timelock. And the app can read all of it back from the deployed hook.
A worked example. Say a team has deployed PotHook, a hook that takes a fee on each swap in its pool and pays it into a rewards pot. The team wants to list on route B.
- The hook owner agrees the terms with Hookr in writing first, since nothing is built before they are written down. Then the owner adds the share to the hook: a recipient only Hookr can change, a rate that can rise but cannot fall without a timelock, and public getters for both. The owner freezes the economics per pool when it registers, or makes a Safe behind a multi-day timelock the hook's owner. The hook has verified source and tests for exact-input and exact-output swaps.
- Hookr reviews the four proofs and the share's code, then lists the hook. It builds the readbacks the app checks: the recipient, the rate, the owner and the code hash.
- A trader sees the hook's page, which says it pays Hookr on chain only while those readbacks match the written terms. If one drifts, the page goes back to the Indexed view.
- Read on chain. The getters for the recipient and the rate, the owner and its timelock delay, and the deployed code's hash against the listed source. A swap's receipt shows the share's
Transferto the recipient.
Route C: Pools Opened Through Hookr's Launcher
Pools opened through HookrLauncher on a Hookr hook, or on a hook the owner deploys (an owned root, made from a saved hook), pay Hookr by construction. Their core blocks set Hookr's share and freeze it when the pool opens, so there is nothing to negotiate and nothing extra to read back. The hook's logic is Hook Blocks, not outside code.
A worked example. Say a team wants its token's pools listed under a hook address of its own.
- The hook owner composes the Hook Blocks it wants in the Builder, saves them as a saved hook, and deploys a hook of its own from it through HookrOwnedRootFactory. The deploy call carries exactly the factory's
deployFee(). The owner accepts the role if it named another owner, then callsHookrLauncher.launchwith its hook as the root. Integrating as a launcher has the steps. - Hookr has little to review: an owned root is an unmodified Hookr root, and the factory's reads show it. It lists the hook and its pools like any Hookr hook.
- A trader sees a pool page that shows the Hook Blocks and fees the pool froze when it opened, and swaps through it like any Hookr pool.
- Read on chain. The factory's
ownedRoot(hook)andruntimeMatchesTemplate(hook)show the hook is an unmodified Hookr root. The registry'srootOpenFor(hook, caller)shows who may open pools on it, and the factory'srulesOf(hook)names the core blocks its pools run. Each pool's core config holds the protocol share it froze.
What a Listing Is Not
A listing is not an endorsement, an audit or a routing guarantee. Hooklist and routing covers the Uniswap filings, which Hookr makes for an outside hook only under an Integrated listing.
Start a Partner Integration Review
Integrations opens the brief for a launchpad, a hook generator, an executor adapter, or an existing-token pool integration. One brief, no wallet action, and private contact details stay out of the public catalog.
Integrating as a launcher covers opening pools from a launcher contract.
A partner review is also how a creator or partner gets a wallet approved to run referral campaigns on a pool's fee. Hookr's attestor proposes days only for campaigns from approved wallets, so get the approval before funding one.
Uniswap's Own Paths
Publishing on Hookr is not a substitute for either of Uniswap's:
- The hooklist is Uniswap's public register of hooks.
- The routing allowlist is what lets Uniswap's routing trade through a hook that returns swap deltas or sets a dynamic fee.
Hooklist and routing covers what each one does.