Repository files navigation

VisualizeJS

Live siteCITopicsNext.jsReactTypeScriptLicense

Interactive visualizations for JavaScript and React concepts. Step through animations that show what the engine does at each stage, then read the theory behind it.

28 topics. Each one pairs a step-by-step visualization with theory sections covering how it works, common mistakes, and interview questions, all on a single page.

VisualizeJS homepage

Getting Started

npm install
npm run dev

Open http://localhost:3000. The app redirects to /javascript by default.

Node 20 or newer is required.

Scripts

CommandDescription
npm run devStart dev server (webpack mode)
npm run buildProduction build
npm run startServe the production build
npm run lintRun ESLint

Topics

Each topic lives at a single route, with the visualization at the top and the theory sections below it.

JavaScript (17)

TopicDifficulty
Event LoopIntermediate
HoistingBeginner
Execution ContextIntermediate
ClosuresIntermediate
PromisesIntermediate
this KeywordIntermediate
Scope ChainIntermediate
Type CoercionBeginner
DestructuringBeginner
Spread & RestBeginner
Prototypal InheritanceAdvanced
Reference vs ValueBeginner
Heap & StackAdvanced
Garbage CollectionAdvanced
Generators & IteratorsAdvanced
Event DelegationBeginner
Modules & ImportsIntermediate

React (11)

TopicDifficulty
Virtual DOMBeginner
ReconciliationIntermediate
Context PropagationIntermediate
Fiber TreeAdvanced
HooksIntermediate
Render CycleAdvanced
MemoizationIntermediate
SuspenseIntermediate
Server ComponentsAdvanced
Error BoundariesIntermediate
useEffect LifecycleBeginner

Some topics also have a sandbox mode where you can edit the code and watch the visualization respond. Event Loop is the reference implementation.

Project Structure

src/
app/ Next.js App Router routes
components/
layout/ Page shell, navigation
visualization-ui/ Shared primitives (NeonPanel, CodeBlock, TransportControls)
visualizations/ One folder per topic
content/theory/ Theory content, one file per topic
hooks/ useStepPlayback, useChangeFlash
lib/
topics.ts Topic registry, the single source of truth
metadata.ts SEO metadata factory
sandbox/ Sandbox mode infrastructure

Adding a topic touches several registries. CONTRIBUTING.md lists all of them.

Environment Variables

All are optional and have working defaults. Copy .env.example to .env.local to override.

VariableDefaultPurpose
NEXT_PUBLIC_SITE_URLhttps://visualizejs.comCanonical URLs, sitemap, Open Graph tags
NEXT_PUBLIC_CREATOR_LINKEDIN_URLMaintainer's profileCredit link in the footer
NEXT_PUBLIC_CREATOR_AVATAR_SRC/personal-image.pngAvatar in the footer

If you fork this, set the last two to your own.

Contributing

Read CONTRIBUTING.md first. New topics are welcome, and the authoring docs below walk through the process.

Documentation

DocCovers
docs/topic-authoring.mdJavaScript topic creation workflow
docs/react-topic-authoring.mdReact topic extensions
docs/component-reference.mdDesign system, components, hooks, animations
docs/theory-authoring.mdTheory content authoring
docs/sandbox-authoring.mdSandbox mode
docs/architecture.mdFrontend architecture rules
docs/seo.mdSEO implementation

Tech Stack

  • Next.js 16 App Router
  • React 19
  • TypeScript (strict)
  • Tailwind CSS v4
  • shadcn/ui primitives
  • CodeMirror 6 and Acorn for sandbox mode

License

MIT

About

Interactive step-by-step visualizations for JavaScript and React internals. 28 topics covering the event loop, closures, fiber, reconciliation, and more.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

VisualizeJS

Live siteCITopicsNext.jsReactTypeScriptLicense

Interactive visualizations for JavaScript and React concepts. Step through animations that show what the engine does at each stage, then read the theory behind it.

28 topics. Each one pairs a step-by-step visualization with theory sections covering how it works, common mistakes, and interview questions, all on a single page.

VisualizeJS homepage

Getting Started

npm install
npm run dev

Open http://localhost:3000. The app redirects to /javascript by default.

Node 20 or newer is required.

Scripts

