Skip to content

Overview

Open-source tooling to lower the cost of building send capability on the FedNow® Service.

OpenSSF Scorecard

⚠️ Early development (v0.3.1). Not production-ready yet; pre-1.0 minor versions may break APIs. See the CHANGELOG and issues/milestones.

Quick Start: send your first FedNow payment in 5 minutes (Docker + curl, no Rust required — settle, reject, and survive the timeout case).

More than 1,700 banks and credit unions had joined the FedNow network by the first quarter of 2026, and many signed up only to receive — the Federal Reserve does not publish how many of them can send. Implementing the send side (ISO 20022 messaging, signing, timeout reconciliation, 24x7 operations) is expensive and complex. This monorepo is a reference toolchain to change that, aimed at community banks, credit unions and service providers in the US.

Crate Directory Status What it is
fednow-core core/ ✅ 7 message types ISO 20022 library: parsing, validation (XSD facets + FedNow Release 1 profile rules, calibrated against the 81 official samples), builders, and the MQ technical envelope (FedNowIncoming/FedNowOutgoing)
fednow-sim simulator/ ✅ HTTP + MQ modes Local FedNow simulator: configurable accept/reject/ACWP/timeout scenarios over a synchronous dev endpoint or MQ-style queue-pair semantics — a preparation tool for the Fed’s Customer Testing Program (CTP)
fednow-gateway gateway/ ✅ full send loop Send middleware: event-sourced state machine on SQLite, idempotency-keyed REST API, real outbox, background pacs.028 reconciler, and an MQ-style southbound adapter (FEDNOW_GW_SOUTHBOUND=mq)
fednow-conformance conformance/ ✅ 24 vectors Conformance suite any implementation can run: language-agnostic vector corpus (bare Documents + envelopes), message validator CLI, and a live CTP scenario runner
fednow-gateway-client sdk/python/ ✅ v0 (Python) Zero-dependency Python client for the gateway REST API — idempotent submits, wait_final that understands the timeout case, profile violations as exceptions with rule codes; integration-tested against the live stack in CI
fednow-gateway-client sdk/java/ ✅ v0 (Java 17) Same client contract for the JVM (banks’ home turf): builder-checked requests, waitFinal, typed exceptions; one dependency (Jackson); integration-tested against the live stack in CI

Done through v0.3.1: the complete send loop (build → validate → send → advise → reconcile) with production MQ semantics end to end, the returns message set (pacs.004, camt.056/029), Python and Java client SDKs, the five-minute Quick Start, handbook chapters 1, 2, 4 and 5, and releases signed keyless with Sigstore shipping a CycloneDX and an SPDX SBOM. Message signing is tracked in #14, blocked on the Fed’s access-controlled Technical Specifications (distributed at onboarding). Next: real IBM MQ transport, and published release artifacts — crates.io, container images, PyPI and Maven Central (#64).

Terminal window
cargo test --workspace

docker compose up --build, then follow the Quick Start — five minutes, four curl commands, every output shown as actually produced: a payment that settles, one that is rejected with its ISO reason code, the timeout case resolving itself via pacs.028 (never a resend), and a profile-invalid message stopped before the wire with stable rule codes.

Implemented, calibrated against the real Release 1 profiles: pacs.008 (credit transfer) · pacs.002 (status, both directions) · pacs.028 (status request) · pacs.004 (payment return) · camt.056/camt.029 (return request/response) · head.001 (BAH) · the FedNowIncoming/FedNowOutgoing MQ technical envelope.

Planned: pain.013/pain.014 (request for payment) · admi (ping/broadcast) · message signing (#14).

  • No blind resends, ever. Unresolved submissions are reconciled via pacs.028.
  • Idempotency keys are mandatory at the gateway’s northbound API.
  • 24x7x365: zero-downtime deploys, no maintenance windows.
  • No telemetry, no phone-home. Zero credentials in this repo.
  • Docs are a product: the FedNow Integration Handbook (in docs/) will center on the hard production case — timeout reconciliation.

See SECURITY.md for the vulnerability disclosure process, and for the supply chain: releases are signed keyless with Sigstore (no private key, no signing secret), ship a CycloneDX and an SPDX SBOM, and can be verified with a single cosign verify-blob — the exact command is in SECURITY.md.

Apache-2.0. See LICENSE.


“FedNow” is a registered service mark of the Federal Reserve Banks. This is an independent open-source project, not affiliated with or endorsed by the Federal Reserve.