{"id":50205375,"url":"https://github.com/syalioune/flowatch","last_synced_at":"2026-06-07T12:01:26.734Z","repository":{"id":358415669,"uuid":"1236208804","full_name":"syalioune/flowatch","owner":"syalioune","description":"Model. Deploy. Operate. The browser GUI for Flowable 7+ OSS","archived":false,"fork":false,"pushed_at":"2026-06-03T21:46:34.000Z","size":9937,"stargazers_count":0,"open_issues_count":27,"forks_count":0,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2026-06-03T23:14:44.338Z","etag":null,"topics":["bpmn","dmn","react","rest-api","vite","workflow","workflow-engine"],"latest_commit_sha":null,"homepage":"https://syalioune.github.io/flowatch/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/syalioune.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-12T03:32:47.000Z","updated_at":"2026-06-03T21:43:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/syalioune/flowatch","commit_stats":null,"previous_names":["syalioune/flowatch"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/syalioune/flowatch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syalioune%2Fflowatch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syalioune%2Fflowatch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syalioune%2Fflowatch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syalioune%2Fflowatch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/syalioune","download_url":"https://codeload.github.com/syalioune/flowatch/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syalioune%2Fflowatch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34020187,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bpmn","dmn","react","rest-api","vite","workflow","workflow-engine"],"created_at":"2026-05-26T01:05:16.748Z","updated_at":"2026-06-07T12:01:26.729Z","avatar_url":"https://github.com/syalioune.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"left\"\u003e\n  \u003cimg src=\"branding/flowatch-lockup.svg\" alt=\"Flowatch\" height=\"48\"\u003e\n\u003c/p\u003e\n\n[![CI](https://github.com/syalioune/flowatch/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/syalioune/flowatch/actions/workflows/ci.yml)\n[![License: Apache 2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)\n[![Latest release](https://img.shields.io/github/v/release/syalioune/flowatch?display_name=tag\u0026sort=semver)](https://github.com/syalioune/flowatch/releases)\n[![Tested vs Flowable](https://img.shields.io/badge/Flowable-7.2.0-orange.svg)](docs/compat.md)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12874/badge)](https://www.bestpractices.dev/projects/12874)\n\n# Flowatch — the OSS GUI for Flowable 7+\n\n\u003e _Flowatch is a community OSS GUI for Flowable. Not affiliated with Flowable.com Ltd._\n\nA single-page React + Vite GUI for **[Flowable](https://www.flowable.com/open-source/)** 7.x and beyond — the open-source BPMN/DMN process engine. Flowatch wraps the Flowable REST API and embeds the official [`bpmn-js`](https://bpmn.io/toolkit/bpmn-js/) and [`dmn-js`](https://bpmn.io/toolkit/dmn-js/) modelers in the browser. The app talks **only to the live engine** — there is no mock fallback. When the engine is unreachable, screens render explicit error states.\n\n## Why Flowatch exists\n\nFlowatch gives Flowable 7+ OSS users a complete browser GUI: model BPMN and DMN, deploy them, watch instances, work tasks, inspect jobs and history, and manage identity — all without writing curl commands.\n\nThe need is real. Flowable's 7.x OSS distribution ships the engine and REST API; the web UI sits in the enterprise tier. Public-sector teams, SMEs, and air-gapped self-hosters need an OSS browser front-end, and the 2026 OSS landscape has none actively maintained — most community alternatives are modeler-only POCs ([full landscape report](https://github.com/syalioune/flowatch-bmad/blob/main/_bmad-output/planning-artifacts/research/market-flowable-oss-gui-alternatives-research-2026-05-11.md) — maintainer-only private repo).\n\nFlowatch fills that gap. The benchmark is the legacy 6.x OSS UI: if a 6.x-OSS operator used to do it, Flowatch should do it.\n\n**Scope choices, on purpose:**\n- **Flowable-specific.** Multi-engine support is out — [Operaton](https://operaton.org/), [Flowset](https://flowset.io/), and [Miragon/bpmn-modeler](https://github.com/Miragon/bpmn-modeler) already serve cross-engine users. Flowatch's value is being Flowable-aware down to the REST quirks (DMN sub-app prefix, missing `/identity/tenants`, multipart deployments).\n- **OSS only.** No dependency on enterprise endpoints, no SaaS fallback, no telemetry.\n- **Live API only.** No embedded mocks, no offline pretence — operators get real engine state or an honest error.\n\n## Pull the image\n\nPre-built multi-arch images (`linux/amd64` + `linux/arm64`) are published from CI to two registries on every push to `main`, `develop`, and on `v*` tags:\n\n```bash\n# GitHub Container Registry (no auth needed for public pulls)\ndocker pull ghcr.io/syalioune/flowatch:latest\n\n# Docker Hub mirror\ndocker pull syalioune/flowatch:latest\n```\n\nEach push gets the matching `:latest` (main) / `:develop` (develop) tag plus a `:sha-\u003cshort\u003e` tag for traceability. Releases get `:\u003cX.Y.Z\u003e`, `:\u003cX.Y\u003e`, and `:\u003cX\u003e` tags as well. Every image carries SBOM (`spdx-json`) and SLSA provenance attestations — verify with:\n\n```bash\ndocker buildx imagetools inspect ghcr.io/syalioune/flowatch:latest --format '{{ json .SBOM }}'\n```\n\nRun it pointed at any reachable Flowable backend (configure the URL in the Settings modal after the SPA loads):\n\n```bash\ndocker run --rm -p 8081:8080 ghcr.io/syalioune/flowatch:latest\n# open http://localhost:8081 — set baseUrl in Settings to your Flowable instance\n```\n\nThe image carries only the static SPA bundle and a tiny nginx — no Node, no JRE. **Runs as non-root** (`uid 101`, `nginx`) and listens on the **unprivileged port 8080**, so it drops cleanly into Kubernetes restricted-baseline policies and can run with all Linux capabilities dropped. CPU/RAM at idle: \u003c5 MB / \u003c50 m-cpu.\n\n## Quick start\n\n```bash\nmake install     # npm ci\nmake stack       # postgres + flowable-rest 7.2.0 + nginx (:8080) + Vite (:5173)\n```\n\nWithout `make`:\n\n```bash\nnpm ci\nbash scripts/dev/run-dev.sh\n```\n\nOr in three explicit steps (`make` / no-`make`):\n\n```bash\nmake install         |   npm ci\nmake engine-up       |   docker compose up -d\nmake dev             |   npm run dev\n```\n\nDefault credentials (configurable in the Settings modal): `rest-admin` / `test`.\n\nHealth-check the engine: `make engine-health` (or `curl -u rest-admin:test http://localhost:8080/flowable-rest/service/management/engine`).\n\n**First boot pulls ~700 MB of Docker images** (postgres + flowable-rest 7.2.0 + nginx). Expect a green-light Dashboard within 2 minutes on broadband. Subsequent boots reuse the images and finish in well under a minute.\n\nThe sidebar footer shows a connection pill: **green** = engine reachable, **red** = unreachable. Click the pill to open the Settings modal and reconfigure the base URL or credentials.\n\n**Restart paths:**\n\n- **Warm restart** (keeps Flowable's Postgres state): `docker compose down \u0026\u0026 docker compose up -d` — back to green in under a minute.\n- **Cold restart** (wipes the DB volume): `docker compose down -v \u0026\u0026 docker compose up -d` — re-bootstraps the Flowable schema; ~2 min.\n\n**If the indicator stays red:**\n\n- `make engine-logs` to tail flowable + nginx + postgres.\n- `lsof -i :8080` (or `ss -ltnp '( sport = :8080 )'`) to check the port isn't held.\n- Docker daemon running? `docker ps` should return without error.\n- Credentials in the Settings modal match `rest-admin` / `test` (or whatever you've set).\n- The `/flowable-status` slash command in Claude Code prints the engine summary.\n- See [docs/deployment-guide.md](docs/deployment-guide.md) for deeper diagnostics.\n\n## Scripts\n\n`make help` lists every target. The common ones (with the underlying command they wrap):\n\n| `make` target         | Underlying command                       | What it does                                          |\n| --------------------- | ---------------------------------------- | ----------------------------------------------------- |\n| `make stack`          | `bash scripts/dev/run-dev.sh`            | Full local stack (Docker + Vite) in one shot          |\n| `make dev`            | `npm run dev`                            | Vite dev server with HMR (assumes engine is up)       |\n| `make build`          | `npm run build`                          | Production bundle to `dist/`                          |\n| `make preview`        | `npm run preview`                        | Serve the production bundle locally                   |\n| `make engine-up`      | `docker compose up -d`                   | Start the Docker stack (postgres + flowable + nginx)  |\n| `make engine-down`    | `docker compose down`                    | Stop \u0026 remove engine containers                       |\n| `make engine-logs`    | `docker compose logs -f`                 | Tail logs from all engine services                    |\n| `make engine-health`  | `curl -u rest-admin:test …/management/engine` | Hit the Flowable management endpoint            |\n| `make clean`          | `rm -rf node_modules dist`               | Remove `node_modules/` and `dist/`                    |\n\nNo test suite, linter, or formatter is configured yet.\n\n## Where to read next\n\n| If you want…                                | Open                                                |\n| ------------------------------------------- | --------------------------------------------------- |\n| A guided overview of what Flowatch is        | [docs/project-overview.md](docs/project-overview.md) |\n| Architecture, request flow, theming layers  | [docs/architecture.md](docs/architecture.md)         |\n| Local setup \u0026 build details                 | [docs/development-guide.md](docs/development-guide.md) |\n| Docker stack \u0026 nginx CORS proxy             | [docs/deployment-guide.md](docs/deployment-guide.md) |\n| Flowable REST wrappers exported by `api.js` | [docs/api-contracts.md](docs/api-contracts.md)       |\n\nThe full doc index lives at [docs/index.md](docs/index.md).\n\n## Status\n\n**Pre-alpha.** Flowatch runs against `flowable-rest:7.2.0` end-to-end today, and is being put on a defensible engineering footing — tests, lint, formatter, CI, and a TypeScript move — before adding net-new capabilities. Treat existing implementation choices as starting points to validate, not as permanent decisions. The [docs/](docs/) folder is the public source of truth; PRD / architecture / epics / story-specs live in a private companion repo (see [DEVELOPERS.md §2](DEVELOPERS.md#2-first-time-setup) for the two-repo split).\n\n## AI-assisted development\n\nFlowatch is built openly with AI as a first-class collaborator. Treat that as a feature, not a disclaimer: it's how a single maintainer can deliver Flowable-grade scope on a community budget. Every commit is human-reviewed and the maintainer (`Signed-off-by: Alioune SY`) carries the DCO; an `Co-Authored-By: Claude Opus 4.x` trailer is appended whenever an agent materially co-wrote the change.\n\n**Tools the project uses:**\n\n| Tool | Role | Where it shows up |\n|---|---|---|\n| [Claude Code](https://claude.com/claude-code) (Anthropic) | Interactive coding agent — implements stories, runs tests, opens PRs against the live engine. | [.claude/settings.json](.claude/settings.json), [.claude/commands/](.claude/commands/), [.claude/hooks/](.claude/hooks/) |\n| [BMAD Method](https://github.com/bmad-code-org/BMAD-METHOD) (community framework) | Agentic agile workflow — defined agents (PM, Architect, Analyst, Dev, UX, Tech-writer) and skills (brainstorm → PRD → architecture → epics → stories → dev → retro). | [.claude/skills/bmad-*](.claude/skills/) |\n\n**Workflow in one breath:** BMAD plans the work (private companion repo: PRD, architecture, epics) → BMAD shards epics into story specs (public: [docs/specifications/user-stories/](docs/specifications/user-stories/)) → Claude Code implements one story at a time → tests + human review → conventional-commit + sign-off → CI. The two custom slash commands in [.claude/commands/](.claude/commands/) (`/flowable-status`, `/deploy-process`) automate the routine engine-interaction checks.\n\n**For contributors:** every BMAD skill is committed and every Claude Code permission allowlist is reproducible from this repo. There is no maintainer-only sauce. See [DEVELOPERS.md](DEVELOPERS.md) for first-time setup and [BOOTSTRAP.md](BOOTSTRAP.md) for the one-time GitHub repo provisioning. Personal Claude Code overrides go in `.claude/settings.local.json` (gitignored) so the shared surface stays clean.\n\n**Attribution \u0026 responsibility.** Claude Code and BMAD are tools; the design choices, the QA, and the responsibility for what ships are the maintainer's. Bug reports and feedback go to the same [issue tracker](https://github.com/syalioune/flowatch/issues) regardless of which keystrokes were AI-assisted.\n\n## Release process\n\nReleases follow `develop → release/X.Y.Z → main` per [ADR-011](_bmad-output/planning-artifacts/architecture.md#adr-011--release-pipeline-conventional-commits--semantic-release). The operational runbook with exact commands is at [docs/release-runbook.md](docs/release-runbook.md).\n\n## License\n\nApache License 2.0 — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyalioune%2Fflowatch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsyalioune%2Fflowatch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyalioune%2Fflowatch/lists"}