CommandDescription
npm run devStart dev server (webpack mode)
npm run buildProduction build
npm run startServe the production build
npm run lintRun ESLint

Topics

Each topic lives at a single route, with the visualization at the top and the theory sections below it.

JavaScript (17)

TopicDifficulty
Event LoopIntermediate
HoistingBeginner
Execution ContextIntermediate
ClosuresIntermediate
PromisesIntermediate
this KeywordIntermediate
Scope ChainIntermediate
Type CoercionBeginner
DestructuringBeginner
Spread & RestBeginner
Prototypal InheritanceAdvanced
Reference vs ValueBeginner
Heap & StackAdvanced
Garbage CollectionAdvanced
Generators & IteratorsAdvanced
Event DelegationBeginner
Modules & ImportsIntermediate

React (11)

TopicDifficulty
Virtual DOMBeginner
ReconciliationIntermediate
Context PropagationIntermediate
Fiber TreeAdvanced
HooksIntermediate
Render CycleAdvanced
MemoizationIntermediate
SuspenseIntermediate
Server ComponentsAdvanced
Error BoundariesIntermediate
useEffect LifecycleBeginner

Some topics also have a sandbox mode where you can edit the code and watch the visualization respond. Event Loop is the reference implementation.

Project Structure

src/
app/ Next.js App Router routes
components/
layout/ Page shell, navigation
visualization-ui/ Shared primitives (NeonPanel, CodeBlock, TransportControls)
visualizations/ One folder per topic
content/theory/ Theory content, one file per topic
hooks/ useStepPlayback, useChangeFlash
lib/
topics.ts Topic registry, the single source of truth
metadata.ts SEO metadata factory
sandbox/ Sandbox mode infrastructure

Adding a topic touches several registries. CONTRIBUTING.md lists all of them.

Environment Variables

All are optional and have working defaults. Copy .env.example to .env.local to override.

VariableDefaultPurpose
NEXT_PUBLIC_SITE_URLhttps://visualizejs.comCanonical URLs, sitemap, Open Graph tags
NEXT_PUBLIC_CREATOR_LINKEDIN_URLMaintainer's profileCredit link in the footer
NEXT_PUBLIC_CREATOR_AVATAR_SRC/personal-image.pngAvatar in the footer

If you fork this, set the last two to your own.

Contributing

Read CONTRIBUTING.md first. New topics are welcome, and the authoring docs below walk through the process.

Documentation

DocCovers
docs/topic-authoring.mdJavaScript topic creation workflow
docs/react-topic-authoring.mdReact topic extensions
docs/component-reference.mdDesign system, components, hooks, animations
docs/theory-authoring.mdTheory content authoring
docs/sandbox-authoring.mdSandbox mode
docs/architecture.mdFrontend architecture rules
docs/seo.mdSEO implementation

Tech Stack

  • Next.js 16 App Router
  • React 19
  • TypeScript (strict)
  • Tailwind CSS v4
  • shadcn/ui primitives
  • CodeMirror 6 and Acorn for sandbox mode

License

MIT

About

Interactive step-by-step visualizations for JavaScript and React internals. 28 topics covering the event loop, closures, fiber, reconciliation, and more.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

VisualizeJS

Live siteCITopicsNext.jsReactTypeScriptLicense

Interactive visualizations for JavaScript and React concepts. Step through animations that show what the engine does at each stage, then read the theory behind it.

28 topics. Each one pairs a step-by-step visualization with theory sections covering how it works, common mistakes, and interview questions, all on a single page.

VisualizeJS homepage

Getting Started

npm install
npm run dev

Open http://localhost:3000. The app redirects to /javascript by default.

Node 20 or newer is required.

Scripts

CommandDescription
npm run devStart dev server (webpack mode)
npm run buildProduction build
npm run startServe the production build
npm run lintRun ESLint

Topics

Each topic lives at a single route, with the visualization at the top and the theory sections below it.

JavaScript (17)

TopicDifficulty
Event LoopIntermediate
HoistingBeginner
Execution ContextIntermediate
ClosuresIntermediate
PromisesIntermediate
this KeywordIntermediate
Scope ChainIntermediate
Type CoercionBeginner
DestructuringBeginner
Spread & RestBeginner
Prototypal InheritanceAdvanced
Reference vs ValueBeginner
Heap & StackAdvanced
Garbage CollectionAdvanced
Generators & IteratorsAdvanced
Event DelegationBeginner
Modules & ImportsIntermediate

