Overview
Open-source tooling to lower the cost of building send capability on the FedNow® Service.
⚠️ 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.
Components
Section titled “Components”| 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 |
Current milestone
Section titled “Current milestone”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).
cargo test --workspaceTry the whole loop
Section titled “Try the whole loop”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.
Message types
Section titled “Message types”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).
Design principles
Section titled “Design principles”- 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.
Security
Section titled “Security”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.
License
Section titled “License”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.
Pacsmith is an independent open-source project. Not affiliated with, endorsed by or sponsored by the Federal Reserve. FedNow is a service mark of the Federal Reserve Banks.