Declarative Cashu application deployments for Kubernetes
  • Go 96.5%
  • Makefile 2.1%
  • Starlark 0.7%
  • Dockerfile 0.4%
  • Shell 0.3%
Find a file
asmo 08616455c4
feat: ark (#21)
* local ark payment processor support

* ark

* added seed

* remove secret
2026-05-31 16:50:15 +02:00
.devcontainer initial commit 2025-11-01 14:44:02 +01:00
.github/workflows improve documentation (#15) 2026-04-21 10:43:03 +02:00
.zed ignore 2026-03-24 19:08:28 +01:00
api Expose Prometheus metrics on the Service (#20) 2026-05-16 21:02:23 +02:00
cmd metrics collector (#14) 2026-04-15 09:08:25 +02:00
config feat: ark (#21) 2026-05-31 16:50:15 +02:00
docs feat: ark (#21) 2026-05-31 16:50:15 +02:00
hack feat: ark (#21) 2026-05-31 16:50:15 +02:00
internal feat: ark (#21) 2026-05-31 16:50:15 +02:00
test fix lint 2026-03-27 21:22:55 +01:00
.dockerignore initial commit 2025-11-01 14:44:02 +01:00
.gitignore added tilt env. update default base image (#16) 2026-04-21 13:07:55 +02:00
.golangci.yml initial commit 2025-11-01 14:44:02 +01:00
CLAUDE.md Merge main into grpc: generic gRPC sidecar processor, cert-manager, postgres password in configmap 2026-02-27 20:52:02 +01:00
codecov.yml update e2e tests 2026-03-26 17:07:34 +01:00
ctlptl-config.yaml added tilt env. update default base image (#16) 2026-04-21 13:07:55 +02:00
Dockerfile initial commit 2025-11-01 14:44:02 +01:00
go.mod metrics collector (#14) 2026-04-15 09:08:25 +02:00
go.sum metrics collector (#14) 2026-04-15 09:08:25 +02:00
LICENSE release 2026-03-03 21:39:28 +01:00
Makefile added tilt env. update default base image (#16) 2026-04-21 13:07:55 +02:00
mkdocs.yml improve documentation (#15) 2026-04-21 10:43:03 +02:00
PROJECT initial commit 2025-11-01 14:44:02 +01:00
README.md feat: ark (#21) 2026-05-31 16:50:15 +02:00
Tiltfile feat: ark (#21) 2026-05-31 16:50:15 +02:00

Cashu Mint Operator

Release License CI Docs codecov

A Kubernetes operator for running CDK mintd with a single CashuMint custom resource. The operator manages the mint Deployment, generated config, Services, optional PostgreSQL, backups, ingress/TLS, Orchard, metrics, and sidecars so users can operate a Cashu mint with standard Kubernetes workflows instead of hand-managed YAML.

Documentation

What the operator manages

  • Deployment, ConfigMap, and Service for every mint
  • PVCs for SQLite, redb, and Orchard state
  • Auto-provisioned PostgreSQL Secret, Service, and StatefulSet
  • S3 backup CronJob and restore Job for auto-provisioned PostgreSQL
  • Ingress and optional cert-manager Certificate
  • Optional Orchard companion resources
  • Optional management RPC TLS Secret generation
  • Optional PodMonitor when Prometheus metrics are enabled
  • Optional gRPC payment processor sidecars and LDK node sidecars

Quick start

Install the latest release:

kubectl apply -f https://github.com/asmogo/cashu-operator/releases/latest/download/install.yaml

Deploy the minimal sample:

kubectl create namespace cashu-mints
kubectl apply -n cashu-mints \
  -f https://raw.githubusercontent.com/asmogo/cashu-operator/main/config/samples/mint_v1alpha1_cashumint_minimal.yaml
kubectl get cashumints -n cashu-mints -w

Access the mint:

kubectl -n cashu-mints port-forward svc/cashumint-minimal 8085:8085
curl http://localhost:8085/v1/info

Sample manifests

Scenario Manifest
Minimal quick start (fakeWallet + SQLite) mint_v1alpha1_cashumint_minimal.yaml
Annotated starter template mint_v1alpha1_cashumint.yaml
Auto-provisioned PostgreSQL mint_v1alpha1_cashumint_postgres_auto.yaml
External PostgreSQL mint_v1alpha1_cashumint_external_postgres.yaml
LND backend mint_v1alpha1_cashumint_lnd.yaml
LNBits backend mint_v1alpha1_cashumint_lnbits.yaml
CLN backend mint_v1alpha1_cashumint_cln.yaml
External gRPC payment processor mint_v1alpha1_cashumint_grpc_processor_external.yaml
Arkade Lightning sidecar processor mint_v1alpha1_cashumint_arkade_processor.yaml
Spark/Breez or Stripe sidecar processors mint_v1alpha1_cashumint_spark_breez.yaml, mint_v1alpha1_cashumint_stripe_processor.yaml
Orchard mint_v1alpha1_cashumint_orchard_sqlite.yaml, mint_v1alpha1_cashumint_orchard_postgres.yaml
Auth, Redis cache, limits, metrics mint_v1alpha1_cashumint_auth_httpcache.yaml
LDK node sidecar mint_v1alpha1_cashumint_ldk_node.yaml
Production-style reference mint_v1alpha1_cashumint_production.yaml

Development

Local development with Tilt + k3d

The recommended local workflow uses the dedicated k3d cluster defined in ctlptl-config.yaml.

make tilt-up

That command creates or updates a dedicated cashu-operator-dev k3d cluster with a local registry, switches kubectl to k3d-cashu-operator-dev, and starts Tilt against that context.

Once Tilt is running:

  1. codegen regenerates manifests and deepcopy code when the API changes.
  2. unit-tests is available as a manual Tilt resource for make test.
  3. demo-mint is available as a manual Tilt resource to apply a minimal CashuMint from config/dev/.
  4. demo-arkade-mint builds /Users/asm/git/cashu-arkade-lightning-procesor, imports cashu-arkade-lightning-procesor:dev into k3d, and applies the Arkade processor demo from config/dev/arkade/.

The Arkade demo image build defaults can be overridden with ARKADE_PROCESSOR_DIR, ARKADE_PROCESSOR_IMAGE, ARKADE_PROCESSOR_DOCKERFILE, and ARKADE_PROCESSOR_PLATFORM.

To inspect the demo mint after triggering demo-mint:

kubectl -n cashu-mints port-forward svc/cashumint-minimal 8085:8085
curl http://localhost:8085/v1/info

To inspect the Arkade processor demo after triggering demo-arkade-mint:

kubectl -n cashu-arkade port-forward svc/cashumint-arkade 8085:8085
curl http://localhost:8085/v1/info

To stop the local loop:

make tilt-down
make dev-cluster-delete
make build            # Build controller binary
make run              # Run controller locally against active kubeconfig
make dev-cluster-up   # Create/update the dedicated local k3d dev cluster
make tilt-up          # Start Tilt against the local k3d dev cluster
make tilt-down        # Stop Tilt and remove Tilt-managed resources
make dev-reset        # Tear down Tilt-managed resources and delete the dev cluster
make test             # Run unit tests
make test-e2e         # Run end-to-end tests (provisions Kind cluster)
make lint             # Run golangci-lint
make manifests        # Regenerate CRDs, RBAC, webhook configs
make generate         # Regenerate DeepCopy methods
make build-installer  # Generate dist/install.yaml

License

Apache 2.0 -- see LICENSE.