React (11)

TopicDifficulty
Virtual DOMBeginner
ReconciliationIntermediate
Context PropagationIntermediate
Fiber TreeAdvanced
HooksIntermediate
Render CycleAdvanced
MemoizationIntermediate
SuspenseIntermediate
Server ComponentsAdvanced
Error BoundariesIntermediate
useEffect LifecycleBeginner

Some topics also have a sandbox mode where you can edit the code and watch the visualization respond. Event Loop is the reference implementation.

Project Structure

src/
app/ Next.js App Router routes
components/
layout/ Page shell, navigation
visualization-ui/ Shared primitives (NeonPanel, CodeBlock, TransportControls)
visualizations/ One folder per topic
content/theory/ Theory content, one file per topic
hooks/ useStepPlayback, useChangeFlash
lib/
topics.ts Topic registry, the single source of truth
metadata.ts SEO metadata factory
sandbox/ Sandbox mode infrastructure

Adding a topic touches several registries. CONTRIBUTING.md lists all of them.

Environment Variables

All are optional and have working defaults. Copy .env.example to .env.local to override.

VariableDefaultPurpose
NEXT_PUBLIC_SITE_URLhttps://visualizejs.comCanonical URLs, sitemap, Open Graph tags
NEXT_PUBLIC_CREATOR_LINKEDIN_URLMaintainer's profileCredit link in the footer
NEXT_PUBLIC_CREATOR_AVATAR_SRC/personal-image.pngAvatar in the footer

If you fork this, set the last two to your own.

Contributing

Read CONTRIBUTING.md first. New topics are welcome, and the authoring docs below walk through the process.

Documentation

DocCovers
docs/topic-authoring.mdJavaScript topic creation workflow
docs/react-topic-authoring.mdReact topic extensions
docs/component-reference.mdDesign system, components, hooks, animations
docs/theory-authoring.mdTheory content authoring
docs/sandbox-authoring.mdSandbox mode
docs/architecture.mdFrontend architecture rules
docs/seo.mdSEO implementation

Tech Stack

  • Next.js 16 App Router
  • React 19
  • TypeScript (strict)
  • Tailwind CSS v4
  • shadcn/ui primitives
  • CodeMirror 6 and Acorn for sandbox mode

License

MIT

About

Interactive step-by-step visualizations for JavaScript and React internals. 28 topics covering the event loop, closures, fiber, reconciliation, and more.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

VisualizeJS

Live siteCITopicsNext.jsReactTypeScriptLicense

Interactive visualizations for JavaScript and React concepts. Step through animations that show what the engine does at each stage, then read the theory behind it.

28 topics. Each one pairs a step-by-step visualization with theory sections covering how it works, common mistakes, and interview questions, all on a single page.

VisualizeJS homepage

Getting Started

npm install
npm run dev

Open http://localhost:3000. The app redirects to /javascript by default.

Node 20 or newer is required.

Scripts

CommandDescription
npm run devStart dev server (webpack mode)
npm run buildProduction build
npm run startServe the production build
npm run lintRun ESLint

Topics

Each topic lives at a single route, with the visualization at the top and the theory sections below it.

JavaScript (17)

TopicDifficulty
Event LoopIntermediate
HoistingBeginner
Execution ContextIntermediate
ClosuresIntermediate
PromisesIntermediate
this KeywordIntermediate
Scope ChainIntermediate
Type CoercionBeginner
DestructuringBeginner
Spread & RestBeginner
Prototypal InheritanceAdvanced
Reference vs ValueBeginner
Heap & StackAdvanced
Garbage CollectionAdvanced
Generators & IteratorsAdvanced
Event DelegationBeginner
Modules & ImportsIntermediate

React (11)

TopicDifficulty
Virtual DOMBeginner
ReconciliationIntermediate
Context PropagationIntermediate
Fiber TreeAdvanced
HooksIntermediate
Render CycleAdvanced
MemoizationIntermediate
SuspenseIntermediate
Server ComponentsAdvanced
Error BoundariesIntermediate
useEffect LifecycleBeginner

