Tor Project × Funding the Commons · Campaign retrospective

Funding Internet Freedom

A retrospective on the round that turned many small, privacy-preserving crypto donations into real support for ten internet-freedom projects. May 19–June 19, 2026.
Tor×Funding the Commons
$201,481 to ten projects
$174,536 in matching grants  ·  $26,945 in direct donations
662
Donations
10
Projects funded
27%
Given in Monero
$205,337
Match pool raised
$5,000
Minimum per project
~6M
Page visits

At a glance

The campaign proved the mechanism and the rails. It also produced a hard, useful result: millions of visits converted to roughly $27,000 in direct donations, and fixing that conversion is most of what we'd change.


1Why this round

Internet freedom is losing ground. Freedom House's 2025 Freedom on the Net report counts fifteen straight years of global decline, and the tools that fight back (browsers, circumvention networks, censorship monitors) depend on a funding base that keeps narrowing. A small set of institutional funders carries most of it, and several have recently pulled out. When that money moves, tools go quiet.

This round tested a different model: fund the tools the way people use them, through many small, privacy-preserving crypto donations multiplied by a matching pool, on rails no single funder can switch off.

The Tor Project brought the reach and the trust: distribution on the browser home page, a vetted cohort of ten projects, the campaign's marketing, and a name the crypto public already knows. Funding the Commons brought the funding mechanism, the operations, and this analysis. Cake Wallet built the multi-coin, self-custody receiving rails, anchored the pool, and ran a crypto workshop for the projects. The Public Goods Foundation held the pool as fiscal sponsor and charged nothing to do it.

The ten projects: Onion Browser (Tor browsing on iOS), Unredacted (censorship-circumvention infrastructure), Osservatorio Nessuno (digital-rights monitoring and Tor infrastructure, Italy), OnionShare (anonymous file sharing), OONI (global censorship measurement), Ricochet Refresh (metadata-free messaging), SecureDrop (whistleblower submission system), OpenArchive (secure media preservation), Paskoocheh / ASL19 (app distribution for censored regions), and the Miaan Group (digital security for Iranian civil society).

2Round design

Classic quadratic funding, with one deliberate reversal. Quadratic funding (QF) matches by the number of donors, not the size of donations, so broad support from many small donors counts for more than a few large gifts. About six weeks before launch, the team dropped its planned heavy anti-sybil machinery. The worst anyone could do was shift match funding between trusted projects, and every donation still reached a real internet-freedom organization in full. Heavy identity checks would have turned away the very privacy-minded donors the campaign was built for, and the checks were more than the team could build in time. Integrity moved to the back of the process: automated flagging, then review before distribution, with flagged donations still reaching their project but not counting toward the match. Section 5 reports the audit results.

How quadratic funding works
The match rewards how many people give, not how much. Many small donations earn a far bigger match than a few large ones of the same total.
$100 from 100 people
Big match
$100 from 1 person
Small match

Privacy-coin parity. Donations were accepted in BTC, ETH, ZEC, XMR, and GLM. Monero was verified cooperatively through beneficiary wallet exports and, by explicit ruling, matched on equal terms with transparent chains. A campaign for privacy tools does not penalize donors for using privacy money.

Self-custody rails, minimal platform. Donations went directly to each project's own wallets, with no custodial intermediary for the crowd's direct donations. The platform was a static site, fully functional with JavaScript disabled and mirrored as an Onion Service, with QR codes for deposit addresses and a separate on-chain indexer publishing totals every 60 seconds for transparent public chains. That indexer skewed the publicly displayed estimates, since Monero and centralized-exchange transactions didn't index in real time. The site ran no browser extensions, and wallet addresses were byte-compared at build time against a human-reviewed list, so any mismatch failed the build. That address-substitution defense held when the round was attacked for real (see Section 5).

The match waterfall. Donors could give in two ways: directly to a specific project, or into the match pool itself, the second for donors who wanted to lift the whole cohort rather than pick one. Sponsor and community contributions to the pool were converted to USDC (a US-dollar stablecoin) by the fiscal sponsor. From the match pool came a 15% operations fee (10% Tor Project, 5% Funding the Commons, the only fee taken from the pool beyond $2,576 for external accounting and legal services), then classic per-donor quadratic funding over eligible donations. After the round, the team added a $5,000 combined floor, funded pro-rata by the projects above it, so no project would leave with less than $5,000 between its direct donations and its match.

