XRAPH/Fields/Distributed Systems

Distributed Systems

The Go framework everything else here sits on, plus the gateways, job engines and lifecycle managers around it.

Projects
15
Stars
3,177
Languages
TypeScript / Rust / Go
Focus area
Distributed Computing
01

Projects

15 in this field
SaaS starter

Ultimate Backend

A multi-tenant SaaS starter on NestJS: microservices behind Apollo Federation, CQRS backed by EventStoreDB, tenant resolution, billing and authentication already wired to each other. I wrote it because I kept rebuilding the same first two weeks of every project, and it is still the repository most people know me from.

TypeScript2899
Event sourcing

NestJS Event Store

A NestJS CQRS module that speaks to EventStoreDB, with persistent subscriptions, catch-up subscriptions, and the plumbing that makes @nestjs/cqrs durable. Pulled out of Ultimate Backend once people started asking for only that part.

TypeScript205
Microservices

Ultimate (Rust)

A first attempt at a microservice framework in Rust. I stopped after about a year: the ergonomics I wanted needed language features that were not there yet, and the type signatures had stopped being readable by the people the framework was for.

Rust35
Microservices

North

The second attempt, with better instincts. North got the lifecycle model right and the ergonomics wrong. Both lessons went into Forge, which is why Forge’s startup is an inspectable graph rather than an init function.

Rust17
Server-rendered UI

ForgeUI

Server-rendered UI for Go, built on templ with a templui component set and Tailwind. Alpine and HTMX helpers where you need interactivity, an esbuild and Tailwind asset pipeline with fingerprinting, a Go-to-JavaScript RPC bridge, and about 1,600 Lucide icons. Bastion’s dashboard is written in it.

Go8
Go framework

Forge

An opinionated Go framework: DI container, router, layered config, health checks, migrations and ordered shutdown, plus around twenty extensions you switch on when you need them: Postgres and Mongo, Kafka, MQTT, gRPC, GraphQL, WebRTC, Raft consensus, MCP. `forge init` scaffolds, `forge dev` hot-reloads. Everything else at xraph is built on it.

Go7
Protocol

FARP

The manifest format Octopus and Bastion consume. A service describes its own API surface across OpenAPI, AsyncAPI, gRPC, GraphQL, oRPC, Thrift and Avro, along with health and capability hints, and publishes it through Consul, etcd, Kubernetes, Redis or mDNS. FARP is the spec and the Go library. It deliberately does no routing itself.

Go4
Instance lifecycle

Ctrlplane

Provisions and manages per-tenant instances on whatever you already run: Docker, Kubernetes, ECS or Fly. Rolling, blue-green and canary strategies, health checks over HTTP, TCP, gRPC or a command, custom domains and certificates, per-tenant quotas, and an audit trail of every action.

Go1
Durable execution

Dispatch

Background jobs, durable workflows and leader-elected cron as a library you import rather than a service you operate. Workflow steps checkpoint, so a worker that dies mid-run resumes where it stopped instead of starting over. Exhausted retries land in a dead-letter queue you can inspect and replay.

Go1
Dependency injection

Vessel

The DI container underneath Forge, extracted so it can be used on its own. Generic type-safe resolution, uber/dig-style constructor injection, singleton, transient and request-scoped lifetimes, circular-dependency detection, and Start/Stop/Health on every registered service.

Go0
Configuration

Confy

Config loading that stays out of the way: files, environment variables, Consul and Kubernetes ConfigMaps, typed getters with defaults, struct binding with a `default` tag, and hot reload on file change. Auto-discovery walks up from a nested service directory until it finds the repo’s config, which matters in a monorepo.

Go0
HTTP router

Steel

A Go router with typed handlers. Declare the request struct and you get path, query and body binding, validation, and an OpenAPI 3 document generated from the same types. WebSocket and SSE routes produce AsyncAPI. Forge’s router grew out of it.

Go0
Webhooks

Relay

Webhook delivery as a library. Event types register at runtime with an optional JSON Schema, every delivery is signed with HMAC-SHA256, retries back off from five seconds to two hours, and anything that still fails waits in the DLQ until the customer fixes their endpoint and you replay it.

Go0
Gateway extension

Bastion

The same idea as Octopus, but as a Forge extension for teams who want the gateway inside their own Go process. HTTP, WebSocket, SSE and gRPC proxying, per-target circuit breakers, traffic splitting for canary and shadow releases, and an admin dashboard written in ForgeUI.

Go0
API gateway

Octopus

A gateway in Rust that builds its own routing table. Services publish a FARP manifest carrying their OpenAPI, gRPC and GraphQL schemas; Octopus finds them over mDNS, Consul, Kubernetes or DNS and derives routes as instances appear and disappear. Static config works too, and the two modes run side by side.

Rust0
02

Related Research

All research ↗
2024

FARP: A Manifest Protocol for Gateway Route Derivation

How a service declares its own API surface across seven schema formats, with health and capability hints, so that a gateway derives its routing table as a pure function of the manifests it can see. Includes conformance requirements and the costs of putting discovery on the routing path. Two implementations consume it, though both share one author.

FARPOctopusBastion
SpecificationDraft
2022

Where Generic Abstraction Stops Helping: Framework Ergonomics in Systems Languages

Two abandoned Rust frameworks, examined for the same failure: an abstraction that re-exports its decisions as type parameters has not hidden them. Proposes counting empty interface implementations as a measurable design signal.

Ultimate (Rust)NorthForge
Technical noteDraft
2021

Service Startup as a Declared Dependency Graph

Ordering expressed as a sequence of statements is correct by accident and drifts under maintenance. Deriving start order from declared dependencies makes boot failures nameable, makes shutdown correct for free, and makes the ordering inspectable at runtime.

NorthForgeVessel
Technical noteDraft
2020

Structural Multi-Tenancy: Enforcing Isolation Below the Query Layer

In every cross-tenant disclosure the author has examined, the cause was one query missing one predicate. This note argues the boundary must be enforced by the storage engine rather than the application, and gives a test whose failure means the boundary is not where you believe it is.

Ultimate BackendFabriq
Technical noteDraft