Understand every execution. Discover what matters across them.
Open source · Workflow observability · TypeScript
Flowmark is workflow observability for processes your application already runs. Mark a named process in ordinary TypeScript. Each execution becomes evidence you can investigate — milestones, operations, progress, errors, and the result your code reported — and many executions become a picture of what that process is accomplishing.
Flowmark observes. It does not execute, schedule, or retry your work.
npm i @flowmarkdev/node// Next.js Route Handler / Server Action
import { createFlowmark } from "@flowmarkdev/node/next"
export const flowmark = createFlowmark()// Node worker or long-lived server
import { createFlowmark } from "@flowmarkdev/node"
export const flowmark = createFlowmark()FLOWMARK_API_KEY=<project write key>
FLOWMARK_API_URL=https://api.flowmark.devexport async function completeCheckout(orderId: string) {
const flow = flowmark.workflow("checkout.order", {
properties: { orderId },
})
try {
flow.step("payment-captured")
const shipment = await flow.operation("create-shipment", () =>
createShipment(orderId),
)
flow.done({ result: { shipmentId: shipment.id } })
return shipment
} catch (error) {
flow.fail({ code: "CHECKOUT_FAILED" })
throw error
}
}| Landing | flowmark.dev |
| Dashboard | app.flowmark.dev |
| Docs | docs.flowmark.dev |
| API | api.flowmark.dev |
| npm | @flowmarkdev/node |
Sign up on the dashboard to create a project and a write key. Password reset is not available yet.
- TypeScript SDK for Node.js, Next.js, and the browser
- Validated, project-scoped ingestion into PostgreSQL
- Dashboard: volume, success rate, duration, trends, slowest operations, failure codes, run timelines, and peer comparison
- Explicit links between related runs via ids you pass
Node.js 20.19+ (24 LTS recommended) and pnpm 10.
pnpm install
pnpm dev:setup
# Set DATABASE_URL in apps/server/.env.local to a loopback Postgres database.
pnpm db:setup
pnpm devpnpm dev starts the apps and watches the SDK. See
development for the full local pipeline. Open the
dashboard at http://127.0.0.1:3001.
apps/dev-harness and apps/internal-docs are loopback-only. Do not deploy
them.
| Path | Purpose |
|---|---|
packages/sdk |
@flowmarkdev/node |
packages/core |
Shared event contracts |
packages/api |
Use cases and ports |
packages/db |
Schema, migrations, persistence |
packages/ui |
Shared UI |
apps/server |
API |
apps/dashboard |
Signed-in UI |
apps/web |
Landing |
apps/docs |
Customer docs |
See CONTRIBUTING.md for local setup, branch workflow, and self-hosting expectations. Report security issues through SECURITY.md.
Create feature and infrastructure branches from staging and open PRs into
staging. CI checks each PR; merging deploys Staging through Vercel. A reviewed
release PR from staging into main deploys Production. Application GitHub
Releases are published separately after verification; SDK npm releases keep
their own workflow. See application releases for merge
policy, agent skills, and approval steps.
Each PR runs two CI jobs: format/lint/typecheck/unit checks and database-backed server tests against disposable Postgres 18. Both should be green before merge; CI never uses Neon credentials or demo seed data. See database integration tests for the local equivalent. Ordinary releases do not require a sync back into staging; bring main changes back only when needed, such as after a hotfix.
The database suite includes real registration and session-based sign-in, project/key creation, ingestion, persisted-run reads, and cross-project denials. It exercises server routes and API procedures; browser UI and hosted cookie behavior still need Staging verification.
Server auth, CORS, and dashboard API settings are validated at request time. See Runtime environment validation for required hosted settings, local defaults, and Preview/Staging behavior.
Database CI also checks that repeated auth and ingestion requests retain a bounded auth pool and release API connections; see connection lifecycle verification.
License: MIT.