Dynamic tenant workflows

테넌트별 동적 워크플로

Load tenant-supplied workflow code on demand and resume with the right tenant later.

···
html
<div class="scene"><div class="title">TENANT CODE ROUTING</div><div class="tenantTabs"><span id="tenantA">TENANT A</span><span id="tenantB">TENANT B</span></div><div class="flow"><div class="tile">LOADER</div><div class="flowArrow">→</div><div class="tile" id="tenantCode">A: REVIEW</div><div class="flowArrow">→</div><div class="tile" id="resume">SLEEP</div></div><div class="muted" id="tenantState">Resume routes back to tenant A</div></div>
css
.scene{width:min(94vw,760px);height:min(86vh,320px);padding:clamp(10px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);font:500 clamp(11px,1.3vw,16px)/1.25 "Pretendard Variable",Pretendard,-apple-system,sans-serif;display:flex;flex-direction:column;gap:clamp(7px,1.6vmin,12px);overflow:hidden}.scene *{box-sizing:border-box}.title{font-weight:750;color:var(--accent)}.muted{color:var(--muted)}.mono{font-family:ui-monospace,monospace}.row{display:flex;align-items:center;justify-content:center;gap:clamp(5px,1.4vmin,12px);flex:1;min-height:0}.tile{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(6px,1.6vmin,12px);text-align:center;min-width:0}.on{border-color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.pulse{animation:pulse 1.6s infinite alternate}@keyframes pulse{to{border-color:var(--accent);transform:translateY(-3px)}}.tenantTabs{display:flex;gap:6px}.tenantTabs span{border:1px solid var(--line);border-radius:6px;padding:5px 9px}.tenantTabs .selected{border-color:var(--accent);color:var(--accent)}.flow{display:flex;align-items:center;gap:4px;flex:1}.flow .tile{flex:1;padding:10px 2px}.flowArrow{color:var(--accent)}#tenantCode{border-color:var(--accent)}#resume{color:var(--accent)}
js
let phase=0;function tick(){const a=phase%2===0;document.getElementById('tenantA').classList.toggle('selected',a);document.getElementById('tenantB').classList.toggle('selected',!a);document.getElementById('tenantCode').textContent=a?'A: REVIEW':'B: APPROVE';document.getElementById('resume').textContent=phase%4<2?'SLEEP':'RESUME';document.getElementById('tenantState').textContent='Resume routes back to tenant '+(a?'A':'B');phase++}tick();setInterval(tick,1100);document.querySelector('.scene').addEventListener('pointerdown',tick)

Cloudflare Dynamic Workflows, introduced in 2026, let a loader select tenant code by ID and connect it to a durable workflow engine. Even if a step resumes hours later, dispatch returns to the appropriate tenant code without keeping idle code running.

The demo sends the same start request through different stages for tenants A and B. Platforms running dynamic code still need explicit isolation, versioning, and authorization.

When to use

Consider it for a multi-tenant platform that executes different automation code per customer.

Open as page ↗