- Bump experimentalStartHookLoserAck capability cutoff to 5.0.0-beta.27 (beta.26 was published from main without this change) and rename it away from colliding with World.experimentalStartHookAdmission - Derive WorkflowStartError.queued from stage (collapses the options union and its serialized/reducer/reviver/web-hydration copies) - Share ExperimentalStartHookSchema/type from @workflow/world; align the queue-side token validation (min(1)) with the event schema - Classify 409 hook_conflict inside the shared errorForResponse so v3 and v4 request paths map it identically - Postgres: extract getOwnStartHookClaim/claimStartHookTokenInTx (the two run-creation paths had drifted), parallelize hook/claim snapshot reads, settle disposed-hook claims with guarded statements instead of SELECT-then-branch, drop the retention transaction (statements touch disjoint rows), and GC expired claim debris of terminal runs - Local: one claim lock per token (reclaim and materialize now mutually exclude), expiry pre-check before taking the reclaim lock, shared settleClaimForDisposedHook, parallel tokens-dir sweep that skips already-settled claims and GCs expired debris - start(): hoist repeated enqueue/create calls, contractError helper, drop the positional verifyRunId flag; stop logging raw hook tokens
@workflow/web-shared
Workflow Observability UI primitives. See Workflow SDK for more information.
Usage
This package contains:
- pre-styled, prop-driven UI components (no data fetching)
If you want a full observability experience with server actions already wired, take a look at
@workflow/web instead.
It comes with pre-styled UI components that accept data + callbacks:
import { WorkflowTraceViewer } from '@workflow/web-shared';
export default function MyRunDetailView({ run, events, fetchSpanDetail }) {
return (
<WorkflowTraceViewer
run={run}
events={events}
fetchSpanDetail={fetchSpanDetail}
/>
);
}
Server actions and data fetching are intentionally not part of web-shared. Implement those in your app
and pass data + callbacks into these components. If you need world run helpers, use @workflow/core/runtime.
Security notice: If you implement server-side data fetching using
@workflow/world-vercelor similar backends, ensure that user-supplied IDs (runId, stepId, etc.) are validated before passing them to world functions. The server actions in@workflow/webdo not include authentication — see that package's README for details on securing self-hosted deployments.
Styling
In order for tailwind classes to be picked up correctly, you might need to configure your NextJS app to use the correct CSS processor. E.g. if you're using PostCSS with TailwindCSS, you can do the following:
// postcss.config.mjs in your NextJS app
const config = {
plugins: ['@tailwindcss/postcss'],
};
export default config;