3Funding results

Where the money came from

The public donated $26,945 straight to the ten projects, and every dollar of it passed through in full. A separate matching pool of $205,337, put up by sponsors and the community, multiplied those donations: after a 15% operating fee ($30,800), $174,536 of the pool was handed out as matching grants.

So each project kept its own donations and received a matching grant on top. Across all ten, projects received $201,481 in all, the $26,945 donated plus $174,536 matched. Add the pool and the donations together and $232,282 moved through the round, which splits into $201,481 to the projects and the rest to operations.

The realized pool reconciles against wallet balances, and its main USDC account ties to the cent ($171,769.13). The $30,000 Ethereum Foundation grant is carried at face value; it was secured in the campaign's final days and formally awarded on June 29, and its realized value may shift slightly once it converts. The pool contributions that were swapped to USDC realized about $12,000 less than their donation-time spot value, a mix of swap slippage and market depreciation across the May-to-June window. The fiscal sponsor's external legal and accounting costs, roughly $2,576, were settled from the pool before these balances were measured; the fiscal sponsor took no fee of its own.

Where the money went
Of the $232,282 that came in, $201,481 reached the ten projects. The rest was the 15% operations fee, charged only on the matching pool; every direct donation passed through in full.
$201,481to the ten projects
To the projects · $201,481Operations · $30,800 (15% of the pool)

The distribution

Classic per-donor quadratic funding ran over 662 eligible donations ($26,945.29, of which $7,325.56 arrived as Monero), with the $5,000 combined floor:

Project Direct donations Donor units QF share (pre-floor) Share of match pool Match Total to project
Onion Browser $11,854 190 63.3% 56.9% $99,266 $111,119
Unredacted $5,262 129 22.6% 20.3% $35,467 $40,729
Osservatorio Nessuno $2,894 84 7.5% 6.7% $11,740 $14,633
Paskoocheh (ASL19) $390 32 0.6% 2.6% $4,611 $5,000 ◆
OpenArchive $462 23 0.4% 2.6% $4,538 $5,000 ◆
SecureDrop $475 19 0.3% 2.6% $4,525 $5,000 ◆
Ricochet Refresh $930 34 1.0% 2.3% $4,070 $5,000 ◆
OONI $986 24 0.8% 2.3% $4,014 $5,000 ◆
OnionShare $1,066 53 2.4% 2.3% $3,934 $5,000 ◆
Miaan Group $2,628 23 1.2% 1.4% $2,372 $5,000 ◆
Total $26,945 100% 100% $174,536 $201,481

Donor units are each project's own donor count, so they add up to more than the round's roughly 580 donors: anyone who backed more than one project is counted in each. ◆ marks a project held at the $5,000 floor. QF share is the quadratic result before the floor; share of match pool is what each project actually received after it, so the two differ wherever the floor moved money. Figures are rounded to whole dollars, with exact amounts in the annex, so a row or column can differ by a dollar or two.

The results are concentrated. Onion Browser drew 63% of quadratic-funding weight, and the top three projects carry 93% of it (84% of the final match, after the floor tops up six of the other seven). That is what quadratic funding does with a donor base that overwhelmingly favored a few projects: it amplifies breadth of support, and breadth was uneven. Monero widened the gap further — with it excluded, Onion Browser's share would have been about 49%, but Monero donors pushed it to 63%.

The floor was a deliberate post-round decision. Because all ten projects had put real work into promoting the campaign, the team didn't want any of them leaving with a token sum, so once the numbers were final it guaranteed each at least $5,000. The six whose quadratic result fell short were topped up to that floor, funded pro-rata by the four that cleared it — $16,695 in all, about 9.6% of the match pool. Three of those four still finish above the floor in the table; OnionShare is the edge case, landing just $264 over it and then paying enough in to end up exactly on it.