Some topics also have a sandbox mode where you can edit the code and watch the visualization respond. Event Loop is the reference implementation.

Project Structure

src/
app/ Next.js App Router routes
components/
layout/ Page shell, navigation
visualization-ui/ Shared primitives (NeonPanel, CodeBlock, TransportControls)
visualizations/ One folder per topic
content/theory/ Theory content, one file per topic
hooks/ useStepPlayback, useChangeFlash
lib/
topics.ts Topic registry, the single source of truth
metadata.ts SEO metadata factory
sandbox/ Sandbox mode infrastructure

Adding a topic touches several registries. CONTRIBUTING.md lists all of them.

Environment Variables

All are optional and have working defaults. Copy .env.example to .env.local to override.

VariableDefaultPurpose
NEXT_PUBLIC_SITE_URLhttps://visualizejs.comCanonical URLs, sitemap, Open Graph tags
NEXT_PUBLIC_CREATOR_LINKEDIN_URLMaintainer's profileCredit link in the footer
NEXT_PUBLIC_CREATOR_AVATAR_SRC/personal-image.pngAvatar in the footer

If you fork this, set the last two to your own.

Contributing

Read CONTRIBUTING.md first. New topics are welcome, and the authoring docs below walk through the process.

Documentation

DocCovers
docs/topic-authoring.mdJavaScript topic creation workflow
docs/react-topic-authoring.mdReact topic extensions
docs/component-reference.mdDesign system, components, hooks, animations
docs/theory-authoring.mdTheory content authoring
docs/sandbox-authoring.mdSandbox mode
docs/architecture.mdFrontend architecture rules
docs/seo.mdSEO implementation

Tech Stack

  • Next.js 16 App Router
  • React 19
  • TypeScript (strict)
  • Tailwind CSS v4
  • shadcn/ui primitives
  • CodeMirror 6 and Acorn for sandbox mode

License

MIT

About

Interactive step-by-step visualizations for JavaScript and React internals. 28 topics covering the event loop, closures, fiber, reconciliation, and more.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

VisualizeJS

Live siteCITopicsNext.jsReactTypeScriptLicense

Interactive visualizations for JavaScript and React concepts. Step through animations that show what the engine does at each stage, then read the theory behind it.

28 topics. Each one pairs a step-by-step visualization with theory sections covering how it works, common mistakes, and interview questions, all on a single page.

VisualizeJS homepage

Getting Started

npm install
npm run dev

Open http://localhost:3000. The app redirects to /javascript by default.

Node 20 or newer is required.

Scripts

CommandDescription
npm run devStart dev server (webpack mode)
npm run buildProduction build
npm run startServe the production build
npm run lintRun ESLint

Topics

Each topic lives at a single route, with the visualization at the top and the theory sections below it.

JavaScript (17)

TopicDifficulty
Event LoopIntermediate
HoistingBeginner
Execution ContextIntermediate
ClosuresIntermediate
PromisesIntermediate
this KeywordIntermediate
Scope ChainIntermediate
Type CoercionBeginner
DestructuringBeginner
Spread & RestBeginner
Prototypal InheritanceAdvanced
Reference vs ValueBeginner
Heap & StackAdvanced
Garbage CollectionAdvanced
Generators & IteratorsAdvanced
Event DelegationBeginner
Modules & ImportsIntermediate

React (11)

TopicDifficulty
Virtual DOMBeginner
ReconciliationIntermediate
Context PropagationIntermediate
Fiber TreeAdvanced
HooksIntermediate
Render CycleAdvanced
MemoizationIntermediate
SuspenseIntermediate
Server ComponentsAdvanced
Error BoundariesIntermediate
useEffect LifecycleBeginner

Some topics also have a sandbox mode where you can edit the code and watch the visualization respond. Event Loop is the reference implementation.

Project Structure

src/
app/ Next.js App Router routes
components/
layout/ Page shell, navigation
visualization-ui/ Shared primitives (NeonPanel, CodeBlock, TransportControls)
visualizations/ One folder per topic
content/theory/ Theory content, one file per topic
hooks/ useStepPlayback, useChangeFlash
lib/
topics.ts Topic registry, the single source of truth
metadata.ts SEO metadata factory
sandbox/ Sandbox mode infrastructure

