A pull-based, database-backed pipeline execution engine for Jenkins.
🚧 Pre-1.0. Titan is under active development and the APIs are not yet stable.
Titan is a Jenkins plugin that runs CI/CD pipelines with a pull-based, channel-less execution model:
- Declarative pipelines. A pipeline is described in a
titan-pipeline.ymlfile — stages, dependencies, steps, gates, retries — parsed and validated before it runs. - Pull-based workers. Work is published to a database task queue. Standalone Titan workers poll the queue, execute steps locally or in containers, stream logs back, and heartbeat. The controller never opens a connection to a worker.
- Database-backed state. Pipeline, build, queue, and timer state live in a relational database (PostgreSQL or H2), with schema migrations managed by Flyway. Restarts and failovers recover from the database, not from in-memory state.
Why this design exists, and how it fits together:
- docs/01 — Motivation — where the classic Jenkins
Pipeline model breaks:
program.dat, XStream, stateful channels, CPS, the Kubernetes era, the shared-library trap. - docs/02 — Architecture — state in PostgreSQL, a task queue, pull-based workers, no persistent channels. With diagrams.
- docs/03 — Tradeoffs — what Titan deliberately gives up to get there.
| Module | Description |
|---|---|
titan-plugin |
The Jenkins plugin — controller, scheduler, UI. Builds titan.hpi. |
titan-worker |
The standalone pull-based worker. |
titan-step-api |
Public SPI for implementing pipeline step handlers. |
titan-pipeline-model |
Pipeline parser, model, and grammar. |
titan-db-core |
Shared JDBC pool and Flyway runner. |
titan-artifact-s3 / titan-artifact-nexus |
Artifact store backends. |
titan-keyprovider-infisical |
Infisical-backed credential key provider. |
Requires JDK 21. The build is self-contained via the bundled Maven wrapper — no system Maven needed.
git clone https://github.com/hadamrd/titan.git
cd titan
./mvnw clean packageThe plugin is produced at titan-plugin/target/titan.hpi. Install it via
Manage Jenkins → Plugins → Advanced → Deploy Plugin.
To run a development Jenkins with the plugin loaded:
./mvnw -pl titan-plugin hpi:runJenkins starts on http://localhost:8080/jenkins.
./mvnw verifyIntegration tests use Testcontainers and require a running Docker daemon.
See CONTRIBUTING.md for the development workflow and CODE_OF_CONDUCT.md for community expectations.
MIT.