We checked the numbers against the platform's own scores to the cent, then re-derived them twice more with separately written code: one run validated the quadratic-funding and floor machinery, and a second, using a structurally different floor algorithm, reproduced the final table exactly.

Concentration was also the round's most contested outcome, and the projects' feedback was candid. Raw donations ran from about $11,900 for the top project down to a few hundred dollars for the smallest; quadratic funding stretched that into a top grant near $99,000, while the floor held the smallest projects at $5,000. Projects that did well liked the mechanism; several others found the competitive framing a poor fit for organizations not built to campaign for themselves. The next round would add a per-project match cap, set high enough that promotion stays worthwhile, and use plainer public language for how the mechanism works.

Why these differ from the website's live numbers

Throughout the round, the campaign site showed a running projection of each project's match. Those live numbers were always an estimate, and the final reconciled figures differ from them, for a couple of projects by a lot. Three things account for the gap.

The biggest factor is Monero. The live tracker read donations from public blockchains, and Monero is private by design. Ways to include Monero in the live numbers were explored, but the team did not have the development capacity to build them before the campaign. So the site's projection was blind to the 27% of direct-donation value that came in Monero, and distributed the match as if that Monero did not exist. The final calculation includes it, matched on equal terms with every other currency, which moved match toward the projects that received Monero and lowered the projected share of those that received little or none. A project that ran a strong campaign on Bitcoin and Ethereum but received no Monero saw the largest drop between projection and final result, not because it did worse, but because the final figure counts donations the live one never could. Several projects also chose not to accept Monero, given the technical and legal hurdles of doing so in some jurisdictions, which widened the skew.

The fee and the floor account for the rest. The 15% operating fee comes off the whole pool, so the total handed out is smaller than the pre-fee estimate the site showed. The floor guarantees every project a $5,000 minimum, funded pro-rata by the projects above it. And the live projection ran against a pool still being reconciled, so it was never going to tie to the final to the dollar.

One clarification on what each project receives. The matching grant is separate from the direct donations that reached each project's own wallet during the campaign. What the fiscal sponsor paid out is the matching grant; a project's total from the round is that grant plus the direct donations it already holds. The annex lists each project's live projection against its final matching grant.

Match funders

How the $205,337 matching pool was funded
The matching pool multiplied every donation. It came from named sponsors and from community members who gave to it directly.
Community
≈$50K
Cake Wallet
$50K
Zcash Community Grants
$50K
Ethereum Foundation
$30K
Logos
$10K
Anonymous
$10K
Octant / Golem
$5K
Named sponsorsCommunity

Six sponsors committed $155,000: Cake Wallet and Zcash Community Grants anchored the round at $50,000 each, followed by the Ethereum Foundation at $30,000, Logos and an anonymous Monero funder at $10,000 each, and Octant at $5,000. Zcash Community Grants gave in shielded Zcash, which couldn't be integrated into the live donation tracker in time. Community members contributed the rest of the roughly $205,000 pool directly, in ETH, BTC, and XMR.

Internet freedom has declined for fifteen straight years. The tools fighting back need funding.

4Participation

On the transparent chains, the campaign's tracker recorded 492 donations from 414 donors. After excluding one post-close donation and adding the 171 Monero contributions (donor address unknowable by design), the eligible set is 662 donations across roughly 580 donors. By value, the direct donations split about 52% Bitcoin, 27% Monero, 13% Ethereum, and 8% Zcash. Monero was invisible to the public tracker, yet made up more than a quarter of the total. The site's public total showed about $19,620 raised, transparent chains only; the roughly $7,300 that came in Monero brings direct donations to about $27,000 — so the campaign's public totals systematically understated real participation.

Share of donation value by currency
How the $26,945 given directly to projects broke down across the four currencies that drew value. Golem's GLM was accepted too but received about $0; rounded slices don't quite sum to the total.
$26,945 DIRECT DONATIONS
Bitcoin52%$13,930
Monero27%$7,326
Ethereum13%$3,530
Zcash8%$2,156

The privacy-preserving design has two blind spots. We can't report new-versus-returning donors, demographics, or geography, because the campaign deliberately collected none of it. And on Monero, donor counts are transactions, not people.

