When a Besu network needs customization and whether a partner should do it
Most Besu customization happens through genesis and consensus settings, local permissioning files and plugins built on the Besu plugin API, so a fork is rarely the first answer. The lasting cost is not the initial change. It is maintaining any custom code as Besu ships a new calendar release roughly every month. A permissioned network usually needs customization for one of four reasons: consortium rules that default settings do not express, custom node or account controls, integrations with systems the consortium already runs, or a removed feature that must be replaced. Write each trigger down, along with the component that will carry it, before anyone starts building.
Removed features are the trigger most likely to surprise teams. The maintainers have sunset Tessera privacy, onchain permissioning, proof of work consensus and fast sync, and later releases removed Clique consensus, so a network that depended on any of these cannot simply upgrade in place. The maintainers point to plugins or community forks for teams that still need the removed privacy and permissioning features. Consortium rules fit local permissioning more naturally. Node permissioning limits which participants a node connects to, and account permissioning governs onboarding, suspension and restricted actions. Confirm which rules every member must agree on and which only one operator wants, because the shared rules need consortium sign-off and the local ones should not drift between nodes.
Whether to build in-house or with a partner depends mainly on two things: whether your team already maintains Java services, and whether it can absorb release-driven upgrades. Besu is written in Java, and the 26.6.0 release notes state that it requires JDK 25 to build and run. A team without a JVM build, test and deployment pipeline will learn that stack while also carrying the consensus layer. Plugin work is also tied to a release line. A plugin written for one calendar release must be checked against the next, and the 26.10.0 release notes warn that the Bonsai database upgrades on first start and cannot be opened by older versions. If your team already runs Java services and has a routine for testing dependency upgrades, in-house work is a reasonable fit. If not, a partner may build the first version, with ownership transferred afterward.
Before requesting a quote, write a requirements list with one row per requirement. For each row, record whether it can be met with genesis, consensus or local permissioning settings, a plugin, or an external system such as an identity provider or a hardware-backed key store, and note the Besu version you expect to run. Ask the partner which release the work targets, how the plugin will be tested against later monthly releases, and who maintains it after go-live. The quote should separate the one-time build from recurring work such as release testing and upgrade support, since recurring work is usually what decides the question. Confirm the plugin API details and permissioning behavior in the Besu documentation and in your own environment before the scope is agreed in writing.
What a Besu customization engagement includes
A customization engagement turns changes to a Besu network into reviewable, reproducible artifacts that your own team can run after handover. Each work package below ends in a deliverable you can inspect, and together they show what you keep when the engagement closes. The exact package list is fixed in the written scope before work starts.
Customization inventory
A written register of every change made to the stock Besu release: genesis and consensus settings, permissioning rules, JSON-RPC exposure, plugins and any configuration that differs from defaults. For each item it records the reason, the owner and the Besu version it was verified against. Check that the inventory is complete before you accept it, because it is the baseline every later upgrade is measured against.
Configuration under version control
Node configuration files, genesis files and permissions files kept in a repository your organization controls, with reviewed commits and a history of who changed what. Secrets such as node keys and RPC credentials are referenced, not committed. Confirm the repository has branch protection and that each environment is built from the same tagged configuration, so drift between test and production is visible.
Plugin source and build
Where a requirement cannot be met through configuration, the plugin source code built against the Besu plugin API, with a reproducible build that produces the artifact deployed to nodes. Confirm which Besu and JDK versions the build targets, since Besu 26.6.0 requires JDK 25 to build and run. You should be able to rebuild the same plugin from the repository without the original engineer present.
Test evidence on a non-production network
Recorded results from running the customized configuration and plugins on a non-production network that mirrors the validator count, permissioning rules and authentication setup of production. Evidence should cover block production, peer connectivity, permission enforcement and the failure cases agreed in scope. Ask for raw logs and test scripts, not only a summary, so your team can rerun the checks.
Upgrade runbook
A step-by-step procedure for moving the customized node to a newer Besu release, covering the pre-upgrade backup, JDK check, plugin rebuild and validator sequencing. It must state that the Bonsai database upgrades automatically on first start and that older Besu versions cannot open the upgraded database, so rollback depends on a backup taken first. Confirm the runbook has been exercised on the test network.
Handover to owners
Working sessions and written materials that transfer operation of the customized network to the people named in your ownership model, including who approves configuration changes and who responds to alerts. Handover is complete when your owners have rebuilt a plugin, applied a configuration change through the repository and executed the upgrade runbook on the test network. Agree the acceptance criteria in the written scope.
Which Besu changes stay in configuration and which need plugin code
Most Besu customization falls into one of three layers, and the layer determines who has to be involved and how risky the change is. The first layer is genesis and consensus settings, which are chosen when a network is created. The second is local permissioning files on each node, which control node permissioning for connections to known participants and account permissioning for onboarding, suspending accounts and limiting actions. The third is plugins built on the Besu plugin API, which add code to a node. Before anyone writes code, the team should decide which of these layers the requirement actually belongs to, because a change that fits in a configuration file is far cheaper to operate than one that needs a custom build.
Genesis and consensus settings deserve the most caution. Some of these values are fixed once blocks exist, and others may be adjustable on a running chain depending on the Besu release in use. The team should check the Besu documentation for each genesis or consensus parameter it intends to set and record, for every one, whether it can change on a live network and what procedure the documentation requires. Any change to a live chain's consensus behavior needs a coordinated plan agreed by all validators, including the timing of the change, how each operator will apply it, and what happens if one validator does not switch over. A change made by one operator alone can stall block production on a QBFT network.
Local permissioning sits in between. The node permissioning and account permissioning files are read by each node, so they can be changed without rebuilding Besu. That convenience carries an operational cost: every validator and any node that enforces the rules has to hold the same intended version of the files, and the team needs a process to confirm this after each edit. Account permissioning changes that suspend an account or restrict its actions should be tested in a non-production environment first, and the owners of the onboarding decisions should be named before the first change is made. Keep the files under version control so that the history of who changed which rule and when is available during an audit.
Plugins are the layer with the highest long-term cost. A plugin is compiled code that depends on the Besu plugin API, so each Besu release the team adopts may require the plugin to be rebuilt, retested and redeployed on every node. Ask the plugin's author or the internal engineering team to confirm which Besu versions the plugin supports, and treat that list as a constraint on the upgrade calendar. Some requirements can be met by a plugin that already exists, such as a security module plugin for hardware-backed key storage, and the team should check those options before building anything. The Besu maintainers have pointed teams that still need features removed from the product toward plugins or community forks, which means those teams should expect to own that code and its maintenance from the start.
What drives the effort and cost of a Besu customization
This table lists the factors that change how much work a Besu customization takes and how much it costs to keep running. Read each row as a question to answer before requesting a quote, since the right-hand column names the lever the client controls. The main takeaway is that the number of custom components and the number of nodes that must match them matter more than the size of any single change.
| Driver | Why it changes cost or effort | How to keep it down |
|---|---|---|
| Number of customizations | Each custom change needs its own design, build, test and documentation, and each one must be re-checked whenever Besu is upgraded. Work grows with the count, not just the size of each change. | Write down the business need for each change and drop any that a supported configuration option or existing plugin already covers. |
| Configuration or plugin code | Settings in genesis, consensus or local permissioning files are read by Besu directly and are usually simpler to test. Plugins built on the Besu plugin API are compiled code that must be built, versioned and tested against each target release. | Prefer configuration where it meets the requirement, and keep plugin scope narrow so that fewer interfaces are exposed to change. |
| Validators and node types that run the change | A change to consensus, permissioning or a plugin must run identically on every validator and on the RPC or boot nodes that depend on it. Mismatched nodes can cause forks or failed block validation, so testing and rollout effort rises with each node type. | Limit the change to the node types that truly need it and document which node types run which build. |
| Target JDK and Besu version | Besu requires a specific JDK to build and run, and the release notes state the JDK version for each release. Each target combination needs its own build and regression pass, and a move to a newer release can invalidate code that depended on internal behavior. | Fix one Besu release and one JDK version as the target for the whole project, and confirm the target against the release notes before design starts. |
| Environments that need matching builds | Development, test, staging and production each need the same artifact, or a documented reason for any difference. Every extra environment adds build, deployment and verification steps. | Build once in a controlled pipeline and promote the same artifact through environments, rather than building separately in each one. |
| Depth of integration with external systems | Connections to key management, identity providers, monitoring or internal ledgers add interfaces to design, secure and test. Failures in these links can stop nodes or permissioning, so they need failure-mode testing as well as functional testing. | Keep integrations behind stable interfaces, agree data formats and failure behavior with each owning team early, and avoid putting business logic in the node. |
| Compliance evidence for each change | Each change may need a design record, a test result, an approval and a log of who deployed it. Assessors and internal control owners will ask for this evidence, and gathering it after the fact is slower than producing it during the work. | Agree the evidence list at scoping and generate it as part of the build and change process. Confirm with your auditor which evidence they expect. |
| Carrying custom code across releases | Besu ships roughly monthly and removes features from time to time, so custom code must be re-tested and sometimes rewritten for each upgrade. This recurring work continues for as long as the custom code is in use. | Keep custom code small, track Besu release notes for each change that touches your code, and budget for upgrade testing as a recurring cost. |
How a Besu customization project moves from requirements to handover
This sequence turns a list of wanted changes into a Besu build that is classified, tested on a private network, rolled out safely across validators and nodes, and handed over with the runbook your team needs for future releases. Each phase closes with a named output that the next phase depends on. Timing depends on the written scope and your environment, which is why the phases are described by output rather than by duration.
Inventory and define each requested change
Start by listing every change the network needs, such as genesis or consensus parameters, local permissioning rules, custom JSON-RPC behavior, or integrations with systems outside the node. For each item, record the business reason, the affected node roles, and whether the change must hold across every release. DeployOpen leads this work with your architects and network operators, and your team confirms which requirements are mandatory. The output is a requirements register with one row per change, its owner, and its acceptance test. The phase is complete when the register is signed off by your technical and risk owners.
Classify each change as configuration or plugin
Sort every item from the register into one of two groups. Settings that the Besu command line, configuration file, genesis file or local permissions files can express stay as configuration. Behavior that needs new code running inside the node, such as custom logic built on the Besu plugin API, becomes a plugin. Any item that would require modifying Besu source code is flagged as a fork decision, because it carries the highest cost across upgrades and needs explicit approval. The output is a classification table with a reason for each entry and a list of plugins to design. Confirm the current capabilities of each option against the Besu documentation for the release you plan to run, since features change between versions.
Design genesis, permissioning and plugin interfaces
Write the design for the settings that define the network from the start: the genesis file, the consensus configuration, node permissioning and account permissioning, and the interfaces each plugin exposes to Besu and to your systems. Decide how permissions files are distributed, versioned and changed, and who approves a change. Define the plugin inputs, outputs, failure behavior and logging. The output is a design document with the genesis parameters, permissions file layout, plugin interface specifications and a change approval path. The phase is complete when your security and operations owners have reviewed and accepted the design.
Build and test on a private test network
Implement the configuration files and plugins, then deploy them to a private test network that matches the planned validator count and node roles as closely as your environment allows. Run functional tests for each item in the register, including negative tests such as a node that should be rejected by node permissioning or an account that should be blocked. Test startup, restart and sync from a clean data directory. Keep plugin builds reproducible and record the exact Besu release and JDK used. The output is a test report mapped to each acceptance test, a tagged build artifact, and a list of known defects with their disposition.
Roll out in stages across validators and nodes
Move the tested build into your production-like environments in stages, starting with a small group of nodes and extending to the full validator set only after each stage is stable. Plan the order so that the network keeps producing blocks at every step, and confirm the consensus behavior for the validator count you run. Before the first stage, take and verify backups of node data and keys, because some Besu database upgrades are one-way. Watch peer count, block production and sync status throughout. The output is a rollout log that records each stage, the observed results, and the go or no-go decision at each gate.
Hand over with an upgrade runbook
Close the project with the materials your team needs to run the customized build without DeployOpen in the room. The runbook covers how each custom item is configured, how plugins are built and deployed, the test suite to run before any Besu upgrade, the rollback procedure with a verified backup, and the owner for each permissions change. Walk through the runbook with your operators and run one supervised dry run of an upgrade on the test network. The output is the handover package: the runbook, the source and build pipeline access, the test suite, and a signed acceptance record for the project scope.
What goes wrong when custom code meets new Besu releases
Besu ships a new calendar release roughly every month, and each one can change the build toolchain, the database format or the feature set that custom code depends on. The failures below share a root cause: custom changes were made once, tested once and then left to drift away from the release they were built for.
Plugin fails against the next release
A plugin compiled against one Besu release can break when the plugin API or its supporting classes change in the next. The failure often appears only at node start, so a build that passed in staging can still stop a validator. Prevention: pin the Besu version each plugin targets, run the plugin's test suite against every release you plan to adopt, and keep the plugin in version control with the Besu tag it was built against recorded beside it.
JDK change breaks the build pipeline
Besu 26.6.0 release notes state that Besu requires JDK 25 to build and run. A pipeline pinned to an earlier JDK fails at compile time, and a runtime image built on an older JDK can fail at start. Prevention: read the JDK requirement in every release note before upgrading, pin the JDK version in build tooling, and test the build and a node start in a non-production environment before the release reaches a validator.
Irreversible database upgrade on first start
Besu 26.10.0 release notes state that the Bonsai database upgrades automatically on first start, and older Besu versions cannot open the upgraded database. Rolling back a node therefore means restoring data, not swapping a binary. Prevention: take and verify a backup of each node's data directory before starting the new version, record the restore procedure, and rehearse it once on a copy of a real node.
Removed features rebuilt without an owner
The maintainers have removed Tessera privacy, onchain permissioning and Clique consensus from current releases, and suggest plugins or community forks for teams that still need them. Custom rebuilds of these features often start as a project and end without an accountable maintainer, so they stop receiving fixes as Besu changes underneath them. Prevention: name an owner for each rebuilt feature, record which Besu APIs it depends on, and budget for its testing at every upgrade.
Undocumented changes on a single node
A configuration tweak, patched file or extra plugin applied to one node and not the others creates a network where nodes no longer behave the same way. These differences surface at upgrade time, when one validator fails and the others pass. Prevention: keep node configuration and plugin builds in a single versioned repository, generate each node's settings from it, and run a configuration diff across all nodes before and after every change.
What carrying custom code across Besu releases costs over time
Custom code in a Besu deployment carries a recurring cost that begins the day it goes live. Besu uses calendar version numbers and ships roughly monthly, and the release list on GitHub already runs from 26.7.0 (July 13, 2026) through 26.10.0 (October 16, 2026). Every plugin, custom permissioning rule or changed configuration path has to be checked against each release you intend to adopt, so the cost is not a one-time build fee. It is the sum of many small retests, each triggered by a release you did not choose to schedule.
The first decision is who pays for those retests. In most arrangements the client's own engineers absorb them by default, because they own the repository and the node fleet. A partner can instead take the work under a retainer, which covers reviewing release notes, rerunning the customization test suite and fixing breakage within an agreed scope. A split is common: the client's team owns the business logic and day-to-day operation, while the partner covers the Besu-facing interfaces, such as the plugin API calls and the permissions configuration. Whichever model you choose, write down which customizations fall inside it, because an unlisted plugin is usually billed as new work.
Triggers for retesting fall into three groups. Scheduled triggers are the monthly releases you decide to evaluate. Breaking-change triggers are removals already announced in the Besu release history, such as the removal of Clique consensus in 26.4.0 and the earlier removal of Tessera privacy and onchain permissioning in 25.6.0. Platform triggers come from the runtime, including the JDK requirement, which the 26.6.0 release notes say is JDK 25 for building and running Besu. A customization that touches none of these may still need a retest if it depends on a logging format, a metrics name or an RPC method that a release changes.
When you request a quote for ongoing support, ask for the following in writing. Get a named list of covered customizations, with the Besu interfaces each one uses. Ask how breaking changes are reviewed: who reads each release, which changes are classified as affecting your code, and how that classification is recorded. Ask who signs off a build for each environment, and whether the client's security or change-management owner must approve it before it reaches a validator. Finally, confirm how response work is priced when a release arrives outside the agreed cadence. The upgrade process itself, including database and rolling validator steps, is covered on the upgrades and support page.
How Besu customization differs by starting point
Networks that depend on Tessera privacy or onchain permissioning start from a removed feature set. Besu 25.6.0 removed both features, and 25.7.0 removed the EEA and PRIV privacy RPC API groups. The maintainers suggest plugins or community forks for teams that still need these capabilities, so the work is designing what replaces them and where each rule now lives.
- Privacy design: Decide which data must stay private and which layer will carry that protection now that Tessera is gone. Confirm what your application assumes about private transaction handling today.
- Access rules: Map each onchain permission (who can join, who can transact, who can be suspended) to a local rule in the node or account permissions file, or to a plugin check.
- Client code: Find every caller that uses the removed EEA or PRIV RPC groups and plan the replacement for each one.
- Change control: Changes made through a smart contract become configuration changes that you distribute, review and audit on every node. Agree who signs off on them before the first change.
Before scoping, list every removed feature your network uses, because that list determines how much of the design has to be rebuilt.
A forked Besu build carries its changes into every release, so each upgrade becomes a merge exercise. The work here is separating each change into the smallest unit that can run on the plugin framework, then retiring the fork. Changes that touch core internals may not map cleanly to plugins, and those need a separate decision about redesign or a maintained community fork.
- Diff inventory: Compare the fork against the upstream release tag it was built from, and list every change by function, not by file.
- Classification: Label each change as configuration, plugin, application-side logic, or unresolved. Unresolved items need an owner and a decision date.
- Test rebuild: Rerun your test suite against the current release, and confirm the build and runtime environment uses JDK 25, which the 26.6.0 release notes require.
- Parity testing: Run the plugin build alongside the fork on a non-production network and compare block production, peer behavior and RPC responses.
Keep the fork build pipeline available until parity testing passes on every environment, because a plugin that works in test can still fail on a node with different history.
A greenfield network has no legacy behavior to move, so the work is translating the consortium rulebook into settings that each node enforces. Besu supports proof-of-authority private networks using QBFT or IBFT 2.0, and the decisions about genesis and consensus should be agreed in writing before any validator starts. Local permissioning then carries the membership and conduct rules that the rulebook describes.
- Clause mapping: Rewrite each rulebook clause that governs access as a testable permission entry, with a named owner and an expected result.
- Node permissioning: Restrict connections to known participants so that only approved nodes can peer with each other.
- Account permissioning: Define onboarding rules, suspension procedures and restricted actions for each account class the rulebook names.
- Genesis and consensus: Fix the consensus choice, validator set and genesis parameters before the network is built, since changing them later is a migration.
- Permissions change control: Set how permissions files are changed, reviewed and deployed to every operator's nodes.
Ask the consortium which rules are enforced by node configuration and which remain off-chain procedures, because only the first group can be tested in the network itself.
On Kubernetes, configuration and plugins are delivered through container images or manifests, so every change becomes a versioned artifact. The Besu code does not change, but the release path does. Plugin binaries, permissions files and node settings need a defined home in the image or in mounted configuration, and each change needs a rollout plan that respects validator quorum.
- Artifact packaging: Decide whether plugin jars and configuration are baked into the image or mounted from a ConfigMap or Secret, and pin each plugin version explicitly.
- Permissions lifecycle: Treat the node and account permissions files as versioned configuration that changes through the same pipeline as the image.
- Key handling: The local node private key file is not encrypted, so store it as a Secret with restricted access, or plan an HSM security module plugin with the --security-module option where hardware-backed storage is required.
- Rolling changes: Restart validators one at a time and confirm the network keeps producing blocks before the next restart.
- Metrics: Enable metrics with --metrics-enabled and add the scrape configuration for the default port 9545 to your monitoring setup.
Confirm the exact image, manifest and operator tooling your platform team uses, since those choices determine where each configuration file must live.
In an air-gapped network, plugins and build dependencies must come from an internal artifact repository, and nothing can be pulled from public registries during a build or deployment. The customization work shifts toward supply chain control: what gets mirrored, who approves it, and how a plugin build can be verified without internet access.
- Dependency mirror: Identify every artifact a plugin build needs, including the JDK 25 toolchain and build libraries, and mirror each one into the internal repository before work starts.
- Build pipeline: Compile plugins inside the internal network and publish signed artifacts to the internal repository.
- Approval flow: Require a documented review for each new plugin version and each mirrored dependency update before it reaches the node environments.
- Offline checks: Verify permissions files, genesis settings and plugin artifacts without relying on external services.
- Internal documentation: Host runbooks and release notes inside the network so operators can follow them during an incident.
Confirm with the Besu release notes which release artifacts you need to mirror for each upgrade, because each new Besu release can change the dependency set your plugins must match.
Which customization work teams keep in-house and which they outsource
This table compares seven pieces of Besu customization work by who usually carries them and the skills each one demands. Read the middle column as a starting point, then check it against your team's Java, Gradle and release-management experience. The main takeaway is that plugin code is often within reach of a Java team, while the repeated regression and retest cycle across Besu releases is where teams without a standing release owner tend to hand work out.
| Work part | Usually in-house or outsourced | Skills needed |
|---|---|---|
| Defining consortium rules | In-house. The consortium members decide the rules, and an outside party can only document them. | Governance decisions, network operations policy, clear written rule sets agreed by all participants |
| Configuring genesis and consensus | In-house, with outside review of the QBFT or IBFT 2.0 settings before go-live | Working knowledge of Besu genesis files, validator set setup and block timing parameters |
| Writing local permissioning files | Often in-house, with outsourced review when the rules are complex | Besu node and account permissioning file syntax, and an understanding of which participants may connect and transact |
| Plugin design and Java build | In-house if the team has Java and Gradle experience. Outsourced when no one on staff has built against the Besu plugin API. | Java, Gradle, the Besu plugin API, unit testing and dependency management against a pinned Besu release |
| Test on private networks | Shared. The internal team runs test networks, and an outside partner may script and run the test suite. | Private network setup, scripted validator and RPC node deployment, and test scenario design |
| Release tracking and upgrade regression testing | Outsourced when there is no standing release owner. Keep in-house when a named engineer can follow monthly Besu releases. | Reading release notes, checking JDK requirements, planning database upgrades, rebuilding plugins and rerunning regression suites |
| Evidence collection for compliance reviews | In-house for the records only the organization can hold, with outside help to organize them for assessors | Change records, configuration baselines, test results and knowledge of the control framework the reviewer uses |
What the client needs to provide before customization starts
Customization work stalls quickly when the client has not assembled its inputs before the first design session. The most important items are access to the current node configuration and the genesis file. Every genesis and consensus setting we would consider changing is read from these files, and a plugin or permissions change has to be checked against the exact chain parameters the network runs today. Without them, the team has to reconstruct the configuration from memory or from running nodes, which is slower and more error-prone. We ask for read access to the live configuration files for each node class, plus the genesis file used at launch and any later changes to it, so we can confirm what is actually in force.
The second item is a written list of consortium rules and the person who can decide them. Besu's local permissioning is configured in the node permissions file and the account permissions file, and both reflect governance choices: which nodes may connect, who may submit transactions, and under what conditions an account can be suspended. If nobody with authority is named, every permissioning question becomes an open item that waits for a meeting. Ask the client to identify a single decision owner for rule changes, and a deputy, and to record the rules in plain language before design begins. Missing rules delay design decisions and often force rework after a plugin is already written.
The client should also confirm the target Besu version and the JDK it will run on. Besu 26.6.0 release notes state that the software requires JDK 25 to build and run, and the release cadence is roughly monthly, so the target version determines which plugin API surface and build toolchain we use. Ask for the exact version, the JDK distribution the client has approved, and whether a plugin built against the current API is already in use. Without a fixed target, a plugin can compile against one release and fail against the version that reaches production. Also ask whether the client has a policy on how far behind the latest release it may run.
Two further inputs make custom code testable. First, a non-production validator set that mirrors the production consensus configuration, including validator count, key custody method and peer topology. Plugins that touch block production, transaction validation or permissioning cannot be verified on a single node, and tests run against a different validator set can pass while production behavior differs. Second, the client's build and artifact repository, meaning where source is stored, how builds are produced and where signed artifacts are published. We need to know the approved build pipeline, the artifact naming and retention rules, and who can publish to production. If these are missing, the custom code cannot be delivered through the client's own change process.
Finally, name an owner for each validator operator. Customization changes how validators behave, so each operator must know what is changing, when it will be rolled out, and who approves their node going live with the new plugin or configuration. Ask for a named contact per operator organization, their escalation path, and their availability during the rollout window. If operators are not named, validator changes cannot be coordinated, and the first real test of a custom plugin may happen on a live network. Confirm these owners in writing before the statement of work is signed, because they drive both the test plan and the cutover schedule.
Questions buyers ask before outsourcing Besu customization
Can Hyperledger Besu be customized without forking the codebase?
Yes, several parts of a permissioned Besu network can be changed without maintaining a fork, but the boundary matters. Genesis and consensus settings, such as the QBFT or IBFT 2.0 validator configuration and block parameters, are set through configuration. Local node and account permissioning is defined in each node's permissions configuration file. Additional behavior, such as a custom security module or extra RPC functionality, is typically built as a plugin on the Besu plugin API. A fork becomes necessary only when the required change sits outside those extension points. Confirm each requirement against the current Besu documentation and the plugin API before you decide on a design, because the answer depends on the specific change.
What drives the cost and timeline of a Besu customization project?
The main cost driver is how far the requirement sits from the extension points Besu already offers. A configuration change is small. A plugin that reads chain data, enforces a business rule, or integrates with an existing identity or key system needs design, build, testing and documentation. Other drivers include the number of nodes and environments that must run the change, how many integrations are involved, and how much of the behavior must be tested against consensus and failure scenarios. Ask any provider to break the quote into discovery, design, build, verification and handover, and to state which items are one-time and which recur, such as updates after each Besu release. DeployOpen provides a fixed-scope quote based on written requirements.
Can our in-house team build and maintain Besu customizations themselves?
An in-house team can build customizations if it has Java engineering skills, experience with Ethereum execution clients, and time to test changes on a permissioned network. Besu is written in Java and currently requires JDK 25 to build and run, so the team needs to be comfortable with that toolchain. The harder part is ownership over time: someone must read each release's notes, rebuild and retest the plugin, and plan rolling upgrades across validators. Estimate the internal hours for build, test and the recurring release cycle, and compare them with the people you would otherwise need to hire or keep available. A partner can take on some or all of that work under a written scope.
What do we need to provide before a Besu customization project starts?
Start by documenting the business requirement, the network topology, and the Besu versions in use. The provider will need access to a non-production environment that matches your validator and RPC layout, along with the requirements for permissioning, key custody, and identity integration that the change touches. Name a technical owner who can make decisions and a reviewer who understands your change control process. Provide your existing genesis file, node configuration, and any custom code or scripts. Agree on the acceptance tests before build starts so that completion is measured against written criteria rather than informal expectations.
How is custom Besu code kept working after each release?
Custom code stays working through a deliberate upkeep process, not by default. Besu ships new releases roughly monthly, using calendar version numbers, so a plugin built against one release must be checked against each new one. Keep the plugin in version control, pin the Besu version it targets, and maintain an automated test suite that runs against a private network. For every upgrade, read the breaking changes, rebuild the plugin, run the test suite, and then roll the change through a test network before production. Plan for the database implications too: some Besu releases upgrade the Bonsai database automatically on first start, and older versions cannot open the upgraded database, so take a backup before each upgrade.
What happens to a plugin if Besu removes the feature it depends on?
The plugin can stop working, and this is a real risk to plan for. The Besu maintainers have sunset several features, including Tessera privacy, onchain permissioning, proof of work consensus and fast sync, and removed Clique consensus in a later release. A plugin that relies on a removed feature must be redesigned, moved to a supported alternative, or retired with a migration plan. Before you commit to a design, check the Besu release notes and the sunsetting announcement for the features your network uses. Record the dependency in your architecture documentation so the team can assess impact quickly when a release lands. The maintainers have suggested plugins or community forks for teams that still need removed features, which means the upkeep burden stays with your team.
Do we need a support agreement after a Besu customization is handed over?
A support agreement is not always required, but most regulated operators should decide on one before handover. Without it, your team owns all monitoring, release tracking, plugin rebuilds, and incident response. Consider whether your staff can cover those tasks within your change control and on-call requirements. A retainer can cover upgrade planning, testing against new releases, and assistance during incidents, and DeployOpen offers ongoing support and upgrades as retainers. Ask any provider to specify what is included, the response expectations, the upgrade cadence, and what happens when a Besu release removes a feature your plugin uses. Compare those terms against your internal capacity before choosing.
Which parts of a Besu customization need the most testing before go-live?
Focus testing on the parts that affect consensus, permissioning, and key handling, because errors there can stall a network or expose access. Test permissioning rules against both allowed and denied scenarios, including suspended accounts and rejected connections. Verify that validators continue to produce blocks with the customization enabled, and test failover, restart and recovery behavior with the plugin loaded. Confirm that node key files and security module settings behave as documented, since the local node private key file is not encrypted by default and key storage choices affect the design. Run the same tests after every Besu upgrade. Ask the provider for a written test plan that maps each requirement to a verification step.
How DeployOpen scopes, builds and hands over Besu customizations
DeployOpen treats each Besu customization as a scoped change to a specific node configuration, plugin or permissioning rule set, not an open-ended fork. We agree the boundaries in writing, build and test the change against your running release line, and leave your team with the code, configuration and runbooks needed to carry it forward.
How we scope
- We list each requested change: genesis or consensus settings, local permissioning rules, or plugins built on the Besu plugin API.
- We record which Besu release line the work targets and which features it depends on, such as JDK 25 for current releases.
- We document the carrying cost of each custom item across future releases, so the written scope shows what is maintained after go-live.
How we build
- We build plugins against the Besu plugin API and keep custom code separate from the upstream Besu distribution.
- We apply node permissions and account permissioning through per-node configuration files, tested on a non-production network first.
- We test each change against the chosen release, including startup, block production and peer connectivity on validator and RPC nodes.
How we hand over
- You receive source code, build instructions, configuration files and a record of every customization with its purpose and owner.
- We provide a runbook covering rollback steps, including the need for a database backup before any upgrade that auto-upgrades on first start.
- We walk your engineers through the upgrade checklist for each custom item so your team can rebase changes on later releases.
How we support
- Engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts.
- Ongoing support, upgrade rebasing and regression testing for custom code are available as a retainer.
- Confirm with DeployOpen during scoping which Besu releases and features the support terms cover, and how breaking changes are reported.

