Swift Bitcoin – Full node library

Jun 4, 2026 • Announcements

Progress Report (June 2026)

In the last three months Swift Bitcoin has matured with a focus on cementing transaction policy, consensus rules and node behavior taking cues from the reference implementation.

Project Updates

With Mainnet activated, all tooling set for monitoring and essential Initial Block Download (IBD) optimizations in place, the focus during this past quarter shifted to filling in the gaps necessary for a stable 1.0 release.

Performance remained a subject of improvement as well as an emphasis in protocol correctness and functional parity with the Bitcoin Core reference implementation between the areas of transaction acceptance policy (standard-ness) and consensus rules.

The public Swift API was refined and documented further, particularly in what concerns the base protocol and wallet libraries. Additionally the RPC and command line interfaces were also fine tuned. Notably the configuration format was expanded to include a consistent hierarchy of program arguments, environment variables, Swift manifest or JSON files.

Below are the most notable issues/pull requests closed in the last three months organized by focus area:

API and configuration

  • Integrate Apple's Swift Configuration package #546 #549
  • Cleaned up output type solver #540

Performance and monitoring

  • Recreate bitcoin core caches for block index and UTXO set #423
  • Switch standard metrics backend from statsd to OTel #534 #537
  • Integrate Swift System Metrics #535
  • Updated building guide with metrics documentation #538

Node behavior

  • Track peers' best known header, chainwork and last common block. Use instead of height #531
  • Track peers' best header and last common ancestor block #536
  • Replicate Bitcoin Core logic for finding the next blocks to download from peers #533
  • Download blocks in parallel and from various sources during IBD #428 #532
  • Auto-connect to multiple peers #525 #529
  • Single headers sync node, except when close to the headers tip#526 #527

Consensus

  • Missing consensus rules and limits checks #548
  • Full block validation logic including transactions #137
  • Chainwork calculation (strongest, not longest chain) #246

Policy

  • Standard transaction/script resource limits #92
  • Standard limits, mainly sigops #541
  • Output types and scriptSig standard-ness #55
  • Standard transaction checking #36
  • Implement policy via mempool pre-checks #539

Bug fixes

  • Detect client channel closures (crash after outgoing peer disconnection after handshake) #573 #523

Plans for the remainder of the year

With the current OpenSats commitment ending, the goal going forward is to keep iterating over alpha releases until reaching API stability. There's still a backlog of about 65 issues out of which 24 are reserved for potential contributors as they are tagged with Good First Issue. The rest will be prioritized by impact on the package's public interface, key performance bottlenecks and other issues.

There's a plan to increase the test coverage by continuing to port data driven tests from Bitcoin Core. Same goes for benchmarking. One idea still under review is to build a GUI client to explore the usability of the framework by dog-fooding. This may compensate for the general shortage of voluntary beta testers observed so far since the project started.

New developments from the Swift open source community and Apple must be taken into account as the language is still lacking in specific aspects of system's development, namely: OutputSpan support, new Codable and more. In the meantime we intend to increase adoption of cutting edge language features like ~Copyable ~Escapable, Inline Arrays, C++ interoperability annotations, …

Project's kanban board outlining the current commitment here.