This round inverted Tor's historical pattern: in Tor's prior crypto campaigns individual giving exceeded institutional support, but here the match pool dwarfed direct donations. Part of the reason is a structural handicap on conversion. Tor Browser users were asked to fund adjacent tools they may not personally use, one leap further than donating to Tor itself, while the donors who most value privacy tooling are often the most hesitant to donate at all. A campaign for privacy-preserving donors has to earn trust twice: once for the cause, once for the act of donating. Many users of the featured tools also live under authoritarian regimes and face real financial and safety barriers to giving.

Reach was never the problem. Conversion was. The campaign page drew about six million visits across the month (242,410 on launch day, peaking the day after), and the Tor Browser start-page banner carried the campaign to an estimated 2.5 million views a day. Against that reach, direct donations totaled roughly $27,000: a conversion failure, and the round's most important negative result. We now have a clean comparison. Tor's own 2025 year-end campaign ran on the same Tor Browser takeover banner and raised about $237,000 per month in crypto alone (roughly $710,000 over three months); this round raised roughly $27,000 in its month, about a ninth of that rate. Because that campaign was also crypto and used the same banner, the shortfall is not the crypto rails. The comparison does not hold everything constant, though — that round funded Tor itself at year-end, while this one funded third-party tools mid-year — so what it isolates is the rails, not the whole answer.

Reach vs. conversion
The campaign reached a huge audience, but only a tiny fraction of visitors donated. This was the round's biggest lesson for next time.
~6M
Campaign page visits
→
662
Donations · $26,945 direct
About 0.01% of visits became donations. Reach was huge; converting it is the work for next time.

Ten days in, the team formally re-weighted the campaign. A narrative set in launch coverage, that institutional money follows community signals, did not apply here, and Funding the Commons shifted toward institutional match funders, which is where most of the round's dollars came from. A mid-run conversion rescue shipped 17 copy and UX changes to the site (new hero, trust strip, match-number labeling, consolidated FAQ). Deeper structural fixes, including an amount-first donation flow and a "support all projects" default, were identified but deferred to a future round.

5Integrity: the audit, and the one real attack

Before the final distribution was locked, the round ran a full sybil audit: behavioral and concentration detection over the donation set; an on-chain funding-graph pass over 69 Ethereum and 271 Bitcoin donor addresses (254 fully enriched) covering shared-funder clustering, common-input ownership, fresh-wallet fingerprinting, and exchange or hub pruning; and an adversarial verification layer in which every candidate finding was handed to independent skeptics tasked with refuting it from primary chain data.

No sybil cluster survived verification, and no donation lost its match. Every candidate dissolved, on re-derivation, into ordinary privacy-preserving behavior, the exchange withdrawals and relay services that make unrelated donors look superficially linked. This is the false-positive signature a Tor-aligned donor base should produce, and it is why the adversarial layer existed. The audit's single material candidate, an apparent 12-wallet cluster that would have docked one project about $3,500, turned out to be an artifact of our own tooling: a transaction-history cap that made a 1.25-million-transaction relay service look like a private wallet. The skeptics caught it before it touched anyone's money. Coverage on the privacy chain is behavioral-only by design; on unattributable chains, the finding is that no manipulation pattern appeared, not that none is provably absent. Monero is the sharpest case: 27% of direct-donation value, private by design, verified by the projects exporting their own wallets, and counted per transaction — so one donor splitting Monero across many transactions is what the square-root weighting can least tell apart from many separate donors. Nothing in the behavior points to that, but the limit is real, and it falls on the currency that moved the most match.

The attack that did happen. During the round, an address-poisoning operator sent worthless Unicode-lookalike "USDC" and "ETH" tokens to the project wallets and the match pool, including spoof transactions mirroring real pool deposits within about 12 seconds at near-identical amounts, from vanity addresses crafted to resemble real donors. The point of address poisoning is to sit in a wallet's history so that whoever pays out later copies the wrong address. It had zero effect on the distribution, and it produced a concrete disbursement rule now built into the payout process: never copy an address from wallet history; pay only from the independently verified grantee sheet. The audit also noted two benign patterns it chose not to act on, both consistent with ordinary giving rather than manipulation.

