Typeflows brings Configuration-as-Code to GitHub Actions
(We've all been there)
GitHub's reusable workflows help, but managing versions across 50 repos is still manual. No automatic dependency management, no testing.
With Typeflows:
Manage workflows like real packages with automated updates, dependency resolution, and test before you commit.
GitHub Actions expressions are painful. One typo breaks everything and the templating language is impossible to debug.
With Typeflows:
Express complex logic in real code with proper conditionals and type checking.
Change one workflow trigger and three others break mysteriously. Jobs run on wrong branches with no way to test coordination logic locally.
With Typeflows:
Test workflow coordination logic locally - validate which jobs run when, without pushing commits.
Good luck remembering parameter names for marketplace actions. Hope you typed the output name correctly. Every integration feels like trial and error.
With Typeflows:
Type-safe marketplace actions with IDE autocomplete for all parameters and outputs.
You build sophisticated reusable workflows, then GitHub mysteriously rejects your YAML with "workflow nesting too deep". Invisible composition limits break without warning.
With Typeflows:
No artificial limits - complex workflow composition flattens into deployable YAML automatically.
Real code. Real testing. Real confidence.
The code examples look much better when viewed horizontally. Please rotate your device for the best experience!
Or view on a larger screen to see the code!
class Deploy : Builder<Workflow> {
override fun build() = Workflow("deploy") {
on += Push {
branches = Branches.Only("main")
paths = Paths.Only("src/**")
}
val buildJob = Job("build", UBUNTU_LATEST) {
steps += Checkout()
steps += UseAction("actions/setup-node@v4") {
with["node-version"] = "20"
}
steps += RunCommand("npm run build && npm test")
}
jobs += buildJob
jobs += Job("deploy", UBUNTU_LATEST) {
needs += buildJob
steps += UseAction("actions/deploy@v2") {
with["target"] = "production"
with["token"] = $$"${{ secrets.DEPLOY_TOKEN }}"
}
}
}
}
name: Deploy to Production
on:
push:
branches: [main]
paths: ['../../../..']
jobs:
build:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Build and Test
run: npm run build && npm test
deploy:
needs: [build]
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/deploy@v2
with:
target: production
token: ${{ secrets.DEPLOY_TOKEN }}
Type-safe workflows and beyond - manage your entire GitHub configuration with the same powerful features
Your IDE catches workflow errors before you commit. YAML's lack of compile-time validation means syntax errors only surface at runtime - your development environment prevents this.
Build your entire GitHub configuration from reusable, versioned components. Workflows, CODEOWNERS, AI assistant instructions, security policies, and issue templates with dependency management and semantic versioning across teams.
Test which jobs run when, validate trigger conditions, and verify job dependencies work correctly. Test workflow coordination logic locally. No more "push and pray" debugging.
Copilot learns your team's coding standards automatically. AI assistant instructions, TDD practices, architecture patterns, and code conventions stay consistent across your entire development workflow and CI/CD pipeline.
Import your existing workflows automatically. Convert one at a time. Keep shipping while you improve your developer experience.
Export standard GitHub Actions YAML anytime. No proprietary formats. Your workflows remain portable and future-proof.
Auto-generated diagrams and documentation that keep your team aligned and your workflows transparent.
Visualize job dependencies and execution flow

Clear visualisation of which jobs depend on others
Detailed view of every action and step in each job
See exactly when and why workflows execute
Track artifacts and outputs between jobs
Coming soon: Copilot instructions, security policies, branch protection, and full .github folder visualisation
ROADMAPSee Configuration-as-Code in action
| Challenge | Manual YAML | Typeflows |
|---|---|---|
| Syntax errors | Runtime failures | Compile-time validation |
| Testing | Push and pray | Test workflow orchestration locally |
| IDE support | Basic syntax highlighting/formatting | Full autocomplete & refactoring |
| Workflow reuse | Copy-paste duplication | Import workflows/actions as packages |
| Composition limits | Mysterious workflow/job limit errors | No artificial limits |
| Refactoring | Find/replace across files | Safe automated updates |
| Documentation | Manual docs that get stale | Auto-generated visualisations |
Every repository starts by copying .github/ from another project. They immediately diverge, creating maintenance headaches.
Every repo starts by copying .github/ from another. They immediately diverge and become inconsistent across your organisation.
Security configs, Dependabot settings, and CODEOWNERS drift apart. Compliance becomes impossible to track and enforce.
Updating policies means manually editing hundreds of repos. No rollback, no testing, no audit trail.
Typeflows brings Configuration-as-Code to repository management. Compose your entire .github/ folder from type-safe, reusable components.
The code examples look much better when viewed horizontally. Please rotate your device for the best experience!
Or view on a larger screen to see the code!
Build each .github/ file type as a separate, testable component with proper type-safety and IDE support. Write once, reuse everywhere.
class CI : Builder<Workflow> {
override fun build() = Workflow("build") {
on += WorkflowDispatch.create()
permissions = Permissions(Contents to Write)
on += Push {
branches = Branches.Main
paths = Paths.Ignore("**/.md")
}
on += PullRequest {
paths = Paths.Ignore("**/.md")
}
jobs += Job("build", UBUNTU_LATEST) {
steps += Checkout()
steps += SetupJava(Adopt, V21)
steps += SetupGradle()
steps += RunCommand("./gradlew check")
steps += UseAction(
"mikepenz/action-junit-report@v5.6.2"
) {
condition = always()
with["report_paths"] = "**/TEST-*.xml"
with["github_token"] = GITHUB_TOKEN
}
}
}
}
Compose all components into a single DotGitHub class that manages your entire .github/ folder. One class, complete control.
class Typeflows : Builder<TypeflowsGitHubRepo> {
override fun build() = TypeflowsGitHubRepo {
dotGithub = DotGitHub {
workflows += CI()
workflows += Deploy()
files += StandardDependabot()
files += StandardSecretScanning()
files += TeamCodeOwners("myteam")
files += CopilotInstructions {
content +=
markdownMd("hexagonal-architecture.md") +
markdownMd("tdd.md") +
markdownMd("kotlin-style.md")
content += Microservice()
}
}
}
private fun markdownMd(resourceName: String) =
fromResource(Microservice::class.java, resourceName)
}
Unit test workflows, security policies, and team configurations before deploying.
Track changes, rollback updates, and maintain audit trails for compliance.
Package and distribute your standards across teams and organisations.
Version and share your configurations like any other software dependency.
The code examples look much better when viewed horizontally. Please rotate your device for the best experience!
Or view on a larger screen to see the code!
Configure your build to publish standards as versioned packages.
plugins {
kotlin("jvm")
`maven-publish`
}
dependencies {
api("io.typeflows:typeflows-github")
}
publishing {
publications {
create<MavenPublication>("maven") {
groupId = "com.company"
artifactId = "github-standards"
version = "2.1.0"
from(components["java"])
pom {
name.set("Company GitHub Standards")
description.set("Reusable GitHub configurations and policies")
}
}
}
repositories {
maven {
url = uri("https://packages.company.com/maven")
credentials {
username = System.getenv("MAVEN_USERNAME")
password = System.getenv("MAVEN_PASSWORD")
}
}
}
}
Teams add your standards as dependencies and control upgrades.
plugins {
kotlin("jvm")
id("io.typeflows")
}
repositories {
mavenCentral()
maven("https://packages.company.com/maven")
}
dependencies {
implementation("com.company:github-standards:2.1.0")
implementation("io.typeflows:typeflows-github")
}
typeflows {
typeflowsClass = "TypeflowsRepo"
}
Works with all major package registries
No need to replace everything at once. Upgrade your GitHub configuration management incrementally with zero lock-in.
Convert your current YAML workflows and configurations into type-safe code. Keep everything working exactly as before.
Start with a single repository or team. Demonstrate the value of type-safe configurations, testing, and code reuse.
Roll out across your organisation at your own pace. Share standards packages and maintain consistency at scale.
Complete GitHub configuration management at scale. From workflows to security policies, manage everything as versioned, testable code.
Build GitHub standards from modular, reusable components. Mix organisational policies with team customisations. Share battle-tested patterns as versioned libraries, not brittle copy-paste templates.
Define organisational base configurations that teams extend and customise. Enforce non-negotiable security requirements while enabling team-specific workflows and policies.
Upgrade GitHub configurations like software dependencies. Semantic versioning, compatibility matrices, and controlled rollouts across hundreds of repositories with proper dependency resolution.
Test which jobs run under what conditions before pushing. Validate trigger logic, verify job dependencies, and simulate complex multi-workflow coordination scenarios locally.
Auto-generated diagrams and documentation that help teams understand and manage complex repository configurations.
Visualise complex workflow dependencies and execution flow

Visualise intricate job dependencies and conditional flows
Every action, step, and condition in multi-stage workflows
Complex trigger conditions and workflow orchestration
Track data and artifacts through complex pipelines
Expanding visualisation to cover complete .github folder management
Join the early access beta. Free during beta, open source projects free forever. Join the early access beta. Define your .github/ folder once, deploy everywhere.
📧 No spam, just Early Access updates and release notifications
Common questions about Typeflows and workflow development Common questions about Typeflows and GitHub configuration management