Turn code merges into
sustainable open-source funding
Dedalo reads the changes that landed in your repository, scores who contributed what, and distributes a funding round to contributor wallets — taking a protocol fee that funds the network itself, so the network funds itself instead of depending on grants.
dedalo plan --amount 1000. A round of
1000 USDC over two merges: two contributors receive 412.5 USDC each,
the project treasury 150, and the network's protocol fee 25. A third
contributor earned a share and has no wallet on file, so the tool warns
and says how to link them. The table below repeats these numbers column
by column.
$ dedalo plan --amount 1000 Round ded106bd7281 2 merges on main → af3141b5 Gross 1000 USDC PAYEE KIND WALLET SHARE AMOUNT ada contributor 0xAdA00000000… 41.25% 412.5 bea contributor 0xBeA00000000… 41.25% 412.5 treasury treasury 0x22222222222… 15.00% 150 demo-collective protocol 0x33333333333… 2.50% 25 contributors 825 USDC treasury 150 USDC protocol fee 25 USDC → the network warning: 1 contributor earned a share but has no wallet: Cy <cy@example.com> 140 points their share was redistributed; link them with `dedalo identity link`
Four stages, one boundary that matters
Everything that decides who gets what happens offline and deterministically. Only the last stage touches the outside world.
Where a round goes
Cut in a fixed order, off the top, with the numbers under your control.
- 82.50%contributors, by attribution weight — and any rounding dust lands here
- 15.00%your project's own reserve, growing with its activity
- 2.50%protocol fee to the network — how the network funds itself
And what a project becomes
Funding accumulates. Crossing a threshold you set changes what the project is allowed to do — and the ladder only goes up.
Thresholds are configuration, not constants — a project that names none stays in the first stage, which is a perfectly good way to use this. The rules are ordinary Rust and proved rather than promised: raising more never lowers the stage, and the four slices sum to exactly what was harvested. None of it is wired to a chain yet.
What the code guarantees
Not claims — gates. Each of these is held down by property tests that hammer it with thousands of generated rounds.
no floating point in money
Every amount is an integer count of base units. Percentages are basis points. Nothing rounds by accident.
splits conserve the total
Largest-remainder distribution: a round sums back to exactly what you funded. No dust created, none stranded.
fees round down
Rounding remainders land in the contributor pool, never in the protocol's pocket.
one wallet, one transfer
A contributor with several git emails is paid once, so a batch cannot double-send.
nobody is silently dropped
Someone who earned a share but has no wallet on file is reported in the plan, not quietly removed.
rounds are idempotent
The ledger refuses to settle the same plan twice, so a retried CI job cannot pay twice.
Install
Every archive ships a SHA-256 checksum and signed build provenance. The installer refuses to run without verifying the checksum first.
curl -fsSL https://raw.githubusercontent.com/\ dedalo-org/dedalo/main/install.sh | sh
cargo install dedalo --locked
# or, without compiling:
cargo binstall dedalo
Or run it in CI
A payout belongs in the pipeline that merged the code.
- uses: actions/checkout@v5
with:
fetch-depth: 0 # attribution needs the full history
- uses: dedalo-org/dedalo@v0
with:
command: plan
amount: "1000"
Read before you trust it
Two places, and the split is deliberate. The handbook is written; the API
reference is generated per released version, so it matches the crate you
installed rather than whatever main looked like this morning.
quickstart a round in ten minutes money integers, and what is proved dedalo.toml every key, every default verification proved vs. merely tested threat model who could make it pay wrong auditing check a project yourself
# signatures and types, per release docs.rs/dedalo # the library, without the CLI [dependencies] dedalo = { version = "0.1", default-features = false }
Project status
⚠ on-chain broadcasting is not live yet
The pipeline from git history to a verified, reproducible payout plan is implemented and tested end to end. What is missing is the last step, and it is missing on purpose.
Dedalo holds no signing key. A round is deposited once against a Merkle
root and contributors claim; dedalo propose prints the exact
instructions, with their data and their accounts, and people
execute them from a multisig. The vault’s rules are pure Rust with
a test per way it refuses — but the Solana program that would enforce
them is unwritten, unaudited and undeployed, so nothing
has moved a coin.
What has actually shipped
Generated from the project’s changelog at build time, and rebuilt on a schedule — so this is what the repository says, not what somebody remembered to update here.
-
Unreleasednot released
- core: the git → attribution → payout plan → settlement pipeline, with the first three stages pure and offline so a plan is reproducible from history.
- core: integer-only money (
Amount), largest-remainder splitting that conserves every base unit, and a fee schedule in basis points that rounds down in the contributors' favour. - core: content-addressed payout plans, an append-only ledger, and refusal to settle the same plan twice.
- cli:
dedalo init,scan,contributors,plan,settle,status,identity,proposeandledger, each with--json. - git:
[git] lands_asdecides what counts as a landed change — a merge commit, or every commit on the branch's first-parent line. A squash-merge repository produces no merge commits at all, so the previous behaviour paid for nothing on the default setting of most projects. - chain: the chain is Solana. Addresses are base58 over thirty-two bytes, Merkle leaves are
sha256over packed little-endian fields, and instruction data is Borsh.dedalo proposeprints the accounts an instruction takes as well as its data. - and 4 more in the changelog
-
0.0.02026-08-25
- crate: a placeholder published to crates.io so that
dedalocould not be taken while the tool was being built. It had no library surface and no dependencies; the binary answered--versionand otherwise printed where the code was. - Nothing in it computed, moved or recorded money.
- Publishing an empty version rather than the work in progress was deliberate. A version can be yanked but never withdrawn, so the first number that carries code should be one somebody can rely on. That number is
0.0.1. - It was cut from a branch that no longer exists. For six days
mainheld the placeholder and the code lived onv0.1; the arrangement cost more than it bought —Closes #Nnever fired,cargo install --gitinstalled a binary with no subcommands — and the code came back tomain.
- crate: a placeholder published to crates.io so that
The full changelog is in the repository, and this is generated from it.
What else is here
Everything in the organisation is open source and MIT licensed.
The protocol: attribution, payout plans,
the hash-chained ledger, the claim contract,
and the CLI and GitHub Action that drive them.
rust · handbook · api · source
Attribution where the code is. Shows who
earns from the lines in front of you, read
from the same history a payout comes from.
lua · early · source
Contributing pays
Dedalo is open source, MIT licensed, and built by the community. If you care about Rust, developer tooling and sustainable open-source economics, contributions are welcome — and they are literally what the project pays out for.
Or fund it
A project whose subject is transparent funding should be transparently funded, so the collective's ledger is public — where the money went is a page you can read rather than a claim.
Sponsoring is all it is. Dedalo does not integrate with Open Collective and is not going to: what it is built on is git, Solana, Rust and formal verification, and a fifth dependency that has to be true about a contributor's project would be a fifth thing to keep true.