How gittan works

Push code. Pipeline runs. Results stream to your terminal. No tabs, no waiting, no ceremony.

GitHub Actions

~90s

overhead before your code even starts running

  • Provision VM from scratch
  • Pull Docker images every run
  • Install dependencies every run
  • Sequential step execution

gittan

<1s

from push to first step executing

  • Pre-pulled images, warm runners
  • Sub-second container start
  • Layer caching across runs
  • Parallel DAG execution

Pipeline flow

What happens when you run git push origin main

git push
→
gated?
→
pipeline runs
→
green?
yes →
main updated
no  →
push rejected

GitHub vs gittan

Ship a change to main.

GitHub

11 steps
  1. Create feature branch
  2. Push branch to remote
  3. Open pull request
  4. Wait for CI to start (~90s)
  5. CI runs, review requested
  6. Wait for reviewer
  7. Address review comments
  8. Re-request review
  9. Get approval
  10. Merge PR
  11. Delete branch

gittan

1 step
git push origin main

Pipeline runs during push. If it passes, main is updated. If it fails, push is rejected. Done.

Pipeline config layers

Three layers merge into a single pipeline. Org policies are enforced, team templates provide defaults, repos can add their own steps.

Injected

Org policy

Security gates, license scanning, image signing. Teams cannot remove these steps.

# org-policy.yaml (managed by platform team)
steps:
  - name: license-check
    image: gittan/license-scanner:20260601
    enforced: true
  - name: sign-image
    image: gittan/cosign:20260601
    enforced: true

Terminal feedback

Pipeline results stream to your terminal during git push. No browser needed.

terminal
$ git push origin main
remote: gittan pipeline started
remote:
remote: [license-check] running...
remote: [license-check] passed (0.4s)
remote: [lint] running...
remote: [test] running...
remote: [lint] passed (1.2s)
remote: [test] passed (3.8s)
remote: [build] running...
remote: [build] passed (2.1s)
remote: [sign-image] running...
remote: [sign-image] passed (0.3s)
remote:
remote: Pipeline passed (7.8s total)
remote: main updated: a1b2c3d..f4e5d6a
To gittan.eu:acme/api-service.git
a1b2c3d..f4e5d6a main -> main