lpm pool
Show your Pool revenue stats with per-package weighted downloads.
lpm poolPrints your Pool revenue stats for the current billing period — total weighted downloads, estimated earnings, and a per-package breakdown. Requires an authenticated LPM.dev Registry session (lpm login first).
Example
$ lpm pool
Pool Revenue Stats
billing period 2026-05
weighted downloads 142,830
estimated earnings $18.42
packages (3):
@lpm.dev/acme.toolkit (84,210 downloads)
@lpm.dev/acme.cli (51,003 downloads)
@lpm.dev/acme.icons (7,617 downloads)The current period shows an estimate. Final revenue uses completed installs and the recorded payments for that billing period.
How weighting works
The LPM.dev Registry calculates Pool revenue. Each subscriber's paid author share goes to the eligible packages that subscriber installed during the billing period.
After a successful install, LPM CLI reports the resolved dependency graph. This includes installed versions, overrides, optional dependencies, peer dependencies, and canonical alias targets. A failed download or extraction does not create Pool credit.
Each @lpm.dev/* dependency adds one level. npm packages do not add levels:
project → @lpm.dev/owner.a → @lpm.dev/owner.b → @lpm.dev/owner.c
depth 0 depth 1 depth 2
project → npm-wrapper → @lpm.dev/owner.a → npm-helper → @lpm.dev/owner.b
depth 0 depth 1| Depth | Base weight |
|---|---|
| 0 | 1.00 |
| 1 | 0.70 |
| 2 | 0.49 |
| 3 | 0.34 |
| 4 or deeper | No credit |
The LPM.dev Registry applies these rules:
- Each subscriber contributes at most one observation per package per month. Repeated installs and retries do not add observations.
- The shallowest observed path wins. At equal depth, a path without the same-owner penalty wins before a stable tie-break.
- A dependency with the same owner as its immediate
@lpm.dev/*parent receives 30% of its base weight. - A transitive dependency needs at least two unique installers before its weight counts.
- Publisher access does not create credit, including personal packages and packages owned by the subscriber's organizations.
- Optional packages omitted on the current platform and dependencies absent from the installed graph receive no credit.
For example, a from Alice depends on b from Bob, which depends on c from Bob. The base weights are 1, 0.7, and 0.49. The same-owner rule reduces c to 0.147, before other eligibility rules and rounding.
Unmanaged clients do not report a completed dependency graph. Their authenticated Pool downloads count as direct observations for the fetched packages only.
Older LPM CLI versions that report only package roots can still complete installs successfully. The LPM.dev Registry credits eligible reported roots after it verifies their versions and authenticated download evidence. It does not infer transitive dependencies from these reports. Transitive packages can receive less credit until subscribers update LPM CLI. Access checks and payment rules still apply.
Payments and refunds
The author share is 80% of the paid Pool amount, excluding tax. Discounts reduce that amount. A $6 discounted payment contributes $4.80 to author revenue.
Refunds reduce the recorded contribution. Pending refund adjustments hold new payouts, retries, and payout setup recovery until revenue calculation handles those adjustments.
Recover an unconfirmed install report
If LPM CLI reports pool_attribution_unconfirmed, retry the same install command. LPM CLI can reuse cached packages and retry the report without duplicate credit.
Full graph reports have limits of 10,000 graph nodes, 50,000 edges, and 1,000 @lpm.dev/* package instances. LPM CLI includes only paths relevant to @lpm.dev/* packages. An oversized or incomplete graph returns an error instead of partial credit. Older clients can send up to 200 roots per report.
--json output
{
"success": true,
"billingPeriod": "2026-05",
"totalWeightedDownloads": 142830,
"estimatedEarningsCents": 1842,
"packages": [
{
"name": "@lpm.dev/acme.toolkit",
"owner": "acme",
"packageName": "toolkit",
"installCount": 91500,
"weightedDownloads": 84210,
"sharePercentage": 58.96,
"estimatedEarningsCents": 1086
}
]
}| Field | Meaning |
|---|---|
billingPeriod | ISO month (YYYY-MM) the stats cover |
totalWeightedDownloads | Sum across all your pool packages |
estimatedEarningsCents | Accruing total in cents (/100 for dollars) |
packages[].installCount | Unique subscriber observations before weighting |
packages[].weightedDownloads | Post-weighting count that determines share |
packages[].sharePercentage | Your share of this package within the pool, in percent |
packages[].estimatedEarningsCents | Per-package accrual in cents |
Any field can be absent (server omits null entries). Treat the envelope as forward-compatible — additional fields may appear in future releases.
Flags
lpm pool takes no specific flags besides the global flags. --json switches the output to the structured envelope above.
See also
- Distribution mode — what
private/pool/marketplacemean and why mode changes are irreversible lpm publish— how a package opts into Pool (the dashboard-driven flip)- Publishing a package — walkthrough including the pool/marketplace flip