mayfly
Ephemeral environments.
Delightfully fast.
One YAML spec spins up a test environment in an isolated Kubernetes namespace: an emulated cloud harness — AWS (S3, RDS, ElastiCache, Kafka, DynamoDB) and Azure (Key Vault, Postgres, SQL) — plus your apps, talking to it with the SDKs they already use.
Spin up. Test. Tear down. A TTL reaper destroys anything left behind.
lives fast. gone by sunset.
One spec, full stack
Declare S3 buckets, RDS databases, ElastiCache, Kafka topics, Key Vaults, and app deployments in one YAML file. In-cluster AWS and Azure emulators play the cloud — your apps can't tell. Everything spins up together. Everything tears down together.
Truly isolated
Each environment is one Kubernetes namespace, deterministically named from a seed. Teardown is namespace deletion — no leftovers, ever.
Self-cleaning
TTLs on everything. mayfly reap and the reaper delete expired environments automatically. Live fast, clean fast. Leave no trace.
/ how it works
> Local emulation, cloud-compatible
AWS runs in-cluster behind http://aws:4566 — MiniStack or floci, your pick.
Azure runs on floci-az behind http://azure:4577.
Swap the backend if you like. Your apps don't care.
> No Docker socket. No privileged pods.
We don't mount your Docker socket.
We don't need privileged pods.
We don't touch real AWS or Azure.
Sleep well.
> Secrets as the contract
Every service's endpoints and credentials are delivered as Kubernetes Secrets. Your apps consume Secrets. That's it.
> Deterministic naming
Names derived from the seed.
Predictable, shareable, scriptable.
Perfect for PRs and previews.
/ cli reference
mayfly up env.yaml
--seed/--set for per-PR variants)
mayfly status env.yaml
mayfly list
mayfly render env.yaml
mayfly extend env.yaml --ttl 4h
mayfly restart env.yaml
mayfly down env.yaml
mayfly reap
/ install
Requires: kubectl + any Kubernetes cluster (k3d is plenty).
Or: pip install mayfly-cli