Trusted by 3 million+ teams, try ClickUp for free today!

I built Titan, a lightweight distributed orchestrator, mainly as a way to learn the core primitives of distributed systems in Java like scheduling, concurrency, IPC, and failure detection without relying on Spring, Netty, or HTTP.
At a high level, Titan can:
-
Orchestrate long-running services and ephemeral batch jobs in the same runtime
-
Execute dependency-driven DAGs (serial chains, fan-out, fan-in)
-
Run with zero external dependencies as a single ~90KB Java JAR
The core runtime is written in Java 17 using:
-
Raw
java.net.Socketwith a small custom binary protocol -
java.util.concurrentprimitives for scheduling and execution -
Process-level isolation using
ProcessBuilder(workers can spawn child JVMs to handle burst load)
Workers register themselves with the master (push-based discovery), monitor their own load, and can auto-scale locally when saturated.
I built this mostly to understand how these pieces fit together when you don’t abstract them away behind frameworks.
If anyone’s interested, I’d love feedback on the current state.
I built this incrementally by satisfying base requirements of having a homelab setup for doing some coordinated scripts and then evolved to service orchestrator and then to a runtime for dynamic DAGs (so agentic ai can leverage the runtime parallelism etc).
Repo (with diagrams and demos):