Contributing
Titan is a solo-built experimental runtime. Contributions are welcome — bug fixes, docs, tests, new examples, and new capabilities (execution drivers, scheduling policies, integration layers) are all useful. If you've built something on top of Titan that you think belongs in the core, open a PR. Large architectural changes are best discussed first in a GitHub Discussion before starting work.
Before You Start
- Check the Roadmap to v2.0 — if you want to work on a major feature (Raft, mTLS, Docker drivers), open a Discussion first so we can coordinate
- Look for issues tagged
good first issueorhelp wanted - If you're unsure whether something is worth a PR, ask in Discussions → Ideas
Local Development Setup
# 1. Clone
git clone https://github.com/ramn51/titan-orchestrator.git
cd titan-orchestrator
# 2. Build the engine JAR (requires Java 17+ and Maven)
mvn clean package -DskipTests
# 3. Install the Python SDK in editable mode
pip install -e .
# 4. Start the full local cluster
./titan-dev.sh up
The cluster is live when you see:
Dashboard at http://localhost:5000.
Running Tests
SDK unit tests (no cluster needed)
End-to-end cluster tests (cluster must be running)
# Basic DAG execution
python titan_test_suite/examples/dynamic_dag_custom/complex_etl_pipeline/etl_pipeline.py
# TitanStore KV
python titan_test_suite/examples/titan_store_example/test_suite.py
# YAML pipeline
python titan_sdk/titan_cli.py deploy titan_test_suite/examples/yaml_based_static_tests/dag_structure_test/agent.yaml
Java engine tests
Java test coverage is limited
The Java tests were written during early PoC and some may be flaky. The primary validation path is the Python end-to-end examples above. Improving Java test coverage is a good first contribution.
Making Changes
Engine (Java — src/main/java/titan/)
Scheduler.java— core dispatch loop, DAG resolution, worker registryRpcWorkerServer.java— TCP server handling client connectionsAssetManager.java— file upload and stagingTitanStore(perm_files/TitanStore.jar) — embedded AOF-backed KV store
After any Java change, rebuild and replace the Worker.jar:
SDK (Python — titan_sdk/)
titan_sdk.py—TitanClient,TitanJob, all RPC operationstitan_yaml_parser.py— YAML pipeline parsertitan_cli.py— CLI entry point
Dashboard (Python — perm_files/server_dashboard.py)
Self-contained Flask app. Restart it after changes:
Submitting a PR
- Fork the repo and create a branch:
git checkout -b fix/your-fixorfeature/your-feature - Make your change and test it end-to-end with the cluster running
- Add or update the relevant example in
titan_test_suite/if it's a behaviour change - Open a PR with:
- What changed and why
- How you tested it (which example ran, what you observed)
- Any known limitations or follow-up work
PRs that change the core dispatch loop or RPC protocol should include a short description of the failure modes you considered.
Testing Strategy (Honest Assessment)
Titan's test coverage reflects its research origins:
| Layer | Coverage | Notes |
|---|---|---|
| SDK unit tests | Moderate | titan_sdk/tests/unit/ — job construction, manifest, HITL injection |
| SDK mock tests | Light | titan_sdk/tests/mock/ — client method smoke tests |
| Engine Java tests | Light | Written during PoC, may be flaky |
| End-to-end | Good (manual) | titan_test_suite/ examples cover most codepaths |
| Integration (cluster up) | Light | titan_sdk/tests/integration/ — TitanStore only |
Improving test coverage — especially Java unit tests for Scheduler and AssetManager — is one of the most impactful contributions you can make.
Code of Conduct
Be respectful, constructive, and direct. This is a technical project — disagreements about implementation choices are fine; personal criticism is not.
License
Apache 2.0. See LICENSE in the repository root.
Built and maintained by Ram Narayanan A S. © 2026.