Awesome Go

ledger

CategoryFinancial
SubcategoryFinancial
Stars1,438

A programmable financial ledger that provides a foundation for money-moving applications

About ledger

Ledger v3 - Raft Cluster

Distributed ledger system using the Raft consensus protocol to ensure data consistency across a cluster of nodes. The system uses a single Raft group to manage all ledgers and their transactions, providing strong consistency and simplified operations.

Key Features

FeatureDescription
Distributed ConsensusUses etcd/raft for strong consistency across cluster nodes
Single Raft ArchitectureAll ledgers managed by one Raft group for atomic operations
Pebble StorageHigh-performance LSM-tree storage engine (CockroachDB), pure Go
Numscript SupportFull support for Numscript transaction scripting
IdempotencyBuilt-in idempotency key support for safe retries
Bulk OperationsProcess multiple transactions in a single request
ObservabilityOpenTelemetry (traces, metrics, logs) + Pyroscope profiling
Request SigningEd25519 request signing for authenticity and integrity

Architecture

┌─────────────────────────────────────────────────────────────┐
│                     Client Applications                     │
│              (HTTP REST / gRPC / CLI Client)                │
└─────────────────────────────────────────────────────────────┘
                              │
         ┌────────────────────┼────────────────────┐
         ▼                    ▼                    ▼
┌───────────────────┐  ┌───────────────────┐  ┌───────────────────┐
│     Node 1        │  │     Node 2        │  │     Node 3        │
│   (Leader)        │  │   (Follower)      │  │   (Follower)      │
├───────────────────┤  ├───────────────────┤  ├───────────────────┤
│ HTTP :9000        │  │ HTTP :9000        │  │ HTTP :9000        │
│ gRPC :8888        │  │ gRPC :8888        │  │ gRPC :8888        │
├───────────────────┤  ├───────────────────┤  ├───────────────────┤
│  Single Raft      │◄─┼─ Raft Protocol ──►│◄─┤  Single Raft      │
│     Group         │  │                   │  │     Group         │
├───────────────────┤  ├───────────────────┤  ├───────────────────┤
│ FSM (All Ledgers) │  │ FSM (All Ledgers) │  │ FSM (All Ledgers) │
├───────────────────┤  ├───────────────────┤  ├───────────────────┤
│  Store (Pebble)   │  │  Store (Pebble)   │  │  Store (Pebble)   │
└───────────────────┘  └───────────────────┘  └───────────────────┘

Quick Start

Prerequisites: Go 1.27+, Just, Nix with Flakes enabled.

# Setup (first time only)
direnv allow

# Start a single node
just run

For cluster deployment and Kubernetes, see the Deployment Guide.

Development

just build           # Build the application
just test            # Run tests
just test-e2e        # Run end-to-end tests
just generate-proto  # Generate protobuf code
just pre-commit      # Run all checks (generate, tidy, lint)

For more details, see the Developer Guide.

Documentation

GuideAudience
OperationsDeploy, monitor, backup, CLI reference
DevelopmentArchitecture, conventions, testing
Product OverviewFeatures, benchmarks, v2 vs v3
Drafts & RFCsExperimental designs

See docs/README.md for full navigation.

Frequently Asked Questions

What is ledger?

ledger is a Financial library for the Go programming language. A programmable financial ledger that provides a foundation for money-moving applications

How many GitHub stars does ledger have?

ledger has 1,438 GitHub stars in the directory's latest synchronization.

How do I install ledger?

Install ledger with the Go module system using `go get formancehq/ledger`. Check the repository for the current installation instructions.

What category does ledger belong to?

ledger is listed under Financial, specifically Financial.

← Back to Financial