Files
wehub-resource-sync a9cd7750f4
CI / detect-changes (push) Waiting to run
CI / build (push) Waiting to run
UI v2 CI / E2E (Mocked) (push) Blocked by required conditions
UI v2 Integration CI / E2E (Integration) (push) Waiting to run
CI / unit-test (push) Blocked by required conditions
CI / test-harness (push) Waiting to run
CI / generate-e2e-matrix (push) Waiting to run
CI / e2e (push) Blocked by required conditions
CI / build-ui (push) Waiting to run
Publish docs via GitHub Pages / Deploy docs (push) Waiting to run
Release Drafter / update_release_draft (push) Waiting to run
UI v2 CI / Lint, Format & Test (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 12:37:56 +08:00

1930 lines
73 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>Conductor OSS | Open Source Workflow Orchestration</title>
<meta name="description" content="Open-source workflow orchestration and durable execution for long-running workflows, microservices, and AI agents. Self-hosted, JSON-native, and polyglot."/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta property="og:title" content="Conductor OSS | Open Source Workflow Orchestration"/>
<meta property="og:description" content="Open-source workflow orchestration and durable execution for long-running workflows, microservices, and AI agents."/>
<meta property="og:type" content="website"/>
<link rel="shortcut icon" href="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/6572bd8d27ee5db3eb91f55e_favicon-dashflow-webflow-template.svg" type="image/x-icon"/>
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com"/>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,300;14..32,400;14..32,500;14..32,600;14..32,700&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet"/>
<!-- Theme: set before render to avoid flash -->
<script>
(function(){
var s = localStorage.getItem('theme');
var p = s || (window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark');
document.documentElement.dataset.theme = p;
})();
</script>
<style>
/* ═══════════════════════════════════════════
RESET & TOKENS
═══════════════════════════════════════════ */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #09090b;
--bg-surface: #18181b;
--bg-card: #18181b;
--bg-card-h: #27272a;
--accent: #f97316;
--accent-dim: rgba(249,115,22,.10);
--accent-glow: rgba(249,115,22,.22);
--accent-hi: #fb923c;
--blue: #3b82f6;
--blue-dim: rgba(59,130,246,.10);
--t1: #fafafa;
--t2: #a1a1aa;
--t3: #71717a;
--border: rgba(255,255,255,.08);
--border-h: rgba(249,115,22,.35);
--r: 12px;
--r-lg: 16px;
--ease: cubic-bezier(.4,0,.2,1);
--dur: .22s;
}
/* ═══════════════════════════════════════════
LIGHT MODE TOKENS
═══════════════════════════════════════════ */
[data-theme="light"] {
--bg: #ffffff;
--bg-surface: #f4f4f5;
--bg-card: #ffffff;
--bg-card-h: #f4f4f5;
--accent: #f97316;
--accent-dim: rgba(249,115,22,.08);
--accent-glow: rgba(249,115,22,.16);
--accent-hi: #ea580c;
--blue: #2563eb;
--blue-dim: rgba(37,99,235,.08);
--t1: #09090b;
--t2: #52525b;
--t3: #71717a;
--border: #d4d4d8;
--border-h: rgba(249,115,22,.35);
}
/* Smooth theme transitions */
.transitioning *, .transitioning *::before, .transitioning *::after {
transition: background-color .32s ease, color .32s ease,
border-color .32s ease, box-shadow .32s ease !important;
}
/* ═══════════════════════════════════════════
LIGHT MODE COMPONENT OVERRIDES
═══════════════════════════════════════════ */
/* Logo needs to be dark on light nav */
[data-theme="light"] .nav-logo img,
[data-theme="light"] .footer-logo { filter: brightness(0); }
/* Nav & drawer */
[data-theme="light"] .nav {
background: rgba(255,255,255,.88);
border-bottom-color: rgba(0,0,0,.09);
}
[data-theme="light"] .nav-drawer {
background: rgba(255,255,255,.98);
border-bottom-color: rgba(0,0,0,.09);
}
[data-theme="light"] .burger span { background: var(--t2); }
/* Ghost button */
[data-theme="light"] .btn-ghost {
background: rgba(0,0,0,.04);
border-color: rgba(0,0,0,.14);
}
[data-theme="light"] .btn-ghost:hover {
background: rgba(0,0,0,.08);
border-color: rgba(0,0,0,.20);
}
/* Hero dot grid */
[data-theme="light"] .hero::before {
background-image: radial-gradient(circle, rgba(249,115,22,.11) 1px, transparent 1px);
}
/* Hero orbs */
[data-theme="light"] .orb-1 {
background: radial-gradient(circle, rgba(249,115,22,.07) 0%, transparent 70%);
}
[data-theme="light"] .orb-2 {
background: radial-gradient(circle, rgba(37,99,235,.05) 0%, transparent 70%);
}
[data-theme="light"] .orb-3 {
background: radial-gradient(circle, rgba(249,115,22,.04) 0%, transparent 70%);
}
/* Dark section → light gray in light mode */
[data-theme="light"] .sec-dark {
background: linear-gradient(135deg, #e4e4e7 0%, #f4f4f5 50%, #e4e4e7 100%);
}
/* Softer card shadows in light mode */
[data-theme="light"] .sdk-card:hover {
box-shadow: 0 0 20px var(--accent-dim), 0 4px 16px rgba(0,0,0,.08);
}
[data-theme="light"] .gs-card:hover {
box-shadow: 0 0 24px var(--accent-dim), 0 8px 24px rgba(0,0,0,.08);
}
[data-theme="light"] .feat-card:hover {
box-shadow: 0 0 32px var(--accent-dim);
}
[data-theme="light"] .res-card:hover {
box-shadow: 0 0 22px var(--accent-dim), 0 4px 16px rgba(0,0,0,.06);
}
[data-theme="light"] .comm-card:hover {
box-shadow: 0 0 24px var(--accent-dim), 0 8px 24px rgba(0,0,0,.08);
}
/* Modal */
[data-theme="light"] .modal-bg { background: rgba(13,27,42,.7); }
[data-theme="light"] .modal { background: #ffffff; }
[data-theme="light"] .modal-x { background: rgba(0,0,0,.05); border-color: rgba(0,0,0,.12); }
[data-theme="light"] .modal-x img { filter: brightness(0); opacity: .55; }
/* Theme toggle icon switching */
.icon-moon { display: none; }
.icon-sun { display: block; }
[data-theme="light"] .icon-sun { display: none; }
[data-theme="light"] .icon-moon { display: block; }
/* Toggle button */
.theme-toggle {
width: 34px; height: 34px;
border-radius: 8px;
background: rgba(255,255,255,.05);
border: 1px solid var(--border);
cursor: pointer;
display: flex; align-items: center; justify-content: center;
color: var(--t2);
transition: all var(--dur) var(--ease);
flex-shrink: 0;
}
.theme-toggle:hover {
background: var(--accent-dim);
border-color: var(--border-h);
color: var(--accent);
}
.theme-toggle svg { width: 16px; height: 16px; stroke: currentColor; fill: none; }
html { scroll-behavior: smooth; }
body {
font-family: 'Inter', sans-serif;
background: var(--bg);
color: var(--t1);
line-height: 1.6;
overflow-x: hidden;
}
img { display: block; max-width: 100%; }
a { text-decoration: none; color: inherit; }
h1, h2, h3, h4 {
font-family: 'Inter', sans-serif;
line-height: 1.1;
}
/* ═══════════════════════════════════════════
SCROLLBAR
═══════════════════════════════════════════ */
::-webkit-scrollbar { width: 7px; }
::-webkit-scrollbar-track { background: var(--bg); }
::-webkit-scrollbar-thumb { background: var(--border-h); border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: var(--accent); }
/* ═══════════════════════════════════════════
LAYOUT HELPERS
═══════════════════════════════════════════ */
.wrap { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
.sec { padding: 96px 0; position: relative; }
.sec-alt{ background: var(--bg-surface); }
.sec-dark {
background: linear-gradient(135deg, #050506 0%, #18181b 55%, #050506 100%);
}
.divider {
height: 1px;
background: linear-gradient(90deg, transparent, var(--border-h), transparent);
}
/* ═══════════════════════════════════════════
SECTION HEADER
═══════════════════════════════════════════ */
.sec-header { text-align: center; margin-bottom: 56px; }
.sec-label {
font-family: 'IBM Plex Mono', monospace;
font-size: 11px;
font-weight: 500;
color: var(--accent);
text-transform: uppercase;
letter-spacing: .18em;
margin-bottom: 10px;
}
.sec-title {
font-size: clamp(28px, 3.5vw, 44px);
font-weight: 700;
letter-spacing: -.02em;
}
.sec-sub {
font-size: 16px;
color: var(--t2);
margin-top: 12px;
max-width: 500px;
margin-left: auto;
margin-right: auto;
line-height: 1.7;
}
/* ═══════════════════════════════════════════
SCROLL REVEAL
═══════════════════════════════════════════ */
.reveal {
opacity: 0;
transform: translateY(22px);
transition: opacity .55s var(--ease), transform .55s var(--ease);
}
.reveal.vis { opacity: 1; transform: translateY(0); }
/* ═══════════════════════════════════════════
NAV
═══════════════════════════════════════════ */
.nav {
position: fixed;
inset: 0 0 auto;
z-index: 200;
height: 64px;
background: rgba(9,9,11,.88);
backdrop-filter: blur(14px);
-webkit-backdrop-filter: blur(14px);
border-bottom: 1px solid var(--border);
transition: border-color var(--dur) var(--ease);
}
.nav-inner {
display: flex;
align-items: center;
justify-content: space-between;
height: 100%;
max-width: 1200px;
margin: 0 auto;
padding: 0 24px;
gap: 16px;
}
.nav-logo img { height: 30px; width: auto; }
.nav-links {
display: flex;
align-items: center;
gap: 2px;
}
.nav-link {
padding: 7px 14px;
border-radius: 8px;
font-size: 14px;
font-weight: 500;
color: var(--t2);
transition: color var(--dur) var(--ease), background var(--dur) var(--ease);
}
.nav-link:hover { color: var(--t1); background: rgba(255,255,255,.05); }
.nav-right {
display: flex;
align-items: center;
gap: 10px;
}
.nav-slack {
display: flex;
align-items: center;
gap: 6px;
padding: 7px 12px;
border-radius: 8px;
font-size: 13px;
font-weight: 500;
color: var(--t2);
border: 1px solid transparent;
transition: all var(--dur) var(--ease);
}
.nav-slack:hover {
color: var(--accent);
border-color: var(--border-h);
background: var(--accent-dim);
}
.nav-slack img { width: 17px; height: 17px; }
.github-wrap { display: flex; align-items: center; }
.btn-nav {
display: inline-flex;
align-items: center;
gap: 7px;
padding: 8px 16px;
border: 1px solid var(--border-h);
border-radius: 8px;
background: var(--accent-dim);
color: var(--accent);
font-size: 13px;
font-weight: 600;
cursor: pointer;
transition: all var(--dur) var(--ease);
font-family: inherit;
}
.btn-nav:hover { background: rgba(249,115,22,.18); box-shadow: 0 0 18px var(--accent-glow); }
.btn-nav img {
width: 16px;
height: 16px;
filter: brightness(0) saturate(100%) invert(56%) sepia(89%) saturate(2324%) hue-rotate(352deg) brightness(98%) contrast(96%);
opacity: .95;
}
/* burger */
.burger {
display: none;
flex-direction: column;
gap: 5px;
padding: 8px;
cursor: pointer;
background: none;
border: none;
}
.burger span {
display: block;
width: 22px;
height: 2px;
background: var(--t2);
border-radius: 2px;
transition: all var(--dur) var(--ease);
}
/* mobile drawer */
.nav-drawer {
display: none;
position: fixed;
top: 64px;
left: 0; right: 0;
background: rgba(9,9,11,.98);
border-bottom: 1px solid var(--border);
padding: 16px 24px 24px;
flex-direction: column;
gap: 4px;
z-index: 199;
}
.nav-drawer.open { display: flex; }
.nav-drawer .nav-link { width: 100%; font-size: 15px; padding: 10px 14px; }
/* ═══════════════════════════════════════════
MODAL
═══════════════════════════════════════════ */
.modal-bg {
position: fixed;
inset: 0;
background: rgba(9,9,11,.92);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
z-index: 500;
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
pointer-events: none;
transition: opacity .2s var(--ease);
}
.modal-bg.open { opacity: 1; pointer-events: all; }
.modal {
background: var(--bg-surface);
border: 1px solid var(--border-h);
border-radius: var(--r-lg);
padding: 40px;
width: 90%;
max-width: 520px;
position: relative;
transform: translateY(16px) scale(.98);
transition: transform .25s var(--ease);
}
.modal-bg.open .modal { transform: translateY(0) scale(1); }
.modal-x {
position: absolute;
top: 14px; right: 14px;
width: 32px; height: 32px;
display: flex; align-items: center; justify-content: center;
background: rgba(255,255,255,.04);
border: 1px solid var(--border);
border-radius: 8px;
cursor: pointer;
transition: all var(--dur) var(--ease);
}
.modal-x:hover { border-color: var(--border-h); background: rgba(255,255,255,.09); }
.modal-x img { width: 14px; height: 14px; filter: invert(1); opacity: .7; }
.modal-title {
font-size: 28px;
font-weight: 700;
margin-bottom: 24px;
}
.modal-copy {
font-size: 15px;
color: var(--t2);
line-height: 1.75;
margin-bottom: 22px;
}
.modal-links {
display: grid;
gap: 12px;
}
.modal-link {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 14px 16px;
border: 1px solid var(--border);
border-radius: 12px;
background: var(--bg-card);
transition: all var(--dur) var(--ease);
}
.modal-link:hover {
border-color: var(--border-h);
background: var(--bg-card-h);
box-shadow: 0 0 18px var(--accent-dim);
}
.modal-link strong {
display: block;
font-size: 14px;
font-weight: 600;
margin-bottom: 2px;
}
.modal-link span {
display: block;
font-size: 12.5px;
color: var(--t2);
line-height: 1.55;
}
.modal-link .modal-arr {
color: var(--accent);
font-size: 14px;
font-weight: 700;
flex-shrink: 0;
}
.modal-note {
margin-top: 18px;
font-size: 12.5px;
color: var(--t3);
line-height: 1.65;
}
/* ═══════════════════════════════════════════
HERO
═══════════════════════════════════════════ */
.hero {
min-height: auto;
display: flex;
align-items: center;
position: relative;
overflow: hidden;
padding-top: 64px;
}
/* dot grid */
.hero::before {
content: '';
position: absolute;
inset: 0;
background-image: radial-gradient(circle, rgba(249,115,22,.13) 1px, transparent 1px);
background-size: 38px 38px;
mask-image: radial-gradient(ellipse 80% 70% at 50% 50%, black 20%, transparent 80%);
-webkit-mask-image: radial-gradient(ellipse 80% 70% at 50% 50%, black 20%, transparent 80%);
pointer-events: none;
}
/* gradient orbs */
.orb {
position: absolute;
border-radius: 50%;
filter: blur(90px);
pointer-events: none;
}
.orb-1 {
width: 560px; height: 560px;
background: radial-gradient(circle, rgba(249,115,22,.09) 0%, transparent 70%);
top: -120px; left: -80px;
animation: float1 18s ease-in-out infinite;
}
.orb-2 {
width: 440px; height: 440px;
background: radial-gradient(circle, rgba(59,130,246,.07) 0%, transparent 70%);
bottom: -60px; right: 5%;
animation: float2 22s ease-in-out infinite;
}
.orb-3 {
width: 320px; height: 320px;
background: radial-gradient(circle, rgba(249,115,22,.05) 0%, transparent 70%);
top: 35%; left: 38%;
animation: float3 15s ease-in-out infinite;
}
@keyframes float1 {
0%,100%{ transform: translate(0,0); }
33% { transform: translate(40px,28px); }
66% { transform: translate(-18px,46px); }
}
@keyframes float2 {
0%,100%{ transform: translate(0,0); }
50% { transform: translate(-28px,-38px); }
}
@keyframes float3 {
0%,100%{ transform: translate(0,0); }
25% { transform: translate(18px,-18px); }
75% { transform: translate(-18px,18px); }
}
/* canvas */
#hero-canvas {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
opacity: .55;
pointer-events: none;
}
.hero-content {
position: relative;
z-index: 1;
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
padding: 80px 24px 56px;
max-width: 1200px;
margin: 0 auto;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 6px 16px;
background: var(--accent-dim);
border: 1px solid var(--border-h);
border-radius: 100px;
font-family: 'IBM Plex Mono', monospace;
font-size: 11.5px;
font-weight: 500;
color: var(--accent);
margin-bottom: 28px;
animation: fadeup .65s ease both;
}
.hero-badge::before {
content: '';
width: 6px; height: 6px;
background: var(--accent);
border-radius: 50%;
animation: blink 2.2s ease infinite;
}
@keyframes blink {
0%,100% { opacity: 1; transform: scale(1); }
50% { opacity: .45; transform: scale(.75); }
}
.hero-h1 {
font-size: clamp(36px, 5.2vw, 76px);
font-weight: 800;
letter-spacing: -.03em;
max-width: 820px;
margin-bottom: 22px;
animation: fadeup .65s .1s ease both;
}
.hero-h1 .hi { color: var(--accent); }
.hero-p {
font-size: 17px;
font-weight: 400;
color: var(--t2);
max-width: 520px;
line-height: 1.75;
margin-bottom: 40px;
animation: fadeup .65s .2s ease both;
}
.hero-ctas {
display: flex;
gap: 12px;
flex-wrap: wrap;
justify-content: center;
animation: fadeup .65s .3s ease both;
}
.btn-primary {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 14px 28px;
background: var(--accent);
color: #03101c;
border: 1px solid var(--accent);
border-radius: 10px;
font-family: 'Inter', sans-serif;
font-weight: 700;
font-size: 14px;
transition: all var(--dur) var(--ease);
}
.btn-primary:hover {
background: var(--teal-bright);
border-color: var(--teal-bright);
box-shadow: 0 0 28px var(--accent-glow);
transform: translateY(-2px);
}
.btn-primary img { width: 17px; height: 17px; filter: brightness(0); }
.btn-primary-logo {
width: 18px;
height: 18px;
flex-shrink: 0;
}
.btn-ghost {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 14px 28px;
background: rgba(255,255,255,.04);
border: 1px solid rgba(255,255,255,.11);
color: var(--t1);
border-radius: 10px;
font-family: 'Inter', sans-serif;
font-weight: 600;
font-size: 14px;
transition: all var(--dur) var(--ease);
}
.btn-ghost:hover {
background: rgba(255,255,255,.09);
border-color: rgba(255,255,255,.2);
transform: translateY(-2px);
}
.btn-ghost svg { flex-shrink: 0; }
/* trust strip */
.hero-trust {
display: flex;
align-items: center;
gap: 28px;
margin-top: 68px;
padding-top: 36px;
border-top: 1px solid var(--border);
animation: fadeup .65s .4s ease both;
flex-wrap: wrap;
justify-content: center;
}
.trust-label {
font-size: 11px;
font-weight: 600;
color: var(--t3);
text-transform: uppercase;
letter-spacing: .14em;
}
.trust-names {
display: flex;
align-items: center;
gap: 28px;
flex-wrap: wrap;
justify-content: center;
}
.trust-name {
font-family: 'Inter', sans-serif;
font-size: 13px;
font-weight: 600;
color: var(--t3);
letter-spacing: .04em;
transition: color var(--dur) var(--ease);
}
.trust-name:hover { color: var(--t2); }
@keyframes fadeup {
from { opacity: 0; transform: translateY(22px); }
to { opacity: 1; transform: translateY(0); }
}
/* ═══════════════════════════════════════════
SDK GRID
═══════════════════════════════════════════ */
.sdk-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 14px;
}
.sdk-card {
display: flex;
align-items: center;
gap: 14px;
padding: 18px 20px;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--r);
transition: all var(--dur) var(--ease);
}
.sdk-card:hover {
border-color: var(--border-h);
background: var(--bg-card-h);
box-shadow: 0 0 24px var(--accent-dim), 0 4px 20px rgba(0,0,0,.3);
transform: translateY(-2px);
}
.sdk-icon {
width: 38px; height: 38px;
flex-shrink: 0;
display: flex; align-items: center; justify-content: center;
}
.sdk-icon img { width: 34px; height: 34px; object-fit: contain; }
.sdk-name {
font-family: 'Inter', sans-serif;
font-size: 15px;
font-weight: 600;
}
.sdk-sub {
font-size: 12px;
color: var(--accent);
opacity: .75;
font-weight: 500;
margin-top: 2px;
transition: opacity var(--dur);
}
.sdk-card:hover .sdk-sub { opacity: 1; }
.sdk-arr {
margin-left: auto;
width: 26px; height: 26px;
border-radius: 7px;
background: var(--accent-dim);
color: var(--accent);
display: flex; align-items: center; justify-content: center;
font-size: 13px;
transition: all var(--dur) var(--ease);
flex-shrink: 0;
}
.sdk-card:hover .sdk-arr {
background: var(--accent-glow);
transform: translateX(3px);
}
/* ═══════════════════════════════════════════
GETTING STARTED
═══════════════════════════════════════════ */
.gs-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 18px;
}
.gs-card {
display: flex;
flex-direction: column;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--r-lg);
overflow: hidden;
transition: all var(--dur) var(--ease);
}
.gs-card:hover {
border-color: var(--border-h);
box-shadow: 0 0 32px var(--accent-dim), 0 8px 28px rgba(0,0,0,.4);
transform: translateY(-4px);
}
.gs-img {
width: 100%;
aspect-ratio: 16/9;
object-fit: cover;
display: block;
}
.gs-body {
padding: 18px 20px 20px;
flex: 1;
display: flex;
align-items: flex-end;
}
.gs-title {
font-family: 'Inter', sans-serif;
font-size: 14px;
font-weight: 600;
line-height: 1.4;
}
.gs-vid { position: relative; }
.gs-play {
position: absolute;
inset: 0;
display: flex; align-items: center; justify-content: center;
background: rgba(9,9,11,.38);
transition: background var(--dur);
}
.gs-vid:hover .gs-play { background: rgba(9,9,11,.18); }
.gs-play img {
width: 46px; height: 46px;
filter: drop-shadow(0 0 16px var(--accent-glow));
transition: transform var(--dur);
}
.gs-vid:hover .gs-play img { transform: scale(1.1); }
/* ═══════════════════════════════════════════
FEATURES
═══════════════════════════════════════════ */
.feat-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20px;
}
.feat-card {
display: flex;
overflow: hidden;
background: rgba(255,255,255,.018);
border: 1px solid var(--border);
border-radius: var(--r-lg);
transition: all var(--dur) var(--ease);
}
.feat-card:hover {
border-color: var(--border-h);
background: rgba(249,115,22,.025);
box-shadow: 0 0 40px rgba(249,115,22,.08);
}
.feat-thumb {
width: 175px;
flex-shrink: 0;
overflow: hidden;
}
.feat-thumb img {
width: 100%; height: 100%;
object-fit: cover;
transition: transform .5s ease;
}
.feat-card:hover .feat-thumb img { transform: scale(1.06); }
.feat-body {
padding: 24px 24px 24px 20px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.feat-num {
font-family: 'IBM Plex Mono', monospace;
font-size: 10.5px;
font-weight: 500;
color: var(--accent);
text-transform: uppercase;
letter-spacing: .14em;
margin-bottom: 6px;
}
.feat-title {
font-size: 21px;
font-weight: 700;
margin-bottom: 9px;
}
.feat-desc {
font-size: 13.5px;
color: var(--t2);
line-height: 1.7;
margin-bottom: 20px;
}
.feat-link {
display: inline-flex;
align-items: center;
gap: 7px;
font-size: 13px;
font-weight: 600;
color: var(--accent);
transition: gap var(--dur);
}
.feat-link:hover { gap: 11px; }
.feat-link .circ {
width: 20px; height: 20px;
border: 1.5px solid currentColor;
border-radius: 50%;
display: flex; align-items: center; justify-content: center;
font-size: 10px;
}
/* ═══════════════════════════════════════════
RESOURCES
═══════════════════════════════════════════ */
.res-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 18px;
}
.res-card {
display: flex;
flex-direction: column;
gap: 18px;
padding: 26px;
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--r-lg);
transition: all var(--dur) var(--ease);
}
.res-card:hover {
border-color: var(--border-h);
background: var(--bg-card-h);
box-shadow: 0 0 28px var(--accent-dim);
transform: translateY(-3px);
}
.res-icon {
width: 42px; height: 42px;
padding: 9px;
background: var(--accent-dim);
border: 1px solid var(--border-h);
border-radius: 10px;
}
.res-icon img { width: 100%; height: 100%; object-fit: contain; }
.res-title {
font-family: 'Inter', sans-serif;
font-size: 17px;
font-weight: 600;
margin-bottom: 6px;
}
.res-desc { font-size: 13.5px; color: var(--t2); line-height: 1.65; }
.res-link {
font-size: 13px;
font-weight: 600;
color: var(--accent);
display: flex;
align-items: center;
gap: 6px;
margin-top: auto;
transition: gap var(--dur);
}
.res-card:hover .res-link { gap: 10px; }
/* ═══════════════════════════════════════════
COMMUNITY
═══════════════════════════════════════════ */
.comm-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 22px;
}
.comm-card {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--r-lg);
overflow: hidden;
transition: all var(--dur) var(--ease);
}
.comm-card:hover {
border-color: var(--border-h);
box-shadow: 0 0 32px var(--accent-dim), 0 8px 28px rgba(0,0,0,.4);
transform: translateY(-4px);
}
.comm-img-wrap { overflow: hidden; }
.comm-img {
width: 100%;
aspect-ratio: 16/9;
object-fit: cover;
display: block;
transition: transform .5s ease;
}
.comm-card:hover .comm-img { transform: scale(1.04); }
.comm-body { padding: 22px; }
.comm-title {
font-family: 'Inter', sans-serif;
font-size: 17px;
font-weight: 600;
margin-bottom: 7px;
}
.comm-desc {
font-size: 13.5px;
color: var(--t2);
line-height: 1.65;
margin-bottom: 18px;
}
.comm-cta {
display: inline-flex;
align-items: center;
gap: 7px;
padding: 9px 16px;
border-radius: 8px;
font-size: 13px;
font-weight: 600;
background: var(--accent-dim);
border: 1px solid var(--border-h);
color: var(--accent);
transition: all var(--dur) var(--ease);
}
.comm-cta:hover { background: rgba(249,115,22,.18); box-shadow: 0 0 18px var(--accent-glow); }
.comm-cta img { width: 17px; height: 17px; }
.comm-cta-blue {
background: var(--blue-dim);
border-color: rgba(59,130,246,.28);
color: var(--blue);
}
.comm-cta-blue:hover { background: rgba(59,130,246,.18); box-shadow: 0 0 18px rgba(59,130,246,.25); }
/* ═══════════════════════════════════════════
FOOTER
═══════════════════════════════════════════ */
.footer {
background: var(--bg-surface);
border-top: 1px solid var(--border);
padding: 56px 0 0;
}
.footer-main {
display: flex;
justify-content: space-between;
gap: 40px;
padding-bottom: 44px;
flex-wrap: wrap;
}
.footer-brand { min-width: 240px; }
.footer-logo { height: 26px; margin-bottom: 14px; }
.footer-tagline { font-size: 13.5px; color: var(--t2); margin-bottom: 8px; }
.footer-copy {
font-family: 'IBM Plex Mono', monospace;
font-size: 11.5px;
color: var(--t3);
}
.footer-cols { display: flex; gap: 56px; flex-wrap: wrap; }
.footer-col-head {
font-family: 'Inter', sans-serif;
font-size: 12px;
font-weight: 600;
color: var(--t1);
text-transform: uppercase;
letter-spacing: .09em;
margin-bottom: 14px;
}
.footer-col a {
display: block;
font-size: 13.5px;
color: var(--t2);
margin-bottom: 9px;
transition: color var(--dur);
}
.footer-col a:hover { color: var(--accent); }
.footer-end {
border-top: 1px solid var(--border);
padding: 18px 0;
text-align: center;
font-size: 12.5px;
color: var(--t3);
}
.footer-end a { color: var(--accent); transition: opacity var(--dur); }
.footer-end a:hover { opacity: .75; }
/* ═══════════════════════════════════════════
RESPONSIVE
═══════════════════════════════════════════ */
@media (max-width: 1024px) {
.gs-grid { grid-template-columns: repeat(2, 1fr); }
.res-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 900px) {
.comm-grid { grid-template-columns: 1fr; }
.feat-grid { grid-template-columns: 1fr; }
}
@media (max-width: 768px) {
.nav-links { display: none; }
.nav-slack { display: none; }
.github-wrap{ display: none; }
.burger { display: flex; }
.sdk-grid { grid-template-columns: repeat(2, 1fr); }
.footer-main{ flex-direction: column; }
.feat-thumb { width: 130px; }
}
@media (max-width: 560px) {
.sdk-grid { grid-template-columns: 1fr; }
.gs-grid { grid-template-columns: 1fr; }
.res-grid { grid-template-columns: 1fr; }
.feat-card { flex-direction: column; }
.feat-thumb { width: 100%; height: 170px; }
.feat-body { padding: 22px; }
.footer-cols { gap: 32px; }
}
</style>
</head>
<body>
<!-- ═══════════════════════ MODAL ═══════════════════════ -->
<div class="modal-bg" id="modal-bg">
<div class="modal">
<button class="modal-x" id="modal-x">
<img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/67b70dee88df7d842abeaa76_cross_x_Icon_Mid.svg" alt="Close"/>
</button>
<h2 class="modal-title">Get Involved</h2>
<p class="modal-copy">
Conductor is maintained in the open. Use the links below to contribute code, ask questions,
report issues, or review project policies.
</p>
<div class="modal-links">
<a href="https://github.com/conductor-oss/conductor/blob/main/CONTRIBUTING.md" target="_blank" class="modal-link">
<div>
<strong>Contributing Guide</strong>
<span>Development workflow, pull requests, and contribution guidelines.</span>
</div>
<span class="modal-arr"></span>
</a>
<a href="https://github.com/conductor-oss/conductor/discussions" target="_blank" class="modal-link">
<div>
<strong>GitHub Discussions</strong>
<span>Ask questions, propose ideas, and share patterns with the community.</span>
</div>
<span class="modal-arr"></span>
</a>
<a href="https://github.com/conductor-oss/conductor/security/policy" target="_blank" class="modal-link">
<div>
<strong>Security Policy</strong>
<span>Review the vulnerability reporting policy and security contact path.</span>
</div>
<span class="modal-arr"></span>
</a>
<a href="https://join.slack.com/t/orkes-conductor/shared_invite/zt-3dpcskdyd-W895bJDm8psAV7viYG3jFA" target="_blank" class="modal-link">
<div>
<strong>Slack Community</strong>
<span>Join the public community chat for support and project discussion.</span>
</div>
<span class="modal-arr"></span>
</a>
</div>
<p class="modal-note">Project resources stay public and versioned in the repository and docs site.</p>
</div>
</div>
<!-- ═══════════════════════ NAV ═══════════════════════ -->
<nav class="nav" id="nav">
<div class="nav-inner">
<a href="https://conductor-oss.org/" class="nav-logo">
<img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/657349f6b74e4f7dab1b979b_Conductor-Logo_RW.png" alt="Conductor"/>
</a>
<div class="nav-links">
<a href="https://docs.conductor-oss.org/index.html" target="_blank" class="nav-link">Docs</a>
<a href="https://docs.conductor-oss.org/quickstart/index.html" target="_blank" class="nav-link">Quickstart</a>
<a href="https://github.com/conductor-oss/conductor" target="_blank" class="nav-link">GitHub</a>
</div>
<div class="nav-right">
<a href="https://join.slack.com/t/orkes-conductor/shared_invite/zt-3dpcskdyd-W895bJDm8psAV7viYG3jFA"
target="_blank" class="nav-slack">
<img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/65734bf299254b8afd025072_Slack%20Icon.svg" alt="Slack"/>
Community
</a>
<div class="github-wrap">
<a class="github-button"
href="https://github.com/conductor-oss/conductor"
data-color-scheme="no-preference: dark; light: dark; dark: dark;"
data-icon="octicon-star"
data-size="large"
data-show-count="true"
aria-label="Star conductor-oss/conductor on GitHub">Star</a>
</div>
<button class="theme-toggle" id="theme-toggle" aria-label="Toggle theme">
<!-- Sun: shown in dark mode, click to go light -->
<svg class="icon-sun" viewBox="0 0 24 24" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/>
<line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>
</svg>
<!-- Moon: shown in light mode, click to go dark -->
<svg class="icon-moon" viewBox="0 0 24 24" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>
</svg>
</button>
<button class="btn-nav" id="open-modal">
<img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f7693f1a21217bf682afb_Get%20Involved.svg" alt=""/>
Contribute
</button>
<button class="burger" id="burger" aria-label="Menu">
<span></span><span></span><span></span>
</button>
</div>
</div>
</nav>
<!-- Mobile drawer -->
<div class="nav-drawer" id="nav-drawer">
<a href="https://docs.conductor-oss.org/index.html" target="_blank" class="nav-link">Docs</a>
<a href="https://docs.conductor-oss.org/quickstart/index.html" target="_blank" class="nav-link">Quickstart</a>
<a href="https://github.com/conductor-oss/conductor" target="_blank" class="nav-link">GitHub</a>
<a href="https://join.slack.com/t/orkes-conductor/shared_invite/zt-3dpcskdyd-W895bJDm8psAV7viYG3jFA"
target="_blank" class="nav-link">Community</a>
</div>
<!-- ═══════════════════════ HERO ═══════════════════════ -->
<section class="hero">
<div class="orb orb-1"></div>
<div class="orb orb-2"></div>
<div class="orb orb-3"></div>
<canvas id="hero-canvas"></canvas>
<div class="hero-content">
<div class="hero-badge">Apache 2.0 Licensed · Originally created at Netflix</div>
<h1 class="hero-h1">
Code breaks. Infrastructure fails.<br>
<span class="hi">Your workflows don't.</span>
</h1>
<p class="hero-p">
Ship workflow changes without redeploying workers. Write your code in any language — the engine guarantees durability, not your coding discipline.
</p>
<div class="hero-ctas">
<a href="https://docs.conductor-oss.org/quickstart/index.html" target="_blank" class="btn-primary">
<svg class="btn-primary-logo" viewBox="0 0 419.77176 434.76002" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path fill="currentColor" d="m 384.31177,242.99 -59.55,103.19 a 13.52,13.52 0 0 1 -11.67,6.73 h -19.95 l 63.46,-109.92 h -35.47 l -63.45,109.88 h -85.46 a 13.49,13.49 0 0 1 -11.62,-6.69 l -70.490004,-122 a 13.54,13.54 0 0 1 0,-13.48 l 70.450004,-122 a 13.51,13.51 0 0 1 11.67,-6.73 h 67.67 l -13.3,-23.16 a 54.43,54.43 0 0 0 -5.55,-7.6 h -48.83 a 44.3,44.3 0 0 0 -38.26,22.09 l -70.440004,122 a 44.29,44.29 0 0 0 0,44.18 l 70.430004,122 a 44.31,44.31 0 0 0 38.27,22.1 h 140.87 a 44.3,44.3 0 0 0 38.26,-22.09 l 68.42,-118.5 z"/>
<path fill="currentColor" d="m 218.88177,398.93 a 55.89,55.89 0 0 1 -23.16,5.12 h -33.54 a 56.31,56.31 0 0 1 -48.58,-28.07 L 38.211766,245.47 a 56.3,56.3 0 0 1 0,-56.14 L 113.60177,58.81 a 56.29,56.29 0 0 1 48.62,-28.07 h 33.54 a 56.28,56.28 0 0 1 48.62,28.07 l 76.79,133 h 35.43 l -63.46,-109.89 h 19.95 a 13.52,13.52 0 0 1 11.67,6.73 l 59.55,103.16 h 35.46 l -68.41,-118.5 a 44.31,44.31 0 0 0 -38.27,-22.13 h -37.68 l -4.47,-7.76 A 87.11,87.11 0 0 0 195.72177,0 h -33.54 A 87.1,87 0 0 0 86.971766,43.42 l -75.37,130.55 a 87.07,87.07 0 0 0 0,86.85 l 75.35,130.52 a 87.1,87.1 0 0 0 75.210004,43.42 h 33.54 a 87,87 0 0 0 70.12,-35.83 z"/>
</svg>
Get Started
</a>
<a href="https://github.com/conductor-oss/conductor" target="_blank" class="btn-ghost">
<svg viewBox="0 0 16 16" width="18" height="18" fill="currentColor" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8Z"/>
</svg>
View on GitHub
</a>
</div>
<div class="hero-trust">
<span class="trust-label">Built for change</span>
<div class="trust-names">
<span class="trust-name">Independent workflow upgrades</span>
<span class="trust-name">Runtime-defined workflows</span>
<span class="trust-name">Dynamic forks and tasks</span>
<span class="trust-name">Native LLM + MCP</span>
<span class="trust-name">Human-in-the-loop</span>
<span class="trust-name">Any-language workers</span>
<span class="trust-name">Replayable history</span>
</div>
</div>
</div>
</section>
<div class="divider"></div>
<!-- ═══════════════════════ SDKs ═══════════════════════ -->
<section class="sec sec-alt">
<div class="wrap">
<div class="sec-header reveal">
<div class="sec-label">Polyglot Execution</div>
<h2 class="sec-title">Keep workers in the stacks you already run</h2>
<p class="sec-sub">Conductor orchestrates across languages and services instead of forcing workflow logic into a single application runtime</p>
</div>
<div class="sdk-grid">
<a href="https://github.com/conductor-oss/python-sdk" target="_blank" class="sdk-card reveal">
<div class="sdk-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678a2209d4ba4824214673ba_Python-Logo.svg" alt="Python"/></div>
<div><div class="sdk-name">Python</div><div class="sdk-sub">conductor-oss/python-sdk</div></div>
<div class="sdk-arr"></div>
</a>
<a href="https://github.com/conductor-oss/java-sdk" target="_blank" class="sdk-card reveal">
<div class="sdk-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678a25110bcb32a4d1f2a22c_Java-Logo.svg" alt="Java"/></div>
<div><div class="sdk-name">Java</div><div class="sdk-sub">conductor-oss/java-sdk</div></div>
<div class="sdk-arr"></div>
</a>
<a href="https://github.com/conductor-oss/javascript-sdk" target="_blank" class="sdk-card reveal">
<div class="sdk-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678a2511a772639865269151_Javascript%20Logo.svg" alt="TypeScript"/></div>
<div><div class="sdk-name">TypeScript</div><div class="sdk-sub">conductor-oss/javascript-sdk</div></div>
<div class="sdk-arr"></div>
</a>
<a href="https://github.com/conductor-oss/csharp-sdk" target="_blank" class="sdk-card reveal">
<div class="sdk-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678a26151fe2f8e3fa2d22bd_CSharp%20Logo.svg" alt=".NET"/></div>
<div><div class="sdk-name">.NET</div><div class="sdk-sub">conductor-oss/csharp-sdk</div></div>
<div class="sdk-arr"></div>
</a>
<a href="https://github.com/conductor-oss/go-sdk" target="_blank" class="sdk-card reveal">
<div class="sdk-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678a25111b9e7323a0d7f881_Go%20Logo.svg" alt="Go"/></div>
<div><div class="sdk-name">Go</div><div class="sdk-sub">conductor-oss/go-sdk</div></div>
<div class="sdk-arr"></div>
</a>
<a href="https://github.com/conductor-oss/ruby-sdk" target="_blank" class="sdk-card reveal">
<div class="sdk-icon">
<svg viewBox="0 0 40 40" width="34" height="34" xmlns="http://www.w3.org/2000/svg">
<defs><linearGradient id="rg1" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" stop-color="#FF6B6B"/><stop offset="100%" stop-color="#CC342D"/></linearGradient></defs>
<polygon points="20,4 34,12 34,28 20,36 6,28 6,12" fill="url(#rg1)"/>
<polygon points="20,9 29,14 29,26 20,31 11,26 11,14" fill="#CC342D" opacity="0.4"/>
<circle cx="20" cy="20" r="5" fill="white" opacity="0.9"/>
</svg>
</div>
<div><div class="sdk-name">Ruby</div><div class="sdk-sub">conductor-oss/ruby-sdk</div></div>
<div class="sdk-arr"></div>
</a>
<a href="https://github.com/conductor-oss/rust-sdk" target="_blank" class="sdk-card reveal">
<div class="sdk-icon">
<svg viewBox="0 0 40 40" width="34" height="34" xmlns="http://www.w3.org/2000/svg">
<circle cx="20" cy="20" r="16" fill="#CE422B"/>
<text x="20" y="26" font-size="18" font-weight="bold" text-anchor="middle" fill="white" font-family="sans-serif">R</text>
<circle cx="20" cy="20" r="16" fill="none" stroke="white" stroke-width="1.5" opacity="0.3"/>
</svg>
</div>
<div><div class="sdk-name">Rust</div><div class="sdk-sub">conductor-oss/rust-sdk</div></div>
<div class="sdk-arr"></div>
</a>
</div>
</div>
</section>
<div class="divider"></div>
<!-- ═══════════════════════ GETTING STARTED ═══════════════════════ -->
<section class="sec">
<div class="wrap">
<div class="sec-header reveal">
<div class="sec-label">Quick Start</div>
<h2 class="sec-title">Getting Started</h2>
<p class="sec-sub">Start with the core OSS paths: quickstart, self-hosting, recipes, and releases</p>
</div>
<div class="res-grid">
<a href="https://docs.conductor-oss.org/quickstart/index.html" target="_blank" class="res-card reveal">
<div class="res-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f366de246fa22be1364f1_Docs.svg" alt="Quickstart"/></div>
<div>
<div class="res-title">Quickstart Guide</div>
<p class="res-desc">Run Conductor locally, register a workflow, and execute it end to end.</p>
</div>
<div class="res-link">Start here →</div>
</a>
<a href="https://docs.conductor-oss.org/devguide/running/deploy.html" target="_blank" class="res-card reveal">
<div class="res-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f366dd6adbc0fd8fd73ac_Guides.svg" alt="Deployment"/></div>
<div>
<div class="res-title">Self-Hosting</div>
<p class="res-desc">Deploy Conductor OSS with Docker, shared persistence, and production-ready topology.</p>
</div>
<div class="res-link">Deploy OSS →</div>
</a>
<a href="https://docs.conductor-oss.org/devguide/cookbook/index.html" target="_blank" class="res-card reveal">
<div class="res-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f366d6b7f4bad39d28f23_Blogs.svg" alt="Cookbook"/></div>
<div>
<div class="res-title">Cookbook</div>
<p class="res-desc">Reference patterns for microservices, timers, event-driven workflows, and AI orchestration.</p>
</div>
<div class="res-link">Browse recipes →</div>
</a>
<a href="https://github.com/conductor-oss/conductor/releases" target="_blank" class="res-card reveal">
<div class="res-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f366dc3ebba51aa4c8c65_Customers.svg" alt="Releases"/></div>
<div>
<div class="res-title">Releases</div>
<p class="res-desc">Download tagged releases, review changelogs, and track the project release cadence.</p>
</div>
<div class="res-link">View releases →</div>
</a>
</div>
</div>
</section>
<div class="divider"></div>
<!-- ═══════════════════════ CONDUCTOR MODEL ═══════════════════════ -->
<section class="sec sec-alt">
<div class="wrap">
<div class="sec-header reveal">
<div class="sec-label">Four Pillars</div>
<h2 class="sec-title">Why Conductor is stronger when systems change in production</h2>
<p class="sec-sub">The real advantage is not just durability. It is durable orchestration that can evolve independently, adapt at runtime, span any language boundary, and absorb AI-native workflows without forcing a new stack.</p>
</div>
<div class="res-grid">
<a href="https://docs.conductor-oss.org/architecture/json-native.html" target="_blank" class="res-card reveal">
<div class="res-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f366de246fa22be1364f1_Docs.svg" alt="JSON-native"/></div>
<div>
<div class="res-title">Workflow changes should not require worker redeploys</div>
<p class="res-desc">Version, inspect, and change workflow behavior independently of worker implementations. Running executions keep their snapshot while new executions pick up the new path.</p>
</div>
<div class="res-link">See runtime model →</div>
</a>
<a href="https://docs.conductor-oss.org/devguide/ai/dynamic-workflows.html" target="_blank" class="res-card reveal">
<div class="res-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f366dd6adbc0fd8fd73ac_Guides.svg" alt="Dynamic workflows"/></div>
<div>
<div class="res-title">Dynamic plans should run natively at runtime</div>
<p class="res-desc">Generate workflows on demand, branch with dynamic tasks and forks, and choose sub-workflows per execution without adding a code generation or redeploy step.</p>
</div>
<div class="res-link">See dynamic workflows →</div>
</a>
<a href="https://docs.conductor-oss.org/devguide/ai/llm-orchestration.html" target="_blank" class="res-card reveal">
<div class="res-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f366d6b7f4bad39d28f23_Blogs.svg" alt="AI orchestration"/></div>
<div>
<div class="res-title">AI orchestration should be infrastructure, not example code</div>
<p class="res-desc">LLM tasks, MCP tool discovery and calls, vector workflows, and human approval are first-class engine capabilities on the same durable runtime as service orchestration.</p>
</div>
<div class="res-link">See AI orchestration →</div>
</a>
<a href="https://docs.conductor-oss.org/documentation/clientsdks/index.html" target="_blank" class="res-card reveal">
<div class="res-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f366dc3ebba51aa4c8c65_Customers.svg" alt="Polyglot workers"/></div>
<div>
<div class="res-title">Polyglot systems need one durable control plane</div>
<p class="res-desc">Keep workers in Java, Python, Go, TypeScript, C#, Ruby, Rust, or any service that can call HTTP. Orchestration should not force a single application runtime.</p>
</div>
<div class="res-link">See SDKs and workers →</div>
</a>
</div>
</div>
</section>
<div class="divider"></div>
<!-- ═══════════════════════ FEATURES ═══════════════════════ -->
<section class="sec sec-dark">
<div class="wrap">
<div class="sec-header reveal">
<div class="sec-label">Production Proof</div>
<h2 class="sec-title">Why the model holds under real failure</h2>
<p class="sec-sub">The mechanics behind independent workflow evolution, runtime orchestration, and long-running execution in production</p>
</div>
<div class="feat-grid">
<div class="feat-card reveal">
<div class="feat-thumb">
<a href="https://docs.conductor-oss.org/architecture/durable-execution.html" target="_blank">
<img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/6793c66f1dec8a45facefc2d_Reliability.jpg" alt="High Reliability"/>
</a>
</div>
<div class="feat-body">
<div>
<div class="feat-num">01 — Durability</div>
<div class="feat-title">State Persists at Every Step</div>
<div class="feat-desc">Workflow state, task state, inputs, outputs, retries, and queues are persisted before execution advances, so workers and servers can fail without losing progress.</div>
</div>
<a href="https://docs.conductor-oss.org/architecture/durable-execution.html" target="_blank" class="feat-link">
Failure semantics <span class="circ"></span>
</a>
</div>
</div>
<div class="feat-card reveal">
<div class="feat-thumb">
<a href="https://docs.conductor-oss.org/architecture/durable-execution.html#replay-and-recovery" target="_blank">
<img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678a2c102b760b3868dfdc83_Reliability.png" alt="Infinite Scale"/>
</a>
</div>
<div class="feat-body">
<div>
<div class="feat-num">02 — Recovery</div>
<div class="feat-title">Recovery Is an Operator Primitive</div>
<div class="feat-desc">Pause, resume, retry, rerun, and restart are normal controls backed by preserved execution history, not custom recovery logic you have to invent later.</div>
</div>
<a href="https://docs.conductor-oss.org/architecture/durable-execution.html#replay-and-recovery" target="_blank" class="feat-link">
Learn recovery model <span class="circ"></span>
</a>
</div>
</div>
<div class="feat-card reveal">
<div class="feat-thumb">
<a href="https://docs.conductor-oss.org/architecture/json-native.html" target="_blank">
<img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678a2c1060f04714890cc123_High-Availability.jpg" alt="High Availability"/>
</a>
</div>
<div class="feat-body">
<div>
<div class="feat-num">03 — Determinism</div>
<div class="feat-title">No Replay-Safe Workflow Coding Trap</div>
<div class="feat-desc">Workflow definitions are pure orchestration. Side effects live in workers and system tasks, so determinism comes from the model itself instead of replay-safe application code discipline.</div>
</div>
<a href="https://docs.conductor-oss.org/architecture/json-native.html" target="_blank" class="feat-link">
Why JSON-native <span class="circ"></span>
</a>
</div>
</div>
<div class="feat-card reveal">
<div class="feat-thumb">
<a href="https://docs.conductor-oss.org/architecture/json-native.html#diffable-versioning" target="_blank">
<img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678a437064cabed6825fb79f_Durable-Execution-cover.png" alt="Durable Execution"/>
</a>
</div>
<div class="feat-body">
<div>
<div class="feat-num">04 — Versioning</div>
<div class="feat-title">Running Workflows Keep Their Snapshot</div>
<div class="feat-desc">Each execution carries the workflow definition snapshot taken at start time, so new workflow behavior can ship without destabilizing executions that are already in flight.</div>
</div>
<a href="https://docs.conductor-oss.org/architecture/json-native.html#diffable-versioning" target="_blank" class="feat-link">
Learn versioning model <span class="circ"></span>
</a>
</div>
</div>
</div>
</div>
</section>
<div class="divider"></div>
<!-- ═══════════════════════ RESOURCES ═══════════════════════ -->
<section class="sec sec-alt">
<div class="wrap">
<div class="sec-header reveal">
<div class="sec-label">Learn</div>
<h2 class="sec-title">Project Resources</h2>
<p class="sec-sub">Core documentation, architecture, recipes, and direct answers to the common durability and comparison questions</p>
</div>
<div class="res-grid">
<a href="https://docs.conductor-oss.org/index.html" target="_blank" class="res-card reveal">
<div class="res-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f366de246fa22be1364f1_Docs.svg" alt="Docs"/></div>
<div>
<div class="res-title">Documentation</div>
<p class="res-desc">Architecture, APIs, workflow primitives, operations, and deployment guidance.</p>
</div>
<div class="res-link">Read Docs →</div>
</a>
<a href="https://docs.conductor-oss.org/architecture/durable-execution.html" target="_blank" class="res-card reveal">
<div class="res-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f366dd6adbc0fd8fd73ac_Guides.svg" alt="Guides"/></div>
<div>
<div class="res-title">Durable Execution</div>
<p class="res-desc">Read the project contract for persistence, retries, replay, and recovery behavior.</p>
</div>
<div class="res-link">Read architecture →</div>
</a>
<a href="https://docs.conductor-oss.org/devguide/cookbook/index.html" target="_blank" class="res-card reveal">
<div class="res-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f366d6b7f4bad39d28f23_Blogs.svg" alt="Blog"/></div>
<div>
<div class="res-title">Cookbook</div>
<p class="res-desc">Use reference recipes for microservices, event-driven patterns, timers, and AI workflows.</p>
</div>
<div class="res-link">Browse cookbook →</div>
</a>
<a href="https://docs.conductor-oss.org/devguide/faq.html#how-is-conductor-different-from-temporal" target="_blank" class="res-card reveal">
<div class="res-icon"><img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f366dc3ebba51aa4c8c65_Customers.svg" alt="FAQ"/></div>
<div>
<div class="res-title">Why Conductor</div>
<p class="res-desc">Read the reasoning behind independent workflow upgrades, runtime-defined orchestration, native AI primitives, and polyglot workers.</p>
</div>
<div class="res-link">Read answers →</div>
</a>
</div>
</div>
</section>
<div class="divider"></div>
<!-- ═══════════════════════ COMMUNITY ═══════════════════════ -->
<section class="sec">
<div class="wrap">
<div class="sec-header reveal">
<div class="sec-label">Community</div>
<h2 class="sec-title">Join the Community</h2>
<p class="sec-sub">Discuss ideas, contribute in public, and track project activity across the open-source community</p>
</div>
<div class="comm-grid">
<div class="comm-card reveal">
<div class="comm-img-wrap">
<img class="comm-img"
src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f24641057233c8ec4ef5b_Community-portals.jpg"
alt="Community"/>
</div>
<div class="comm-body">
<div class="comm-title">Community</div>
<p class="comm-desc">Join the public Slack community and GitHub Discussions to ask questions and share patterns.</p>
<a href="https://join.slack.com/t/orkes-conductor/shared_invite/zt-3dpcskdyd-W895bJDm8psAV7viYG3jFA"
target="_blank" class="comm-cta">
Join Slack
<img src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/65734bf299254b8afd025072_Slack%20Icon.svg" alt="Slack"/>
</a>
</div>
</div>
<div class="comm-card reveal">
<a href="https://github.com/conductor-oss/conductor" target="_blank" class="comm-img-wrap">
<img class="comm-img"
src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f2464a5be829c3ba4d3d2_Community-Github.jpg"
alt="GitHub"/>
</a>
<div class="comm-body">
<div class="comm-title">GitHub</div>
<p class="comm-desc">Follow the repository, browse issues, review releases, and track active development.</p>
<div style="display:flex;align-items:center;gap:12px;margin-top:8px;">
<a href="https://github.com/conductor-oss/conductor" target="_blank" class="comm-cta" style="text-decoration:none;">
View on GitHub →
</a>
<a class="github-button"
href="https://github.com/conductor-oss/conductor"
data-color-scheme="no-preference: dark; light: dark; dark: dark;"
data-size="large"
data-show-count="true"
aria-label="Star conductor-oss/conductor on GitHub">Star</a>
</div>
</div>
</div>
<div class="comm-card reveal">
<div class="comm-img-wrap">
<img class="comm-img"
src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/678f2464e8a0298699edb71b_Community-events.jpg"
alt="Contributing"/>
</div>
<div class="comm-body">
<div class="comm-title">Contributing</div>
<p class="comm-desc">Open pull requests, report issues, and review the project security and contribution policies.</p>
<a href="https://github.com/conductor-oss/conductor/blob/main/CONTRIBUTING.md" target="_blank" class="comm-cta comm-cta-blue">
Read contributing guide →
</a>
</div>
</div>
</div>
</div>
</section>
<!-- ═══════════════════════ FOOTER ═══════════════════════ -->
<footer class="footer">
<div class="wrap">
<div class="footer-main">
<div class="footer-brand">
<img class="footer-logo"
src="https://cdn.prod.website-files.com/6572bd8c27ee5db3eb91f4b3/657349f6b74e4f7dab1b979b_Conductor-Logo_RW.png"
alt="Conductor"/>
<p class="footer-tagline">Open Source Workflow and Agent Orchestration Platform</p>
<p class="footer-copy">Copyright 2026 © Conductor OSS Contributors</p>
</div>
<div class="footer-cols">
<div class="footer-col">
<div class="footer-col-head">Resources</div>
<a href="https://docs.conductor-oss.org/index.html" target="_blank">Docs</a>
<a href="https://docs.conductor-oss.org/quickstart/index.html" target="_blank">Quickstart</a>
<a href="https://github.com/conductor-oss/conductor/releases" target="_blank">Releases</a>
<a href="https://github.com/conductor-oss/conductor/security/policy" target="_blank">Security</a>
</div>
<div class="footer-col">
<div class="footer-col-head">Community</div>
<a href="https://github.com/conductor-oss/conductor" target="_blank">GitHub</a>
<a href="https://github.com/conductor-oss/conductor/discussions" target="_blank">Discussions</a>
<a href="https://join.slack.com/t/orkes-conductor/shared_invite/zt-3dpcskdyd-W895bJDm8psAV7viYG3jFA" target="_blank">Slack</a>
<a href="https://github.com/conductor-oss/conductor/blob/main/CONTRIBUTING.md" target="_blank">Contributing</a>
</div>
</div>
</div>
</div>
<div class="footer-end">
<div class="wrap">
Originally created at Netflix. Maintained in the open by the Conductor OSS community.
</div>
</div>
</footer>
<!-- GitHub Buttons -->
<script async defer src="https://buttons.github.io/buttons.js"></script>
<script>
document.querySelectorAll('a[target="_blank"]').forEach(function (link) {
link.rel = 'noopener noreferrer';
});
/* ─── MODAL ─── */
const modalBg = document.getElementById('modal-bg');
const openBtn = document.getElementById('open-modal');
const closeBtn = document.getElementById('modal-x');
function openModal() { modalBg.classList.add('open'); document.body.style.overflow = 'hidden'; }
function closeModal() { modalBg.classList.remove('open'); document.body.style.overflow = ''; }
openBtn.addEventListener('click', openModal);
closeBtn.addEventListener('click', closeModal);
modalBg.addEventListener('click', e => { if (e.target === modalBg) closeModal(); });
document.addEventListener('keydown', e => { if (e.key === 'Escape') closeModal(); });
/* ─── MOBILE NAV ─── */
const burger = document.getElementById('burger');
const drawer = document.getElementById('nav-drawer');
burger.addEventListener('click', () => drawer.classList.toggle('open'));
/* ─── SCROLL REVEAL ─── */
const ro = new IntersectionObserver(entries => {
entries.forEach(e => {
if (e.isIntersecting) {
setTimeout(() => e.target.classList.add('vis'), +e.target.dataset.d || 0);
ro.unobserve(e.target);
}
});
}, { threshold: 0.08, rootMargin: '0px 0px -32px 0px' });
/* Stagger items inside grids */
document.querySelectorAll('.sdk-grid, .gs-grid, .feat-grid, .res-grid, .comm-grid').forEach(g => {
g.querySelectorAll('.reveal').forEach((el, i) => { el.dataset.d = i * 75; });
});
document.querySelectorAll('.reveal').forEach(el => ro.observe(el));
/* ─── NAV SCROLL TINT ─── */
const nav = document.getElementById('nav');
window.addEventListener('scroll', () => {
const alpha = scrollY > 10 ? '.16' : '.10';
const isLight = document.documentElement.dataset.theme === 'light';
nav.style.borderBottomColor = isLight
? `rgba(0,0,0,${scrollY > 10 ? '.14' : '.09'})`
: `rgba(255,255,255,${scrollY > 10 ? '.12' : '.08'})`;
}, { passive: true });
/* ─── THEME TOGGLE ─── */
const themeBtn = document.getElementById('theme-toggle');
themeBtn.addEventListener('click', () => {
const html = document.documentElement;
const next = html.dataset.theme === 'light' ? 'dark' : 'light';
html.classList.add('transitioning');
html.dataset.theme = next;
localStorage.setItem('theme', next);
// Update canvas opacity
const heroCanvas = document.getElementById('hero-canvas');
heroCanvas.style.opacity = next === 'light' ? '0.7' : '0.55';
setTimeout(() => html.classList.remove('transitioning'), 400);
});
// Set initial canvas opacity based on stored theme
(function(){
const heroCanvas = document.getElementById('hero-canvas');
if (document.documentElement.dataset.theme === 'light') heroCanvas.style.opacity = '0.7';
})();
/* ─── HERO CANVAS WORKFLOW ANIMATION ─── */
(function () {
const canvas = document.getElementById('hero-canvas');
const ctx = canvas.getContext('2d');
function tc() {
/* Orange accent — matches docs.conductor-oss.org Zinc+Orange theme */
return document.documentElement.dataset.theme === 'light'
? [234, 88, 12] /* #ea580c — deeper orange on light bg */
: [249, 115, 22]; /* #f97316 — brand orange on dark bg */
}
let W, H, raf;
function resize() {
W = canvas.width = canvas.offsetWidth;
H = canvas.height = canvas.offsetHeight;
}
window.addEventListener('resize', resize);
resize();
/* Node definitions (relative coords) */
const ND = [
{ rx:.07, ry:.44, lbl:'START', kind:'end' },
{ rx:.23, ry:.24, lbl:'HTTP', kind:'task' },
{ rx:.23, ry:.64, lbl:'FORK', kind:'fork' },
{ rx:.42, ry:.13, lbl:'Worker A', kind:'task' },
{ rx:.42, ry:.44, lbl:'Worker B', kind:'task' },
{ rx:.42, ry:.72, lbl:'Worker C', kind:'task' },
{ rx:.63, ry:.40, lbl:'JOIN', kind:'fork' },
{ rx:.80, ry:.25, lbl:'Notify', kind:'task' },
{ rx:.80, ry:.57, lbl:'Store', kind:'task' },
{ rx:.94, ry:.40, lbl:'END', kind:'end' },
];
const EDGES = [
[0,1],[0,2],
[1,4],[2,3],[2,5],
[3,6],[4,6],[5,6],
[6,7],[6,8],
[7,9],[8,9],
];
/* One particle per edge */
const particles = EDGES.map(() => ({
t: Math.random(),
spd: .0028 + Math.random() * .002,
live: Math.random() > .35,
}));
let frame = 0;
function bezier(ax, ay, bx, by, t) {
const cpx = (ax + bx) / 2;
const x = (1-t)**3*ax + 3*(1-t)**2*t*cpx + 3*(1-t)*t**2*cpx + t**3*bx;
const y = (1-t)**3*ay + 3*(1-t)**2*t*ay + 3*(1-t)*t**2*by + t**3*by;
return { x, y };
}
function draw() {
ctx.clearRect(0, 0, W, H);
const nodes = ND.map(n => ({ ...n, x: n.rx * W, y: n.ry * H }));
const [tr, tg, tb] = tc();
const rgb = `${tr},${tg},${tb}`;
/* Edges */
EDGES.forEach(([a, b]) => {
const na = nodes[a], nb = nodes[b];
const cpx = (na.x + nb.x) / 2;
ctx.beginPath();
ctx.moveTo(na.x, na.y);
ctx.bezierCurveTo(cpx, na.y, cpx, nb.y, nb.x, nb.y);
ctx.strokeStyle = `rgba(${rgb},.13)`;
ctx.lineWidth = 1.4;
ctx.stroke();
});
/* Particles */
particles.forEach((p, i) => {
if (!p.live) { if (Math.random() < .004) { p.live = true; p.t = 0; } return; }
const [a, b] = EDGES[i];
const na = nodes[a], nb = nodes[b];
const pos = bezier(na.x, na.y, nb.x, nb.y, p.t);
/* glow */
const g = ctx.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, 9);
g.addColorStop(0, `rgba(${rgb},.55)`);
g.addColorStop(1, `rgba(${rgb},0)`);
ctx.beginPath(); ctx.arc(pos.x, pos.y, 9, 0, Math.PI*2);
ctx.fillStyle = g; ctx.fill();
/* dot */
ctx.beginPath(); ctx.arc(pos.x, pos.y, 2.2, 0, Math.PI*2);
ctx.fillStyle = `rgba(${rgb},.9)`; ctx.fill();
p.t += p.spd;
if (p.t > 1) { p.t = 0; p.live = Math.random() > .15; }
});
/* Nodes */
nodes.forEach((n, i) => {
const pulse = Math.sin(frame * .038 + i * 1.05) * .5 + .5;
const r = n.kind === 'end' ? 7 : 5;
/* outer glow */
const gr = ctx.createRadialGradient(n.x, n.y, 0, n.x, n.y, 26 + pulse * 8);
gr.addColorStop(0, `rgba(${rgb},${.10 + pulse * .08})`);
gr.addColorStop(1, `rgba(${rgb},0)`);
ctx.beginPath(); ctx.arc(n.x, n.y, 26 + pulse * 8, 0, Math.PI*2);
ctx.fillStyle = gr; ctx.fill();
/* circle */
ctx.beginPath(); ctx.arc(n.x, n.y, r, 0, Math.PI*2);
ctx.fillStyle = `rgba(${rgb},${n.kind === 'end' ? .78 + pulse*.22 : .40 + pulse*.22})`;
ctx.strokeStyle = `rgba(${rgb},${.58 + pulse*.38})`;
ctx.lineWidth = 1.4;
ctx.fill(); ctx.stroke();
/* label */
ctx.font = '400 9.5px IBM Plex Mono, monospace';
ctx.fillStyle = `rgba(${rgb},${.40 + pulse*.15})`;
ctx.textAlign = 'center';
ctx.fillText(n.lbl, n.x, n.y - r - 5);
});
frame++;
raf = requestAnimationFrame(draw);
}
draw();
window.addEventListener('beforeunload', () => cancelAnimationFrame(raf));
})();
</script>
</body>
</html>