Adding a topic touches several registries. CONTRIBUTING.md lists all of them.

Environment Variables

All are optional and have working defaults. Copy .env.example to .env.local to override.

VariableDefaultPurpose
NEXT_PUBLIC_SITE_URLhttps://visualizejs.comCanonical URLs, sitemap, Open Graph tags
NEXT_PUBLIC_CREATOR_LINKEDIN_URLMaintainer's profileCredit link in the footer
NEXT_PUBLIC_CREATOR_AVATAR_SRC/personal-image.pngAvatar in the footer

If you fork this, set the last two to your own.

Contributing

Read CONTRIBUTING.md first. New topics are welcome, and the authoring docs below walk through the process.

Documentation

DocCovers
docs/topic-authoring.mdJavaScript topic creation workflow
docs/react-topic-authoring.mdReact topic extensions
docs/component-reference.mdDesign system, components, hooks, animations
docs/theory-authoring.mdTheory content authoring
docs/sandbox-authoring.mdSandbox mode
docs/architecture.mdFrontend architecture rules
docs/seo.mdSEO implementation

Tech Stack

  • Next.js 16 App Router
  • React 19
  • TypeScript (strict)
  • Tailwind CSS v4
  • shadcn/ui primitives
  • CodeMirror 6 and Acorn for sandbox mode

License

MIT

About

Interactive step-by-step visualizations for JavaScript and React internals. 28 topics covering the event loop, closures, fiber, reconciliation, and more.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

VisualizeJS

Live siteCITopicsNext.jsReactTypeScriptLicense

Interactive visualizations for JavaScript and React concepts. Step through animations that show what the engine does at each stage, then read the theory behind it.

28 topics. Each one pairs a step-by-step visualization with theory sections covering how it works, common mistakes, and interview questions, all on a single page.

VisualizeJS homepage

Getting Started

npm install
npm run dev

Open http://localhost:3000. The app redirects to /javascript by default.

Node 20 or newer is required.

Scripts

CommandDescription
npm run devStart dev server (webpack mode)
npm run buildProduction build
npm run startServe the production build
npm run lintRun ESLint

Topics

Each topic lives at a single route, with the visualization at the top and the theory sections below it.

JavaScript (17)

TopicDifficulty
Event LoopIntermediate
HoistingBeginner
Execution ContextIntermediate
ClosuresIntermediate
PromisesIntermediate
this KeywordIntermediate
Scope ChainIntermediate
Type CoercionBeginner
DestructuringBeginner
Spread & RestBeginner
Prototypal InheritanceAdvanced
Reference vs ValueBeginner
Heap & StackAdvanced
Garbage CollectionAdvanced
Generators & IteratorsAdvanced
Event DelegationBeginner
Modules & ImportsIntermediate

React (11)

TopicDifficulty
Virtual DOMBeginner
ReconciliationIntermediate
Context PropagationIntermediate
Fiber TreeAdvanced
HooksIntermediate
Render CycleAdvanced
MemoizationIntermediate
SuspenseIntermediate
Server ComponentsAdvanced
Error BoundariesIntermediate
useEffect LifecycleBeginner

Some topics also have a sandbox mode where you can edit the code and watch the visualization respond. Event Loop is the reference implementation.

Project Structure

src/
app/ Next.js App Router routes
components/
layout/ Page shell, navigation
visualization-ui/ Shared primitives (NeonPanel, CodeBlock, TransportControls)
visualizations/ One folder per topic
content/theory/ Theory content, one file per topic
hooks/ useStepPlayback, useChangeFlash
lib/
topics.ts Topic registry, the single source of truth
metadata.ts SEO metadata factory
sandbox/ Sandbox mode infrastructure

Adding a topic touches several registries. CONTRIBUTING.md lists all of them.

Environment Variables

All are optional and have working defaults. Copy .env.example to .env.local to override.

VariableDefaultPurpose
NEXT_PUBLIC_SITE_URLhttps://visualizejs.comCanonical URLs, sitemap, Open Graph tags
NEXT_PUBLIC_CREATOR_LINKEDIN_URLMaintainer's profileCredit link in the footer
NEXT_PUBLIC_CREATOR_AVATAR_SRC/personal-image.pngAvatar in the footer