6What worked

The threat-model reversal. Dropping donor-side sybil and identity checks for a pre-vetted cohort was the round's most transferable design decision. Within the privacy-chain coverage limit noted above, it cost little in integrity, and it bought privacy-coin parity, zero identity and KYC friction, and a build the team could actually ship.

Privacy rails pulled real money. 27% of direct-donation value arrived as Monero, and a match funder paid its $10,000 commitment in XMR through the same rails as the crowd.

The static, verifiable platform. A no-JavaScript static site, an on-chain indexer, and build-time address verification survived a live poisoning attack without losing a dollar.

Launch press. Eleven earned and syndicated pickups in the launch window, including The Defiant, Cointelegraph, TechRadar, Crypto Briefing, and CyberInsider, consistently carried the campaign's core frame: the first crypto-native funding campaign for the internet-freedom ecosystem.

The Defiant — Tor Project and Funding the Commons Launch Web3-Native Crowdfunding CampaignLaunch coverage in The Defiant, May 19, 2026 ↗

The coordination surfaces. A Signal group with all ten projects for day-to-day coordination, social and comms amplification across every partner account, a PR partnership with Logos that contributed significantly to the media push, and Web3Privacy Now as media partner throughout, with hero and testimonial videos featuring Naomi Brockwell, Eva Galperin, and Kurt Opsahl among others.

Timing. The round landed mid-year, when funders set their budgets, and during a privacy-coin upswing, with Zcash and Monero both up sharply in the months before launch. We'll time future rounds around those cycles more deliberately.

The campaign as a signal. Even at low conversion, the round measured something Tor had not measured before: what Tor Browser users care about funding beyond Tor itself. Run seasonally, that becomes product-development data for the internet-freedom ecosystem.

Institutional validation. The round's most important dollars arrived because the mechanism was legible to institutions. The Ethereum Foundation's $30,000 grant, secured as the round closed once senior Ethereum ecosystem figures had circulated the campaign internally, was the clearest example.

Accounting that reconciles. The realized pool leg ties exactly to wallet balances, the distribution was independently re-derived twice, and the fee basis ended smaller than the campaign's own FAQ had stated (see Section 7).

7What we learned

A signed scope before a single commit. Building the platform across two organizations without a signed, technically detailed scope agreement created avoidable coordination overhead. The next round starts with one, reviewed by every stakeholder it touches (fundraising, sysadmins, engineering), plus explicit roles, decision rights, and deadlines at kickoff, and intake forms that establish each organization's capacity, crypto familiarity, and what it will and won't do on the marketing side.

Communicate capacity changes early. When one side's capacity or budget shifts mid-planning, saying so early lets the other adapt to a known constraint instead of guessing. Surfacing changes as they happen keeps partners aligned.

Instrument the funnel from day one. The campaign had reach in the millions of daily exposures and almost no conversion instrumentation. The one number that would most change the next round, visits to donation page to completed donation, was never cleanly measurable.

Give the donation platform a designer. The round ran without dedicated design for the donation experience, and the site's look and usability likely dampened conversion. With six million visits, professional design and UX may be the highest-value fix for the next round.

One source of truth for numbers. Mid-campaign, the homepage, project pages, and match-pool figures sometimes disagreed: exchange-origin donations dropped, Monero was invisible, and a pledged-but-in-flight $50,000 briefly showed as landed. Every inconsistency a donor notices is trust spent. Reconcile continuously, and disclose invisible donations earlier where possible.

Get fee language exactly right. During the round, the FAQ told donors fees were "15% of total donations." The real basis was the match pool only; direct donations passed through at 100%. Donors were quoted a worse deal than they actually got, and the final accounting corrects and discloses it. Lock fee language before launch.

Pre-bake conversion copy before surfaces freeze. The Tor Browser banner, the campaign's biggest asset, was string-frozen before launch and could not be edited once conversion data arrived.

