Users fill out forms to trigger workflows. The workflow config defines the inputs and Flowctl renders them as forms. Inputs can use expr expressions for validation.
Workflows are sequences of actions. Each action can run locally or on remote nodes via SSH. Each action uses an executor and can wait for approvals before proceeding.
Executors provide the runtime environments for the actions. Right now 2 executors are available (Docker and Script). Executors are modular but I'm working on making them pluggable via gRPC plugins.
I built this because I needed a simple tool to manage my homelab while traveling, something that acts as a UI for scripts. At work, I was also looking for tools to turn repetitive ops/infra tasks into self-service offerings. I tried tools like Backstage and Rundeck, but they were either too complex, or the OSS versions lacked important features.
Example use cases:
- Database migrations: Wait for DBA approval, run migration on remote DB host via SSH, post-migration validation.
- Self-service infra provisioning: Terraform plan runs in Docker container, outputs plan as artifact, pauses for approval, applies on approval.
- Emergency disk space cleanup: On-call engineer triggers via UI. Workflow SSHs to server, identifies safe-to-delete files (old logs, temp files, Docker cache) and cleans up.
Features:
- SSO with OIDC and RBAC
- Namespace isolation
- Execution on remote nodes with SSH
- Approvals
- Cron-based scheduling
- Encrypted credentials and secrets store
- Docker and Script executors
- File and variable passing between actions
- Parallel execution on multiple remote nodes
Tech stack: Go, SvelteKit, PostgreSQL
Demo: https://demo.flowctl.net (optimized for desktop)
Homepage: https://flowctl.net
GitHub: https://github.com/cvhariharan/flowctl
I'd appreciate any feedback on features, use cases, or issues you encounter. Happy to answer questions!