Which permissioned ledger fits your situation
If you are a regulated consortium or bank shortlisting three open-source ledgers, the core answer is this: choose Hyperledger Fabric when many participants need channel-scoped data and general-purpose chaincode in Go, Java or Node.js. Choose Hyperledger Besu when your engineers already know Ethereum tooling and you will run a private QBFT network. Choose Corda when transactions are bilateral or move among small groups, and notaries and JVM-based CorDapps fit your model. Two facts shape the shortlist. Besu has removed Tessera privacy and onchain permissioning, so privacy on Besu now depends on local permissioning and separate networks. Corda 5 is R3's maintained line, while the open-source Corda 4 tag line is the older architecture in the corda/corda repository.
Start by mapping your data flows. Ask which parties must see which records, and whether those sets change over time. Fabric channels and private data collections suit shared ledgers where a subset of members needs confidential records. Corda's point-to-point flows suit deals where only the counterparties and a notary should see the transaction. Besu fits when the network design centers on account-based Ethereum contracts. Also check your team's skills, because each platform needs a different language, consensus model and operations routine. Confirm with each vendor which Fabric line, Besu release and Corda line you would deploy, and what support window applies to it.
Plan for the risks that differ by platform. Fabric's upgrade path requires migrating any Kafka ordering to Raft and moving all channels to the v2.x lifecycle before upgrading to v3.x, and you should back up the ledger and MSPs before each step. Besu's Bonsai database auto-upgrades on first start, and older Besu versions cannot open the upgraded database, so take a backup before every upgrade. For Corda, confirm whether your project depends on Corda 5 features or on the Corda 4 codebase, since the two are separate architectures. Ask your shortlisted vendors for their documented upgrade and rollback procedures before you commit to a platform.
Which platform fits which scenario
This table maps common team situations to the platform that usually fits best, with the condition that makes each choice hold. Read each row as a starting point: the condition column tells you what must be true in your organization before the recommendation applies.
| Scenario | Best fit | Condition that makes it true and what to confirm |
|---|---|---|
| Multi-party consortium sharing some data per channel | Hyperledger Fabric | Fits when participants need separate channels or private data collections for subsets of data. Confirm that your governance body can agree on channel membership, endorsement policies and who runs ordering nodes. |
| Ethereum-experienced team building a permissioned network | Hyperledger Besu | Fits when the team already writes Solidity and operates EVM tooling and wants QBFT proof of authority on private networks. Confirm that Besu's permissioning and the removal of Tessera privacy and onchain permissioning in recent releases fit your access and confidentiality design. |
| Bilateral trade or settlement needing strict privacy between two parties | Corda | Fits when transactions should be shared only with the parties involved and a notary validates uniqueness without global broadcast. Confirm that your architecture needs point-to-point flows and that a notary model suits your settlement rules. |
| Team that prefers Java or Kotlin developers | Corda or Hyperledger Fabric (Java chaincode) | Corda CorDapps are written in Java or other JVM languages and Corda itself is written in Kotlin. Fabric chaincode also supports Java, alongside Go and Node.js. Besu runs on Java, but application logic on it is usually EVM contracts, so confirm whether your developers need Solidity skills. |
| Team that wants to upgrade on a maintained release line | Hyperledger Fabric | Fabric maintains v2.5 as the long-term support line for production and v3.1 as the newer line. Confirm which line your network will run and plan the migration from Kafka ordering and legacy lifecycle if you are upgrading an older network. |
| Team that needs a Byzantine fault tolerant ordering service | Hyperledger Fabric | Fabric v3.0 added a BFT ordering service based on SmartBFT, which requires v3.x. Confirm that your ordering node count and operator model meet the fault tolerance you need, since BFT is not available in the v2.5 line. |
| Team that already runs Besu on public networks as an execution client | Hyperledger Besu | Fits when you need an execution client paired with a consensus client on public networks such as Ethereum Mainnet. Confirm that your use case needs public chain connectivity rather than a closed consortium network. |
| Team that must match an existing Corda 4 estate | Corda (verify version) | Corda 4 comes from the corda/corda repository and Corda 5 from corda-runtime-os. Confirm with R3 or your own assessment which version and support path your existing network uses before choosing either route. |
Licensing and editions for Fabric, Besu and Corda
Hyperledger Fabric is licensed under Apache-2.0, and the hyperledger/fabric repository is the source for the code you would run. The project is part of LF Decentralized Trust and is listed there as a Graduated project. Fabric maintains two lines in parallel: v3.1, with the latest release v3.1.5 published June 18, 2026, and v2.5, with the latest release v2.5.16 published June 17, 2026. The Fabric documentation identifies v2.5 as the long-term support release for production users, so both lines receive patch releases.
- License: Apache-2.0 for the platform code, with no license fee for the software itself.
- Release lines: v3.1 (latest v3.1.5) and v2.5 LTS (latest v2.5.16), both patched in parallel.
- Production baseline: the documentation names v2.5 as the LTS choice for production users.
- Upgrade path: v3.0 removed Solo, Kafka and the v1.x legacy chaincode lifecycle, so Kafka ordering must move to Raft first.
- Not in the supplied facts: paid or vendor-backed support terms for Fabric.
Confirm with your integrator or support provider which line they will support, and ask for the support window for each line in writing before you commit to a version.",
Besu is an Apache-2.0 Ethereum client written in Java, hosted by LF Decentralized Trust and listed there as a Graduated project. Besu uses calendar versioning in a year.month scheme and ships roughly monthly. The GitHub releases page lists 26.7.0 (July 13, 2026), 26.8.0 (August 19, 2026), 26.9.0 (September 25, 2026) and 26.10.0 (October 16, 2026). Because the cadence is frequent, the version you run needs a planned upgrade process rather than an occasional one.
- License: Apache-2.0, with source in the besu-eth/besu repository.
- Release cadence: calendar versions such as 26.10.0, released roughly monthly.
- Runtime requirement: according to the 26.6.0 release notes (June 4, 2026), Besu requires JDK 25 to build and run.
- Upgrade caution: the 26.10.0 release notes state the Bonsai database auto-upgrades on first start, and older versions cannot open it, so take a backup before upgrading.
- Not in the supplied facts: whether any Besu support or commercial agreements are available from LF Decentralized Trust or other providers.
Ask your implementation partner which Besu release they will support, how they will test each monthly release, and who pays for the JDK and upgrade work.",
Corda has two separate code lines, and the license terms are only part of the picture. The corda/corda repository holds the first architecture, covering Corda versions 1 through 4, and is licensed under Apache-2.0. The most recent Corda 4 open-source tag in that repository is release-os-4.14.3. The second architecture lives in corda-runtime-os, which forms the basis of Corda 5. R3 develops and maintains Corda 5 and makes it available under Apache-2.0, so the license is the same across both lines while the codebases and release paths differ.
- Corda 4 line: Apache-2.0 in the corda/corda repository, with release-os-4.14.3 as the latest open-source tag.
- Corda 5 line: Apache-2.0 in corda-runtime-os, developed and maintained by R3.
- Different codebases: the two lines are not drop-in upgrades of each other, so plan them as separate choices.
- Tags and branches: check the corda/corda tags page before pinning a version, since tags can change.
- Not in the supplied facts: paid support, R3 commercial terms, or the support window for either line.
Confirm with R3 and your integrator which Corda line is supported for your use case, and get the support terms and end-of-support dates in writing.
How Fabric's channels and Corda's flows keep data private
Fabric, Besu and Corda differ in who can see what by default, so the privacy design is a core architecture decision rather than a feature to add later. In Hyperledger Fabric, transactions follow an execute, order, validate flow, and visibility is set by channels, which partition a network into separate ledgers shared only among member organizations. Within a channel, private data collections keep sensitive values off the shared ledger while still recording a hash on it, so the design you must verify is which organizations belong to each channel, which peers hold which collections, and whether endorsement policies match the parties who should see the data. Confirm these settings with a test network before production, because a channel membership error is hard to unwind once data has been committed. Besu takes a different path. Its private network privacy relied on Tessera private transactions, but the maintainers have announced the sunsetting of Tessera privacy, and Besu 25.6.0 removed the feature along with onchain permissioning. Visibility on a current Besu network therefore depends on local permissioning: node permissioning restricts which peers can connect, and account permissioning governs onboarding and which actions accounts may take, both configured in permissions files on each node. Because these files are local, the reader must design a process to keep them consistent across participants and must verify that no unintended node can peer with the network. Any previous Tessera-based design needs a documented migration plan, and the reader should check it against the Besu release notes for the version they plan to run. Corda uses neither channels nor a global ledger. Its flow framework moves data point to point between the participants of a transaction, and its notary infrastructure checks the uniqueness and sequencing of transactions without broadcasting their contents to the whole network. The practical questions are which parties each flow includes, which notary service the business accepts, and whether the CorDapp limits what each node stores. Corda 4 and Corda 5 use different architectures, so confirm which line supports the privacy controls you need before committing.
What drives the running cost of each ledger
Running cost on each ledger comes from the nodes you operate, the upgrades you must carry out, and the developers who can maintain the code. The cards below separate those drivers so you can ask each vendor or implementation partner for the right line items in a quote.
Ordering and notary node count
Fabric runs an ordering service whose Raft cluster needs a majority of nodes available, so a five node cluster tolerates the loss of two nodes. Each extra orderer adds hosting, monitoring and certificate work for your team. Corda relies on notary nodes that validate uniqueness and sequencing, so you must decide how many notaries and in which trust domains they sit. Besu private networks rely on QBFT validators, so validator count drives hosting cost in a similar way. Ask each option what minimum node count it needs for your fault tolerance target, and who hosts each node.
Peer and node operations
Every Fabric peer, Besu node and Corda node carries its own certificates, configuration, storage and monitoring. Fabric also expects you to back up the ledger and MSPs before an upgrade, and to roll orderers and peers in sequence. Corda nodes run their own database and identity material, so each participant's operating load scales with the number of members. Estimate the hours per node per month for patching, certificate renewal and incident response, and check whether your team or a partner will carry those hours.
Besu upgrades and Bonsai rollback
Besu ships a new release roughly monthly, and the 26.10.0 release notes say the Bonsai database upgrades automatically on first start. Older Besu versions cannot open an upgraded database, so a rollback depends on a backup taken before the upgrade. Plan storage for that snapshot and a tested restore procedure. The recurring cost is the upgrade cadence itself, not a one-time migration. Confirm the release cadence and rollback test you will commit to before you budget the operations team.
Fabric v3.0 migration work
Fabric v3.0 removed Solo and Kafka consensus and the v1.x legacy chaincode lifecycle. Networks still on Kafka ordering must migrate to Raft, and every channel must move to the v2.x lifecycle before upgrading. This is one-time engineering work with testing and change control attached. Fabric v2.5 remains the long-term support line for production, so staying on it defers the migration but does not remove the need to plan it. Ask your partner to scope the migration as a separate line item from routine upkeep.
Chaincode and CorDapp skills
Fabric chaincode is written in Go, Java or Node.js, and Corda CorDapps are written in Java or other JVM languages on a Kotlin-based platform. Your recurring cost depends on whether your engineers already know these stacks or must hire or contract for them. Corda's flow framework adds negotiation logic that developers must model correctly. Check how many developers can maintain each contract set after go-live, and whether application upgrades can ship independently of the network.
Governance and membership costs
Each member of a permissioned network pays for its own nodes, its share of consortium governance and any change to membership or permissioning rules. Besu's local permissioning files must be kept in step across nodes, and Fabric membership depends on MSP and CA administration. Corda networks depend on agreed network operators and notary policy. Ask who runs the membership process, who approves changes, and whether those tasks appear in the quote or are left for the members to absorb.
What implementing each platform involves
A Hyperledger Fabric network starts with identity and ordering decisions that are hard to change later. Each organization needs a Fabric CA, which can either register identities against an LDAP user registry or issue enrollment certificates directly, and the CA also handles renewal and revocation. Ordering is the next decision: Fabric documentation recommends Raft, which keeps working while a majority of orderer nodes are available, so a five node cluster tolerates the loss of two nodes. Byzantine fault tolerant ordering is available only in the 3.x line, so confirm early whether you need it. Channel design, chaincode lifecycle approvals and private data collections then determine who sees what, and each organization must agree on those definitions before the first transaction. Confirm the Fabric version, since v3.0 removed Kafka ordering and the v1.x lifecycle, and migration must be complete before upgrading.
A Besu private network is smaller in component count but still needs deliberate configuration. You choose a proof of authority protocol, and the Besu consensus documentation recommends QBFT for enterprise use over IBFT 2.0, while Clique is no longer supported. Each node carries a permissions configuration file that governs node permissioning and account permissioning, and that file must be distributed and kept in step across the network. Plan the JDK: Besu 26.6.0 requires JDK 25 to build and run, so your build pipeline and hosts must match. Because Besu releases roughly monthly, and the 26.10.0 release notes say an upgraded Bonsai database cannot be opened by older versions, take a backup before each upgrade and test the rollback path in a non-production environment. Tessera privacy is gone, so confirm how private transactions will be handled before you commit to the design.
A Corda build is mostly application and governance work. Corda smart contracts and flows are written as CorDapps in Java or other JVM languages, so the team needs JVM engineering skills and a test process for contracts and flows. Notary setup is a design decision in its own right, because the notary validates uniqueness and sequencing of transactions for each network. The first and second Corda architectures are split across two repositories: Corda 4 comes from the corda/corda repository, with release-os-4.14.3 as the latest open source tag, while Corda 5 comes from corda-runtime-os and is developed and maintained by R3. Choose the line before you design the CorDapps, because the two are not drop-in replacements. DeployOpen scopes implementation fixed-price in writing and does not publish prices, so ask each partner for a written scope covering identity, ordering or notary setup, application development, testing and handover, and state which Corda or Fabric version the quote assumes.
How to plan an upgrade or move between these platforms
The sequence below shows how to upgrade a Fabric network safely, how to protect a Besu node before it changes version, and why moving a live application from one ledger to another costs far more than either upgrade.
Inventory versions, ordering type and chaincode lifecycle
Record the Fabric line you run (v2.5 or v3.x), the ordering service type, and whether every channel uses the v2.x chaincode lifecycle. Fabric v3.0 removed Solo and Kafka ordering and the v1.x legacy lifecycle, so a network still on Kafka or legacy channels must migrate before it can move to v3.0. Your platform or network owner does this with the current binary and channel configuration in hand. The step is done when you hold a written list of every orderer, peer, channel and client application with its version and a named owner for each.
Plan the Kafka to Raft and lifecycle migrations first
If the inventory shows Kafka ordering or legacy chaincode lifecycle, schedule those migrations as separate work ahead of the version upgrade. Fabric documentation requires moving Kafka ordering to Raft and moving all channels to the v2.x lifecycle before upgrading to v3.0. Your Fabric administrators carry this out, with channel members agreeing the change. The step is done when a test network has completed both migrations and your application team has confirmed transactions still endorse and commit.
Back up the ledger and MSPs
Before touching any binary, take a backup of the ledger data and the membership service provider material for every orderer and peer. The Fabric upgrade guide lists this as the first of four steps, and it is your only rollback path if an upgrade fails. Store the copies outside the nodes being changed and test a restore on a non-production copy. The step is done when you can name the backup location, the timestamp, and the restore procedure you have rehearsed.
Upgrade orderer binaries one node at a time
Upgrade orderer binaries in a rolling fashion, one ordering node at a time, so the ordering service keeps running on the remaining nodes. Under Raft, the cluster keeps working while a majority of nodes is available, so confirm quorum before each restart. Your platform team performs each restart and watches consensus health. The step is done when every orderer reports the new version and the cluster has elected a leader and accepts transactions.
Upgrade peer binaries one organization at a time
Upgrade peer binaries in a rolling fashion, moving through organizations and peers so endorsement capacity stays available. Each organization's operators perform their own peer upgrades under their change process. The Fabric Gateway client API is compatible with both v2.5 and v3.0, so client applications can be upgraded on their own schedule, which reduces the number of changes made at once. The step is done when every peer runs the target version and endorsement succeeds from each organization.
Update application channel capability levels
Once all orderers and peers run the new binaries, update the application channel capability levels, which is the last of the four documented steps. Channel members must agree to the change, and the new capabilities cannot be treated as a simple rollback point. Confirm the change with a test transaction on each channel. The step is done when every channel reports the new capability level and your monitoring shows normal endorsement and commit rates.
Apply the Besu backup rule before any version change
Besu releases use a year.month scheme and the 26.10.0 notes state that the Bonsai database upgrades automatically on first start. Older Besu versions cannot open an upgraded database, so a backup taken before the upgrade is the only way back. Node operators take a database backup on each node, confirm that Besu runs the required JDK version from the release notes, then upgrade. The step is done when the backup is verified and the node starts on the new version with peers connected.
Assess the cost of moving applications to another platform
Moving between Fabric, Besu and Corda is a rebuild, not an upgrade. Fabric chaincode runs in Go, Java or Node.js, Corda smart contracts are CorDapps in Java or other JVM languages, and Besu runs EVM-compatible contracts, so none of these code bases transfers directly. Data models, identity setup, privacy design and integration tests all move with them. Ask any implementation partner for a written scope that covers each of these components, and treat that scope as the basis for any decision to switch.
Questions buyers ask before choosing a ledger
How much effort does a permissioned ledger take to run, and what drives it?
Effort depends mostly on how many organizations join the network, how many ordering nodes you operate, and how often you upgrade. Fabric adds work around channels, endorsement policies, certificate authorities and chaincode lifecycle, while Besu adds work around validator keys, node permissioning and client upgrades. Ongoing effort is driven by the release cadence you adopt. Besu ships roughly monthly using calendar version numbers, so a team that follows every release will spend more time on upgrades than one that schedules them quarterly. Ask each vendor and each integrator to list the recurring tasks in writing, including backups, patching, monitoring and key rotation.
Can our team run a permissioned ledger without outside help?
A team can run one if it already operates production Linux, container and database infrastructure and has at least one engineer comfortable with the chosen stack. Fabric requires familiarity with MSPs, Fabric CA, channels and chaincode lifecycle. Besu requires Java operations knowledge, since it requires JDK 25 to build and run, plus consensus and node permissioning expertise. Corda requires JVM and CorDapp skills. Most teams underestimate the governance work, which involves agreeing on membership, upgrade windows and incident responsibilities across organizations. DeployOpen plans, implements, documents and supports self-hosted open-source platforms in your own infrastructure, so a fixed-scope engagement can cover handover and runbooks if you want to keep operations in house.
How long does implementation take, and what sets the timeline?
The timeline is set by the number of participating organizations, the consensus and ordering design, the integration points with existing systems, and how many environments you need before production. No researched duration applies to a generic deployment, so treat any figure you see as something to verify. Fixed-scope engagements agree scope, deliverables and timelines in writing before work starts. Ask for a written plan that names the dependencies on each participant, such as certificate issuance, identity provider access, and sign-off on governance rules. Delays most often come from those dependencies, not from the software install.
What does the work need from our organization in skills, governance and infrastructure?
Three inputs matter most. First, staff skills: an engineering owner for each node, plus someone who understands the business rules that will live in smart contracts or flows. Second, governance: a written agreement on who can join, who signs upgrades, how keys are issued and revoked, and how disputes are handled. Third, infrastructure: hosts or cloud accounts for every node, network paths between organizations, backup storage, and hardware security modules if you need them, since Fabric documents HSM use. Confirm each item with your own security and architecture teams before the quote is finalized.
Does Besu still support privacy features such as Tessera?
No. Besu 25.6.0 removed the Tessera privacy feature and onchain permissioning, and Besu 25.7.0 removed the EEA and PRIV privacy RPC API groups. If your design relied on Tessera private transactions, you need a different privacy model before adopting Besu for private data. Besu still supports local permissioning through node and account permissions configuration files. Fabric handles confidentiality through channels and private data collections, and Corda handles it through point-to-point flows and notaries. Ask each vendor to show how the privacy requirement is met in a test network, and confirm the current release notes before committing.
Should we choose Fabric v2.5 or v3.1 for a new network?
Choose v2.5 if you want the long-term support line for production users, as the Fabric documentation describes it. Choose v3.1 if you need features that only the 3.x line provides, such as the BFT ordering service based on SmartBFT, or Ed25519 alongside ECDSA for MSP signing. Both lines receive patch releases in parallel, with v3.1.5 and v2.5.16 both published on June 18, 2026. Fabric v3.0 removed Solo and Kafka consensus and the v1.x legacy chaincode lifecycle, so Kafka ordering must move to Raft before upgrading. Confirm the choice against your support policy and your client applications, since the Gateway client API works with both lines.
Should we choose Corda 4 or Corda 5 for a regulated network?
Corda 4 is the first architecture, maintained in the corda/corda repository, and the most recent open source Corda 4 tag is release-os-4.14.3. Corda 5 is built on the second architecture in the corda-runtime-os repository, is developed and maintained by R3, and is made available under Apache-2.0. Because the two generations have different architectures, moving between them is a re-platforming project, not a version upgrade. Ask R3 and your integrator to confirm the support status and roadmap for each generation, and to describe the migration path for existing CorDapps before you choose.
What should we ask for in a fixed-scope quote?
Ask for a written scope that lists each node or component, each environment, the consensus or ordering design, the integrations and identity sources, and the documentation and training you will receive. Ask what is one-time work, such as design, build and handover, and what recurs, such as retainers for upgrades, monitoring, patching and continuous testing. Request acceptance criteria for each deliverable, the assumptions you must confirm, and the client responsibilities that affect the timeline. DeployOpen does not publish a price list, and a quote follows from the written scope, so use this list to compare proposals on equal terms.
Official sources for each platform
Before you shortlist any of these platforms, read the owning project's own pages. For Hyperledger Fabric, start with the LF Decentralized Trust project page for Fabric, then the Fabric documentation on what Fabric is and the ordering service. Confirm which release line you would run in production, since the Fabric docs describe v2.5 as the long-term support release while v3.x adds BFT ordering. For Besu, the LF Decentralized Trust project page for Besu and the Besu documentation are the reference points, and the Besu releases page is where removals and upgrade notes appear first.
For Corda, the corda/corda repository documents the first architecture covering Corda 1 through 4, while the Corda 5 runtime repository holds the second architecture. Because the two lines differ in what they are and who maintains them, confirm with R3 and the repository README which line matches your requirements before you compare features. Check the Corda tags page for the latest open source tags rather than relying on older articles.
Treat release numbers, license terms and feature availability in this comparison as a starting point. Verify each one against the project page, the release notes and the repository on the day you make a decision, and record the version and date you checked in your evaluation file. Ask your implementation partner and any vendor you engage to confirm the same facts in writing, especially for features that were removed or changed between releases, such as Besu's Tessera privacy and Fabric's Kafka orderer.
How DeployOpen works on this
DeployOpen plans, implements, customizes, integrates, hardens, documents and supports self-hosted open-source platforms inside the client's own infrastructure. For a permissioned ledger decision, that means starting from your privacy, consensus and governance requirements, then building and handing over the platform in your own cloud accounts, data centers or air-gapped networks.
How we scope
- Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts.
- The written scope should name the chosen platform, its version line, the consensus option and the privacy model.
- Scoping should record which participants, channels or permissions your use case needs, and who governs membership changes.
How we build
- Build work covers node or peer deployment, ordering or consensus setup, and identity and certificate integration in your environment.
- Teams should confirm which identity source, HSM or key storage approach applies before the build starts.
- Testing and hardening are scoped against your own network topology and data classification rules, not a generic template.
How we hand over
- Handover includes documentation of the deployed architecture, configuration, backup steps and upgrade procedure.
- Deliverables should include the evidence your compliance assessor will ask for, prepared for their review rather than issued by DeployOpen.
- Confirm in the written scope which runbooks, training sessions and acceptance tests are included before sign-off.
How we support
- Ongoing support, upgrades and continuous testing are available as retainers after handover.
- Retainer scope should cover planned upgrades, backup restore tests and monitoring of platform release notes.
- Ask for the support hours, response expectations and escalation path in writing, since these are set per engagement.

