Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
93d2727
Add interactive Nexus demo page
jsundai Mar 25, 2026
b5998ee
Use MDX for Nexus demo page
jsundai Mar 25, 2026
f9dcf74
Move Nexus demo to docs/
jsundai Mar 25, 2026
1668a2d
Match page background to demo iframe color
jsundai Mar 25, 2026
37ef597
Fix quiz option text color
jsundai Mar 25, 2026
704bd9e
Fix copy and auto-resize iframe to content height
jsundai Mar 25, 2026
8806f69
Refine Nexus demo: design, new sections, nav cleanup
jsundai Mar 25, 2026
631951b
Restore quiz questions lost in section cleanup
jsundai Mar 25, 2026
9ef903f
Convert Nexus demo from static HTML to React components
jsundai Mar 25, 2026
15252c8
Restore Components layout, Key Facts, Run Demo, GitHub buttons
jsundai Mar 25, 2026
a246b1c
Polishing and how it works
jsundai Mar 25, 2026
7b5c270
Move Nexus demo to encyclopedia sidebar, fix How It Works animation
jsundai Mar 26, 2026
254000a
Move interactive demo to end of Nexus encyclopedia, restore page title
jsundai Mar 26, 2026
d227389
Remove emojis, demo back to standalone page
jsundai Mar 26, 2026
d00b5a3
Polish NexusDemo UI: branding, copy, and animation cleanup
jsundai Mar 26, 2026
a36c14d
Update Overview lead copy to reflect full Nexus capability scope
jsundai Mar 26, 2026
8ee2343
Merge branch 'main' into claude/quizzical-pike
jsundai Mar 26, 2026
c0a7924
Add Resources section and polish copy across NexusDemo
jsundai Mar 26, 2026
54a1dd7
Add Interactive Demos sidebar section, fix nexus-demo title
jsundai Mar 26, 2026
c8289e6
Polish NexusDemo: orange Python tag, sharp corners, copy fixes
jsundai Mar 26, 2026
124f920
Improve preciseness of core Nexus component descriptions
jsundai Mar 26, 2026
43a771f
Fix button text color, Python tag color, Resources section polish
jsundai Mar 27, 2026
7fe5e89
Merge remote-tracking branch 'origin/main' into claude/quizzical-pike
jsundai Apr 10, 2026
f017a3f
Add Quickstart tab replacing Build It
jsundai Apr 10, 2026
5b1f173
phils initial feedback
jsundai Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions docs/nexus-demo.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
id: nexus-demo
title: Temporal Nexus - Interactive Demo
sidebar_label: Temporal Nexus
description: An interactive walkthrough of Temporal Nexus - what it is, how it works, and how to build with it.
slug: /nexus-demo
tags:
- Nexus
keywords:
- temporal nexus demo
- nexus interactive
hide_table_of_contents: true
---

import NexusDemo from '@site/src/components/NexusDemo';

<NexusDemo />
8 changes: 8 additions & 0 deletions sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -1491,6 +1491,14 @@ module.exports = {
],
},
'glossary',
{
type: 'category',
label: 'Interactive Demos',
collapsed: true,
items: [
'nexus-demo',
],
},
'with-ai',
// {
// type: "autogenerated",
Expand Down
48 changes: 48 additions & 0 deletions src/components/NexusDemo/BuildIt.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import React from 'react';
import styles from './NexusDemo.module.css';

type Props = { onNext: () => void };

const QUICKSTARTS = [
{ lang: 'Go', url: '/develop/go/nexus/quickstart', color: 'var(--nd-purple)' },
{ lang: 'TypeScript', url: '/develop/typescript/nexus/quickstart', color: 'var(--nd-green)' },
{ lang: '.NET', url: '/develop/dotnet/nexus/quickstart', color: 'var(--ifm-color-primary)' },
{ lang: 'Java', url: '/develop/java/nexus/quickstart', color: 'var(--nd-amber)' },
{ lang: 'Python', url: '/develop/python/nexus/quickstart', color: 'var(--nd-orange)' },
];

export default function BuildIt({ onNext }: Props) {
return (
<div className={styles.section}>
<div className={styles.progressBar}>
<div className={styles.progressFill} style={{ width: '71%' }} />
</div>

<h1>Quickstart</h1>
<p className={styles.lead}>
Pick your language and follow the official Nexus quickstart. Each guide walks you through
building a cross-Namespace Nexus Service from scratch.
</p>

<div style={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: 12 }}>
{QUICKSTARTS.map(({ lang, url, color }) => (
<a
key={lang}
href={url}
className={styles.quickstartCard}
style={{ '--qs-accent': color } as React.CSSProperties}
>
<span className={styles.quickstartLang}>{lang}</span>
<span className={styles.quickstartCta}>Quickstart →</span>
</a>
))}
</div>

<div className={styles.nextRow}>
<button className={styles.btn} onClick={onNext}>
Next: Test Yourself →
</button>
</div>
</div>
);
}
165 changes: 165 additions & 0 deletions src/components/NexusDemo/ComponentsSection.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
import React, { useState } from 'react';
import styles from './NexusDemo.module.css';

type Props = { onNext: () => void };

