Atomic workload bundles
Lease a machine, devices and license tokens together. The request gets every resource in one transaction or waits without holding capacity.
Resource leasing platform
Lease GPUs, licenses and test environments without double-booking.
A strictly consistent resource leasing and capacity orchestration platform. Teams allocate, reserve and govern scarce shared resources with linearizable guarantees: a request either gets everything it asked for, or waits without holding anything.
{
"pool_type": "A100-Cluster",
"owner_id": "team-alpha",
"tenant_id": "project-omega",
"ttl_seconds": 3600,
"priority": 100,
"waitlist": true,
"idempotency_key": "retry-safe-key"
}
Lease a machine, devices and license tokens together. The request gets every resource in one transaction or waits without holding capacity.
Allocation runs on PostgreSQL SELECT FOR UPDATE SKIP LOCKED, so concurrent requests never receive the same resource.
Weighted tenant quotas with hard and soft limits, pool capacity caps, and opt-in priority preemption.
Full pools queue requests with priority aging against starvation; future reservations turn into real leases when due.
Requests carrying the same idempotency key return the original lease instead of creating a duplicate.
A transactional outbox with retries and dead-lettering delivers HMAC-signed webhooks for every grant and revocation.
Domain-Driven Design with a hexagonal (ports and adapters) structure:
Pools, resources and leases with pure business rules and repository traits; no framework dependencies.
Allocation and platform services, plus background reaper, maintenance, outbox and reservation services.
PostgreSQL implementations of the repository traits, where the atomic concurrency logic lives.
REST (Axum) and gRPC (tonic) entry points with optional bearer-token authentication.
git clone https://github.com/esgaltur/atropos.git
cd atropos
docker-compose -f infra/docker-compose.yml up -d
cp .env.example .env
sqlx migrate run --source infra/migrations
cargo run
The full documentation is in the repository on GitHub.