ach is a free, open source e-commerce platforms project written in Go and released under Apache-2.0. It has 564 GitHub stars, 203 forks and 17 open issues, and was last pushed 10 hours ago. On this registry it ranks #30 of 30 tracked projects in E-commerce Platforms, with 5 head-to-head comparisons available.

What is ach?

ACH is an Apache-2.0 Go library and HTTP service from Moov that reads, writes, and validates Automated Clearing House (ACH) files against the Nacha standards, built for developers who need to generate or parse ACH files inside their own payment software.

What it is

ACH is an open-source implementation of a reader, writer, and validator for Automated Clearing House files. ACH is the primary method of electronic money movement throughout the United States, and Nacha defines the file format and rules that govern it. The project lives in the Go ecosystem and ships in three shapes from one codebase: an HTTP server, a Go module, and a command line tool. The HTTP server is published as a Docker image, the library is published as the Go package github.com/moov-io/ach, and client libraries exist for both Go and Node/JavaScript. It is part of the Moov family of projects, each of which is focused on solving a single responsibility in financial services.

The concrete problem it replaces is writing and maintaining an ACH file parser and generator by hand. Teams that move money need to produce fixed-width Nacha-formatted files for upload to their ODFI, and to read files that come back, with validation at every layer. ACH provides that reader, writer, and validator directly, and supports generating and parsing all Standard Entry Class (SEC) codes while validating files according to the Nacha standards. An extensive set of examples in the github.com/moov-io/ach/examples package shows the reader and writer applied to various ACH transaction types.

Key capabilities

  • A reader, writer, and validator for Nacha-formatted ACH files, exposed through both the Go package and the HTTP API.
  • Support for generating and parsing all Standard Entry Class (SEC) codes, with validation against the Nacha standards.
  • A public Docker image, moov/ach, which serves on :8080 with no configuration required and exposes Prometheus-format metrics at :9090/metrics.
  • A Go module at github.com/moov-io/ach and a Node/JavaScript client at moov-io/ach-node-sdk.
  • OpenAPI-generated SDKs for calling the HTTP API from other languages.
  • An in-browser ACH file parser and a command line tool for local use.
  • Data persistence options for the HTTP server, plus configuration settings documented for Docker, Google Cloud Run, and the HTTP API.

Who uses it and how

  • Payment teams that generate ACH files for upload to an ODFI, using the library or the HTTP API rather than hand-rolling a Nacha writer.
  • Services that must parse and validate incoming ACH files before posting them to internal ledgers.
  • Go shops that embed the module directly, and JavaScript teams that call the Node SDK or the HTTP API from a separate service.
  • Operators running the container alongside other services, scraping :9090/metrics for Prometheus and routing traffic to :8080.
  • Teams that need event-driven upload and download of ACH files with operations, which Moov addresses with the separate moov-io/achgateway project, described as running in production.

Getting started

Pull and run the published image with docker pull moov/ach:latest followed by docker run -p 8080:8080 -p 9090:9090 moov/ach:latest, or add the Go package github.com/moov-io/ach as a module dependency. A Deploy to Google Cloud Run button and configuration settings for Docker, Cloud Run, and the HTTP API are documented in the project docs.

How it compares

The facts provide no list of paid products that this project replaces, so no direct commercial comparison is drawn here. Within its own ecosystem, ACH is the file-level reader, writer, and validator, sitting underneath the event-driven moov-io/achgateway engine that handles uploading, downloading, and operations. No other tool in this registry entry is named as an equivalent alternative, so it stands alone here as the Nacha file handling implementation.

When to use it — and when not to

A self-hoster must run the container or embed the module, expose the HTTP API on :8080, and decide on data persistence for the server, since the README documents persistence as an explicit choice rather than a default. Teams that need a full event-driven ACH engine with upload and download operations should not expect this project to cover that alone; they should look at moov-io/achgateway as well. The project is actively used in production and the licence is clear at Apache-2.0, but the scope is deliberately narrow: it handles reading, writing, and validation of files, and layers that simplify tasks or perform business operations sit above it.

project readme (upstream, from github) — read inline

Moov Banner Logo

Project Documentation · API Endpoints · API Guide · Community · Blog

GoDoc Build Status Go Report Card Repo Size Apache 2 License Slack Channel Docker Pulls GitHub Stars Ask DeepWiki

moov-io/ach

Moov's mission is to give developers an easy way to create and integrate bank processing into their own software products. Our open source projects are each focused on solving a single responsibility in financial services and designed around performance, scalability, and ease of use.

ACH implements a reader, writer, and validator for Automated Clearing House (ACH) files following the Nacha standards. ACH is the primary method of electronic money movement throughout the United States. The HTTP server is available in a Docker image and the Go package github.com/moov-io/ach is available.

If you're looking for an event driven ACH engine for uploading/downloading files and operations we have built moov-io/achgateway and run it in production. Our article How and When to use the Moov ACH Library will help to generate ACH files for upload to your ODFI.