If you fork this, set the last two to your own.

Contributing

Read CONTRIBUTING.md first. New topics are welcome, and the authoring docs below walk through the process.

Documentation

DocCovers
docs/topic-authoring.mdJavaScript topic creation workflow
docs/react-topic-authoring.mdReact topic extensions
docs/component-reference.mdDesign system, components, hooks, animations
docs/theory-authoring.mdTheory content authoring
docs/sandbox-authoring.mdSandbox mode
docs/architecture.mdFrontend architecture rules
docs/seo.mdSEO implementation

Tech Stack

  • Next.js 16 App Router
  • React 19
  • TypeScript (strict)
  • Tailwind CSS v4
  • shadcn/ui primitives
  • CodeMirror 6 and Acorn for sandbox mode

License

MIT

About

Interactive step-by-step visualizations for JavaScript and React internals. 28 topics covering the event loop, closures, fiber, reconciliation, and more.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

VisualizeJS

Live siteCITopicsNext.jsReactTypeScriptLicense

Interactive visualizations for JavaScript and React concepts. Step through animations that show what the engine does at each stage, then read the theory behind it.

28 topics. Each one pairs a step-by-step visualization with theory sections covering how it works, common mistakes, and interview questions, all on a single page.

VisualizeJS homepage

Getting Started

npm install
npm run dev

Open http://localhost:3000. The app redirects to /javascript by default.

Node 20 or newer is required.

Scripts

CommandDescription
npm run devStart dev server (webpack mode)
npm run buildProduction build
npm run startServe the production build
npm run lintRun ESLint

Topics

Each topic lives at a single route, with the visualization at the top and the theory sections below it.

JavaScript (17)

TopicDifficulty
Event LoopIntermediate
HoistingBeginner
Execution ContextIntermediate
ClosuresIntermediate
PromisesIntermediate
this KeywordIntermediate
Scope ChainIntermediate
Type CoercionBeginner
DestructuringBeginner
Spread & RestBeginner
Prototypal InheritanceAdvanced
Reference vs ValueBeginner
Heap & StackAdvanced
Garbage CollectionAdvanced
Generators & IteratorsAdvanced
Event DelegationBeginner
Modules & ImportsIntermediate

React (11)

TopicDifficulty
Virtual DOMBeginner
ReconciliationIntermediate
Context PropagationIntermediate
Fiber TreeAdvanced
HooksIntermediate
Render CycleAdvanced
MemoizationIntermediate
SuspenseIntermediate
Server ComponentsAdvanced
Error BoundariesIntermediate
useEffect LifecycleBeginner

Some topics also have a sandbox mode where you can edit the code and watch the visualization respond. Event Loop is the reference implementation.

Project Structure

src/
app/ Next.js App Router routes
components/
layout/ Page shell, navigation
visualization-ui/ Shared primitives (NeonPanel, CodeBlock, TransportControls)
visualizations/ One folder per topic
content/theory/ Theory content, one file per topic
hooks/ useStepPlayback, useChangeFlash
lib/
topics.ts Topic registry, the single source of truth
metadata.ts SEO metadata factory
sandbox/ Sandbox mode infrastructure

Adding a topic touches several registries. CONTRIBUTING.md lists all of them.

Environment Variables

All are optional and have working defaults. Copy .env.example to .env.local to override.

VariableDefaultPurpose
NEXT_PUBLIC_SITE_URLhttps://visualizejs.comCanonical URLs, sitemap, Open Graph tags
NEXT_PUBLIC_CREATOR_LINKEDIN_URLMaintainer's profileCredit link in the footer
NEXT_PUBLIC_CREATOR_AVATAR_SRC/personal-image.pngAvatar in the footer

If you fork this, set the last two to your own.

Contributing

Read CONTRIBUTING.md first. New topics are welcome, and the authoring docs below walk through the process.

Documentation

DocCovers
docs/topic-authoring.mdJavaScript topic creation workflow
docs/react-topic-authoring.mdReact topic extensions
docs/component-reference.mdDesign system, components, hooks, animations
docs/theory-authoring.mdTheory content authoring
docs/sandbox-authoring.mdSandbox mode
docs/architecture.mdFrontend architecture rules
docs/seo.mdSEO implementation