Ship the donation flow you want before launch. An amount-first flow and a "support all" default were known wants by week two and structurally deferred, as were a donation-success screen (donors asked publicly whether their gifts had arrived, which is not confirmable for Monero), exchange-origin compatibility (some exchanges flagged the flow as suspicious, and other non-standard transactions never appeared in the public feed), and per-currency totals on the page. Launch-week completeness sets the ceiling for everything after it.

Teach the mechanism before asking people to trust it. Crypto and quadratic funding were new to several of the projects, and the mechanism raised questions from launch through payout. The next round opens with a required onboarding session, covering crypto basics, how matching works, and what promotion is expected, packaged as a sponsor benefit. The mechanism also gets plainer public language: raise a little, get a lot more.

Warm relationships close; cold pipelines mostly don't. Most funders came through direct relationships and inbound interest. Start funder engagement months earlier, and lean on the beneficiary projects' own communities for individual donor outreach. One match funder was the exception, reaching us cold by email after finding the campaign online.

State the participation rules up front. The self-donation policy, that you can donate to yourself but it won't be matched, was under-communicated and had to be handled in retrospect rather than declared in advance.

Operator economics need attention to make this repeatable. Funding the Commons' entire 5% share went to compensating the developers who built and ran the platform, and the round as a whole ran with no operating budget: no paid designer, no committed development capacity, volunteer goodwill throughout. The fix is an anchor sponsor for campaign operations, distinct from the match pool, that funds the design, committed development, and project management this round ran without. It touches most of the other lessons here.

Payouts. Distributions to all ten projects were processed the week of July 27. In the first pass, some projects were sent incorrect amounts because match-pool funds and total funds including direct donations were not clearly distinguished. The error was caught and corrected, and every project received its final reconciled total. Tighter internal coordination, and the single source of truth noted above, would have prevented it in the first place.

8What's next

The infrastructure is reusable. The same stack, a pre-vetted cohort round with multi-chain rails, privacy-coin parity, and a fiscal-sponsor pool, is being scoped for future seasonal internet-freedom rounds with Tor, and other organizations have expressed interest in using it. Design changes already agreed for a second round: a per-project match cap, plainer mechanism language, project intake forms, a signed cross-org scope, and an operations anchor sponsor.

The round closed on June 19, 2026. Its ten projects continue their work, each linked above, and the Tor Project welcomes ongoing support through its website.

Annex: the figures, in full

For the record, the precise tables behind the charts above.

Match pool reconciliation

USD
Match pool, realized in wallets at reconciliation $175,336.61
Ethereum Foundation grant (after the round closed) $30,000.00
Gross pool $205,336.61
Operations fee (15%: 10% Tor, 5% Funding the Commons) −$30,800.49
Distributable match $174,536.12

Website projection vs final matching grant. These are matching grants only; each project also keeps its direct donations.

Project Site projection Final matching grant
Onion Browser $90,498 $99,266
Unredacted $47,575 $35,467
Osservatorio Nessuno $31,032 $11,740
OONI $3,150 $4,014
OnionShare $2,096 $3,934
OpenArchive $1,839 $4,538
SecureDrop $1,299 $4,525
Ricochet Refresh $907 $4,070
Miaan Group $4,912 $2,372
Paskoocheh $1,096 $4,611
Total $184,404 $174,536

Match funders

Funder Commitment Note
Cake Wallet $50,000 Launch anchor; also provided the receiving-wallet rails
Zcash Community Grants $50,000 Launch anchor; contributed in shielded Zcash, which the live donation tracker couldn't display in time
Ethereum Foundation $30,000 Grant, awarded after the round closed
Logos $10,000 Launch partner and campaign PR contributor
Anonymous $10,000 Paid in Monero, through the campaign's integrated privacy rails
Octant / Golem Foundation $5,000 Golem's GLM was also an accepted donation currency

Plus community contributions made directly to the match pool in ETH, BTC, and XMR.


Run by the Tor Project and Funding the Commons, with Cake Wallet and the Public Goods Foundation. Match funding from Cake Wallet, the Zcash Community Grants program, the Ethereum Foundation, Logos, an anonymous funder, Octant, and the community members who donated directly into the pool. Thanks to the ten project teams, the funders, the developers who built and ran the platform, and everyone who chipped in.

torproject.org  ·  fundingthecommons.io