Multi-app workflows

다중 앱 워크플로

One durable workflow dispatches activities to services with different app IDs.

···
html
<div class="scene"><div class="title">ONE HISTORY · THREE APP IDS</div><div class="timeline"><div class="stem"></div><div class="step" id="app1">APP 1<br>CPU</div><div class="step" id="app2">APP 2<br>GPU</div><div class="step" id="app3">APP 3<br>DEPLOY</div></div><div class="history">PARENT HISTORY <span id="history">1 / 3 complete</span></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)}}.timeline{display:flex;align-items:center;justify-content:space-around;gap:5px;position:relative;flex:1}.timeline .stem{position:absolute;left:9%;right:9%;height:3px;background:var(--line)}.step{position:relative;z-index:1;border:2px solid var(--line);background:var(--bg);border-radius:8px;padding:7px 3px;text-align:center;min-width:25%}.step.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,var(--surface))}.history{border:1px solid var(--line);border-radius:7px;padding:7px;display:flex;justify-content:space-between;gap:5px}.history span{color:var(--accent)}
js
let n=0;function tick(){['app1','app2','app3'].forEach((id,i)=>document.getElementById(id).classList.toggle('active',i<=n%3));document.getElementById('history').textContent=(n%3+1)+' / 3 complete';n++}tick();setInterval(tick,900);document.querySelector('.scene').addEventListener('pointerdown',tick)

In Dapr multi-app workflows, a parent names the target app ID for an activity or child workflow. Each app runs its own work and returns a result; the parent app stores the final history. Runtime support began in 1.16 and .NET SDK support in 1.17.

The demo dispatches CPU, GPU, and deployment stages. Participating apps need the same namespace and workflow state store, plus registered targets and suitable access policy.

When to use

Use it when stages owned by different apps or compute environments need one recoverable flow.

Open as page ↗