Tech Stack

  • Next.js 16 App Router
  • React 19
  • TypeScript (strict)
  • Tailwind CSS v4
  • shadcn/ui primitives
  • CodeMirror 6 and Acorn for sandbox mode

License

MIT

About

Interactive step-by-step visualizations for JavaScript and React internals. 28 topics covering the event loop, closures, fiber, reconciliation, and more.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

VisualizeJS

Live siteCITopicsNext.jsReactTypeScriptLicense

Interactive visualizations for JavaScript and React concepts. Step through animations that show what the engine does at each stage, then read the theory behind it.

28 topics. Each one pairs a step-by-step visualization with theory sections covering how it works, common mistakes, and interview questions, all on a single page.

VisualizeJS homepage

Getting Started

npm install
npm run dev

Open http://localhost:3000. The app redirects to /javascript by default.

Node 20 or newer is required.

Scripts

CommandDescription
npm run devStart dev server (webpack mode)
npm run buildProduction build
npm run startServe the production build
npm run lintRun ESLint

Topics

Each topic lives at a single route, with the visualization at the top and the theory sections below it.

JavaScript (17)

TopicDifficulty
Event LoopIntermediate
HoistingBeginner
Execution ContextIntermediate
ClosuresIntermediate
PromisesIntermediate
this KeywordIntermediate
Scope ChainIntermediate
Type CoercionBeginner
DestructuringBeginner
Spread & RestBeginner
Prototypal InheritanceAdvanced
Reference vs ValueBeginner
Heap & StackAdvanced
Garbage CollectionAdvanced
Generators & IteratorsAdvanced
Event DelegationBeginner
Modules & ImportsIntermediate

React (11)

TopicDifficulty
Virtual DOMBeginner
ReconciliationIntermediate
Context PropagationIntermediate
Fiber TreeAdvanced
HooksIntermediate
Render CycleAdvanced
MemoizationIntermediate
SuspenseIntermediate
Server ComponentsAdvanced
Error BoundariesIntermediate
useEffect LifecycleBeginner

Some topics also have a sandbox mode where you can edit the code and watch the visualization respond. Event Loop is the reference implementation.

Project Structure

src/
app/ Next.js App Router routes
components/
layout/ Page shell, navigation
visualization-ui/ Shared primitives (NeonPanel, CodeBlock, TransportControls)
visualizations/ One folder per topic
content/theory/ Theory content, one file per topic
hooks/ useStepPlayback, useChangeFlash
lib/
topics.ts Topic registry, the single source of truth
metadata.ts SEO metadata factory
sandbox/ Sandbox mode infrastructure

Adding a topic touches several registries. CONTRIBUTING.md lists all of them.

Environment Variables

All are optional and have working defaults. Copy .env.example to .env.local to override.

VariableDefaultPurpose
NEXT_PUBLIC_SITE_URLhttps://visualizejs.comCanonical URLs, sitemap, Open Graph tags
NEXT_PUBLIC_CREATOR_LINKEDIN_URLMaintainer's profileCredit link in the footer
NEXT_PUBLIC_CREATOR_AVATAR_SRC/personal-image.pngAvatar in the footer

If you fork this, set the last two to your own.

Contributing

Read CONTRIBUTING.md first. New topics are welcome, and the authoring docs below walk through the process.

Documentation

DocCovers
docs/topic-authoring.mdJavaScript topic creation workflow
docs/react-topic-authoring.mdReact topic extensions
docs/component-reference.mdDesign system, components, hooks, animations
docs/theory-authoring.mdTheory content authoring
docs/sandbox-authoring.mdSandbox mode
docs/architecture.mdFrontend architecture rules
docs/seo.mdSEO implementation

Tech Stack

  • Next.js 16 App Router
  • React 19
  • TypeScript (strict)
  • Tailwind CSS v4
  • shadcn/ui primitives
  • CodeMirror 6 and Acorn for sandbox mode

License

MIT

About

Interactive step-by-step visualizations for JavaScript and React internals. 28 topics covering the event loop, closures, fiber, reconciliation, and more.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages