npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@bananapus/distributor-v6

v0.0.7

Published

`@bananapus/distributor-v6` distributes ERC-20 balances or 721 token inventories to many recipients under round-based vesting rules. It is a payout utility package for Juicebox-adjacent flows, not a protocol accounting layer.

Readme

Juicebox Distributor

@bananapus/distributor-v6 distributes ERC-20 balances or 721 token inventories to many recipients under round-based vesting rules. It is a payout utility package for Juicebox-adjacent flows, not a protocol accounting layer.

Architecture: ARCHITECTURE.md
User journeys: USER_JOURNEYS.md
Skills: SKILLS.md
Risks: RISKS.md
Administration: ADMINISTRATION.md
Audit instructions: AUDIT_INSTRUCTIONS.md

Overview

This repo provides reusable distributors for teams that need deterministic post-funding or post-mint distribution.

The package separates distribution mechanics by asset type:

  • JBDistributor coordinates shared round and vesting logic
  • JBTokenDistributor distributes ERC-20 balances using IVotes checkpointed voting power
  • JB721Distributor distributes value to 721 holders using checkpointed voting power, ensuring only holders at round start are eligible

Both concrete distributors implement IJBSplitHook, which makes them usable directly from Juicebox payout splits.

Use this repo when the problem is "how do we distribute already-owned assets over time?" Do not use it when the problem is project accounting, treasury settlement, or terminal execution.

If the issue is "where did the project's value come from?" start in nana-core-v6, nana-721-hook-v6, or the upstream repo that minted or received the assets first.

Key Contracts

| Contract | Role | | --- | --- | | JBDistributor | Shared round-based vesting, claiming, and accounting logic. | | JBTokenDistributor | ERC-20 distributor keyed to IVotes checkpointed voting power. | | JB721Distributor | NFT-aware distributor keyed to checkpointed voting power from the hook's CHECKPOINTS() module. Only NFTs held at round start are eligible. |

Mental Model

  1. a project funds the distributor, often through a payout split
  2. a vesting round begins and snapshots the eligible stake state
  3. recipients collect their pro-rata share as that round vests
  4. some unclaimable value can be reclaimed through explicit recovery paths, depending on the distributor type

This repo does not explain why an allocation exists. It only defines how funded inventory is handed out.

Read These Files First

  1. src/interfaces/IJBDistributor.sol
  2. src/JBDistributor.sol
  3. src/JBTokenDistributor.sol
  4. src/JB721Distributor.sol

Integration Traps

  • distribution correctness depends on the distributor actually holding the assets it is expected to vest
  • ERC-20 and ERC-721 distributions share a mental model, but their edge cases are different
  • releaseForfeitedRewards matters for 721 distributions; token-vote distributions do not have the same burned-token path
  • snapshot timing is part of the trusted surface
  • this repo settles distributions, but it does not prove the upstream entitlement math was correct

Where State Lives

  • round and vesting state: JBDistributor
  • token snapshot inputs: JBTokenSnapshotData
  • vesting schedule state: JBVestingData
  • asset-specific claim behavior: the concrete distributor

High-Signal Tests

  1. test/JBTokenDistributor.t.sol
  2. test/JB721Distributor.t.sol
  3. test/invariant/JB721DistributorInvariant.t.sol

Install

npm install @bananapus/distributor-v6

Development

npm install
forge build
forge test

Useful scripts:

  • npm run test:fork
  • npm run deploy:mainnets
  • npm run deploy:testnets

Repository Layout

src/
  JBDistributor.sol
  JBTokenDistributor.sol
  JB721Distributor.sol
  interfaces/
  structs/
test/
  token, 721, and invariant coverage
script/
  Deploy.s.sol

Risks And Notes

  • distributors are only as trustworthy as the vesting parameters and funding they receive
  • operational mistakes often come from funding the wrong asset or underfunding the distributor
  • teams should review claim timing and snapshot assumptions with the same care they review the payout source

For AI Agents

  • Treat this repo as distribution plumbing, not as the source of upstream entitlement math.
  • Read both the ERC-20 and ERC-721 tests before claiming the flows are equivalent.