Skip to content

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:

ProofWhat it means
Sourcea public repository at a pinned commit, with a license and attribution for anything forked
Teststhe failure paths, not only the happy path
PoolKeythe exact hook address a pool names, so a reader can check the claim against the chain
Readbacklive 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.

TierWhat Hookr doesWhat it asks
Build on HookrRuns the owner's logic as Hook Blocks on a Hookr hook, or on a hook the owner deploysNothing beyond the contracts: Hookr's share is set by the hook, and a pool's terms freeze when it opens
IndexedThe analyzer report and a catalog record, shown in HookrScan and DiscoverNothing. It is free and automatic, and a hook whose owner can change its fees is shown as owner-tunable
ListedA 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 floorAt least one Hookr route, below, and the four proofs above
IntegratedBuilds 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 filingsRoutes A and B together, with the freezes under Route B, agreed in writing before Hookr builds anything
Custody add-onA deposit card for a vault, ladder or escrow that holds users' assetsEverything 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_PORTION step 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 Initialize event on the PoolManager carries its PoolKey, whose hooks field is the listed address. The explorer shows the hook's verified source at that address. A swap's transaction calls execute on the Universal Router at 0x8876789976dEcBfCbBbe364623C63652db8C0904 with a V4_SWAP step and a PAY_PORTION step, which names the quote token, the recipient and the rate in basis points. The quote token's Transfer to 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 Transfer to 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 calls HookrLauncher.launch with 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) and runtimeMatchesTemplate(hook) show the hook is an unmodified Hookr root. The registry's rootOpenFor(hook, caller) shows who may open pools on it, and the factory's rulesOf(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.