export default function ComponentsSection({ onNext }: Props) {
const [opTab, setOpTab] = useState<'sync' | 'async'>('sync');

return (
<div className={styles.section}>
<div className={styles.progressBar}>
<div className={styles.progressFill} style={{ width: '28%' }} />
</div>

<h1>The Four Building Blocks</h1>
<p className={styles.lead}>
Nexus has four core concepts.
</p>

<div className={styles.compEList}>

{/* 1: Service */}
<div className={styles.compECard}>
<div className={styles.compENumCol}>
<div className={styles.compENum}>1</div>
</div>
<div className={styles.compEContent}>
<h2 className={styles.componentTitle}>Nexus Service</h2>
<p className={styles.compERole}>The contract you publish for others to consume</p>
<p>
A Service is a <strong>named collection of Nexus Operations</strong>, similar to an API
interface. Multiple services can run in the same Worker. In supported SDKs, callers
can import the service definition for type-safe calls.
</p>
<p>
Example:{' '}
<code style={{ color: 'var(--ifm-color-primary)' }}>fraud.v1</code> service exposes{' '}
<code>checkTransaction</code>, <code>flagUser</code>, and <code>getScore</code>{' '}
operations.
</p>
</div>
</div>

{/* 2: Operation */}
<div className={styles.compECard}>
<div className={styles.compENumCol}>
<div className={styles.compENum}>2</div>
</div>
<div className={styles.compEContent}>
<h2 className={styles.componentTitle}>Nexus Operation</h2>
<p className={styles.compERole}>The individual action: sync or async</p>

<div className={styles.opTabs}>
<button
className={`${styles.opTab} ${opTab === 'sync' ? styles.opTabActive : ''}`}
onClick={() => setOpTab('sync')}
>
Synchronous
</button>
<button
className={`${styles.opTab} ${opTab === 'async' ? styles.opTabActive : ''}`}
onClick={() => setOpTab('async')}
>
Asynchronous
</button>
</div>

{opTab === 'sync' ? (
<>
<p>
<strong>Synchronous</strong> operations complete in under 10 seconds, measured
from when the caller's Nexus Machinery dispatches the request. Good for quick
lookups, scoring, or validations.
</p>
<div className={styles.compECode}>
Caller → [Nexus RPC] → Handler → result → Caller
<br />
Duration: milliseconds to &lt;10 seconds
</div>
</>
) : (
<>
<p>
<strong>Asynchronous</strong> operations start a Workflow and return an
operation token. The caller Workflow is blocked at the await point. When the
handler Workflow completes, a callback delivers the result.
</p>
<div className={styles.compECode}>
Caller → [start] → Handler starts Workflow → [token]
<br />
...time passes (up to 60 days)...
<br />
Handler Workflow completes → [callback] → Caller resumes
</div>
</>
)}
</div>
</div>

{/* 3: Endpoint */}
<div className={styles.compECard}>
<div className={styles.compENumCol}>
<div className={styles.compENum}>3</div>
</div>
<div className={styles.compEContent}>
<h2 className={styles.componentTitle}>Nexus Endpoint</h2>
<p className={styles.compERole}>The named entry point callers use to reach a service</p>
<p>
An Endpoint is a <strong>named connection point</strong> registered in the Nexus
Registry. Callers reference it by name. That's all they need. Temporal handles
routing to the right team's Namespace and Task Queue behind the scenes.
</p>
<p>
Unlike a general HTTP proxy, a Nexus Endpoint is managed entirely within the
Temporal platform, with auth, retries, and observability built in. Routing is
handled by the platform so callers never need connection details for the target Namespace.
</p>
<div className={styles.compECode}>
Caller uses name:{' '}
<span style={{ color: 'var(--ifm-color-primary)' }}>"fraud-detection-prod"</span>
<br />
Temporal routes to:{' '}
<span style={{ color: 'var(--nd-muted)' }}>fraud-ns / fraud-task-queue</span>
<br />
<span style={{ color: 'var(--nd-muted)' }}>
{'// callers never see the target, only the name'}
</span>
</div>
</div>
</div>

{/* 4: Registry */}
<div className={styles.compECard}>
<div className={styles.compENumCol}>
<div className={styles.compENum}>4</div>
</div>
<div className={styles.compEContent}>
<h2 className={styles.componentTitle}>Nexus Registry</h2>
<p className={styles.compERole}>The directory of all Endpoints in your account</p>
<p>
The Nexus Registry is scoped to your Temporal Cloud account or self-hosted cluster. Teams register
Endpoints here. On Temporal Cloud, the Registry also provides access control and
audit logging for all registered Endpoints.
</p>
<div className={styles.componentPills}>
<div className={styles.componentPill}>fraud-detection-prod</div>
<div className={styles.componentPill}>kyc-verification-v2</div>
<div className={styles.componentPill}>notifications-global</div>
<div className={`${styles.componentPill} ${styles.componentPillNew}`}>
+ register new
</div>
</div>
</div>
</div>

</div>

<div className={styles.nextRow}>
<button className={styles.btn} onClick={onNext}>
Next: How It Works →
</button>
</div>
</div>
);
}
Loading
Loading