Table of contents

Project status

Moov ACH is actively used in multiple production environments. Please star the project if you are interested in its progress. The project supports generating and parsing all Standard Entry Class (SEC) codes and validating files according to the Nacha standards. If you have layers above ACH to simplify tasks, perform business operations, or found bugs we would appreciate an issue or pull request. Thanks!

Usage

The ACH project implements an HTTP server and Go library for creating and modifying ACH files. There are client libraries available for both Go and Node/JavaScript. We also have an extensive list of examples of the reader and writer applied to various ACH transaction types.

Docker

We publish a public Docker image moov/ach from Docker Hub or use this repository. No configuration is required to serve on :8080 and metrics at :9090/metrics in Prometheus format.

Pull & start the Docker image:

docker pull moov/ach:latest
docker run -p 8080:8080 -p 9090:9090 moov/ach:latest

List files stored in-memory:

curl localhost:8080/files
{"files":[],"error":null}

Create a file on the HTTP server:

curl -X POST --data-binary "@./test/testdata/ppd-debit.ach" http://localhost:8080/files/create
{"id":"<YOUR-UNIQUE-FILE-ID>","error":null}

Read the ACH file (in JSON form):

curl http://localhost:8080/files/<YOUR-UNIQUE-FILE-ID>
{"file":{"id":"<YOUR-UNIQUE-FILE-ID>","fileHeader":{"id":"","immediateDestination":"231380104","immediateOrigin":"121042882", ...

Google Cloud Run button

To get started in a hosted environment you can deploy this project to the Google Cloud Platform.

From your Google Cloud dashboard create a new project and call it:

moov-ach-demo

Click the button below to deploy this project to Google Cloud.

Run on Google Cloud

Note: If you get an error about the image being marked as "Do Not Trust" follow the below steps.

Error: You launched this custom Cloud Shell image as "Do not trust"
$ cloudshell_open --repo_url "https://github.com/moov-io/ach" --page "shell" --git_branch "master"
Error: You launched this custom Cloud Shell image as "Do not trust".
In this mode, your credentials are not available and this experience
cannot deploy to Cloud Run. Start over and "Trust" the image.
Error: aborting due to untrusted cloud shell environment

This error occurs when some security settings on your account / cloud shell are locked down. To run ACH you need to trust the image, so in the top-right click to restart this image as Trusted.

Click to "Return to default"

Then you'll need to clone down and launch ACH. Pick option #3 to clone this project.

cloudshell_open --repo_url "https://github.com/moov-io/ach" --page "shell" --git_branch "master"

Start the ACH server inside the cloned repository.

go run ./cmd/serverr

Connect to the web preview (e.g. https://YOUR-ACH-APP-URL.a.run.app:8080/files)


In the cloud shell you should be prompted with:

Choose a project to deploy this application:

Using the arrow keys select:

moov-ach-demo

You'll then be prompted to choose a region, use the arrow keys to select the region closest to you and hit enter.

Choose a region to deploy this application:

Upon a successful build you will be given a URL where the API has been deployed:

https://YOUR-ACH-APP-URL.a.run.app

From the cloud shell you need to cd into the ach folder:

cd ach

Now you can list files stored in-memory:

curl https://YOUR-ACH-APP-URL.a.run.app/files

You should get this response:

{"files":[],"error":null}

Create a file on the server:

curl -X POST --data-binary "@./test/testdata/ppd-debit.ach" https://YOUR-ACH-APP-URL.a.run.app/files/create

You should get this response:

{"id":"<YOUR-UNIQUE-FILE-ID>","error":null}

Finally, read the contents of the file you've just posted:

curl https://YOUR-ACH-APP-URL.a.run.app/files/<YOUR-UNIQUE-FILE-ID>

You should get this response:

{"file":{"id":"<YOUR-UNIQUE-FILE-ID>","fileHeader":{"id":"...","immediateDestination":"231380104","immediateOrigin":"121042882", ...

HTTP API

The package github.com/moov-io/ach/server offers an HTTP and JSON API for creating and editing files. If you're using Go the ach.File type can be used, otherwise you can send properly formatted JSON. We have an example JSON file, but each SEC type will generate different JSON.

Examples: Go | Ruby

Configuration settings

Environmental Variable Description Default
ACH_FILE_TTL Time to live (TTL) for *ach.File objects stored in the in-memory repository. 0 = No TTL / Never delete files (Example: 240m)
ACH_MAX_BODY_SIZE Maximum HTTP request body size acc

readme truncated — read the full docs on github

Frequently asked questions

Is ach free to use?

ach is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does ach do?

ACH implements a reader, writer, and validator for Automated Clearing House (ACH) files. The HTTP server is available in a Docker image and the Go package is av

What is ach written in?

ach is primarily written in Go. Its source is publicly available at https://github.com/moov-io/ach, and it has 564 GitHub stars.