@monaco-editor/react

Drop the Monaco code editor into any React app without touching webpack, rollup, or bundler config files.

Library
npm
v4.7.0
4,756 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
52 /100 Fair
Development Activity 4
Maintenance 44
Community 60
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
81 /100 Excellent
Architecture 82
Code Quality 74
Innovation 80
Learning Curve 88

@monaco-editor/react wraps the Monaco editor, the same code-editing engine that powers VS Code, in a single React component so you can add a full-featured code editor to any app without ejecting create-react-app, hand-rolling webpack loaders, or configuring rollup/vite plugins to load Monaco’s worker files.

Under the hood it delegates loading to the companion @monaco-editor/loader package, which fetches Monaco from a CDN or local node_modules asynchronously and caches a single shared instance. The library exposes an Editor component for single-file editing, a DiffEditor for side-by-side diffs, and a useMonaco hook for consumers that need direct access to the underlying monaco API, all with first-class TypeScript types.

What You Get

  • An Editor component with controlled/uncontrolled value modes, syntax highlighting for dozens of languages, and live validation via onValidate
  • A DiffEditor component for side-by-side original/modified comparisons using the same Monaco diff engine as VS Code
  • A useMonaco hook and loader utility for reaching the raw monaco API outside the component tree (custom languages, themes, editor commands)
  • Automatic model creation and caching per file path, plus view-state (cursor, scroll, selection) preservation when switching between multiple open models
  • Full TypeScript typings for every prop, the monaco namespace, and editor/diff-editor instances, with no separate @types package to install

Common Use Cases

  • Embedding a code editor in an internal admin tool, low-code platform, or config editor without maintaining custom webpack/rollup loader rules
  • Building an in-browser IDE or coding playground (e.g. a course platform or API sandbox) with multi-file, multi-model editing
  • Adding a JSON/YAML/SQL config editor with real-time validation markers surfaced through onValidate
  • Showing before/after diffs of generated or user-edited code (migrations, AI code suggestions, PR previews) with DiffEditor

Under The Hood

Architecture — The Editor component (src/Editor/Editor.tsx) is a thin imperative wrapper: on mount it calls loader.init() from the sibling @monaco-editor/loader package to fetch and cache a single shared monaco instance, then a useEffect gated by isMonacoMounting/isEditorReady calls createEditor() to instantiate monaco.editor.create() inside a ref’d <div> rendered by MonacoContainer (which also owns the loading placeholder and width/height sizing). Models are created or reused per file path via getOrCreateModel in src/utils/index.ts, and a module-level viewStates Map keyed by path preserves cursor/scroll/selection state across model switches. DiffEditor (src/DiffEditor/DiffEditor.tsx) follows the identical mount/create/dispose lifecycle but instantiates monaco.editor.createDiffEditor() with original/modified models. A custom useUpdate hook (vs. plain useEffect) gates every prop-driven update (options, value, language, theme, line) so none fire until isEditorReady is true, avoiding races with the async Monaco load.

Tech Stack — TypeScript (93% of the codebase), built with tsup (esbuild-based) into dual ESM/CJS bundles with generated .d.ts files; tested with Vitest, @testing-library/react, and jsdom via snapshot tests; linted with ESLint 9’s flat config plus typescript-eslint; pre-commit hooks via Husky. The only runtime dependency is @monaco-editor/loader (same author), which does the actual asynchronous fetch of the monaco-editor package from a CDN or node_modules — monaco-editor, react, and react-dom are all peer dependencies, keeping the installed footprint small and letting consumers pin their own Monaco version.

Code Quality — Each of the four components (Editor, DiffEditor, MonacoContainer, Loading) has a co-located snapshot test, and the utility functions in src/utils/index.ts (getOrCreateModel, createModel, createModelUri) carry JSDoc comments explaining intent and parameters. Refs are used deliberately to avoid stale closures inside async callbacks (onMountRef, beforeMountRef, valueRef), and effect cleanup correctly disposes Monaco models, editor instances, and change-marker listeners. The tests themselves are shallow — mostly render-plus-snapshot rather than asserting on editor behavior — which is a real gap given how much imperative Monaco API surface (executeEdits, pushUndoStop, restoreViewState) the component manages directly.

API Design — The public surface is deliberately small: a default Editor export, a named DiffEditor, a useMonaco hook, and a re-exported loader. A working editor is a single JSX line (<Editor height="90vh" defaultLanguage="javascript" defaultValue="..." />), and prop names (defaultValue/value, defaultLanguage/language, defaultPath/path) deliberately mirror React’s own controlled/uncontrolled <input> conventions so the learning curve for React developers is near zero. Escape hatches (onMount, beforeMount) hand back the raw editor and monaco instances for anything the wrapper doesn’t cover, and the README documents every prop plus framework-specific notes (Next.js SSR, Electron) that address the most common integration friction points.

Used by 72 apps in this directory

TypeScript
92%
Other

OpenHands

AI Code Assistants · AI Development

91,695

The self-hosted developer control center for running AI coding agents — locally, in Docker, on VMs, or across cloud backends — with automation workflows for GitHub, Slack, and more.

View details
91
Repo Health
82
Technical
67
Dependency
Built with
TypeScript 92%
Updated 1 weeks ago
TypeScript
96%
MIT

Orca

AI Agents · AI Code Assistants

104,104

An open-source Agent Development Environment that orchestrates fleets of parallel AI coding agents — Claude Code, Codex, Gemini and more — each running in its own isolated git worktree.

View details
84
Repo Health
85
Technical
74
Dependency
Built with
TypeScript 96%
Updated 6 days ago
TypeScript
58%
MIT

pad.ws

Collaboration · Design Tools

4,206

A browser-based whiteboard that doubles as a full development environment, letting you draw and code in the same canvas.

View details
37
Repo Health
61
Technical
78
Dependency
Built with
TypeScript 58%
Python 31%
SCSS 10%
Updated 1 years ago
TypeScript
99%
AGPL 3.0

Pangolin

Networking

23,187

An open-source, identity-based zero-trust remote access platform built on WireGuard — a self-hostable alternative to Cloudflare Tunnel and Twingate with SSO, OIDC, and tunneled reverse proxying.

View details
87
Repo Health
68
Technical
68
Dependency
Built with
TypeScript 99%
Updated 1 weeks ago
TypeScript
96%
MIT

Payload CMS

Blogging · CMS · Developer Tools

45,458

The open-source, Next.js-native headless CMS that lives inside your /app folder and gives you a full TypeScript backend instantly.

View details
92
Repo Health
88
Technical
65
Dependency
Built with
TypeScript 96%
Updated 6 days ago
Go
82%
AGPL 3.0

PeerDB

Data Engineering · Databases

3,309

Postgres-native ETL that streams change data capture in real time to Snowflake, BigQuery, ClickHouse, S3, and Kafka — up to 10x faster than general-purpose pipelines, managed through a familiar Postgres SQL interface.

View details
89
Repo Health
76
Technical
66
Dependency
Built with
Go 82%
TypeScript 12%
Updated 6 days ago
Rust
76%
GPL 3.0

Pipedash

Developer Tools · Devops · Monitoring

1,103

One dashboard to monitor, trigger, and cancel CI/CD pipelines across GitHub, GitLab, Jenkins, Tekton, Buildkite, ArgoCD, and Bitbucket — desktop, Docker, or iOS.

View details
80
Repo Health
64
Technical
73
Dependency
Built with
Rust 76%
TypeScript 24%
Updated 6 days ago
Python
55%
Other

PostHog

Ab Testing Experimentation · Analytics · Developer Tools

40,397

The all-in-one open source product platform combining analytics, session replay, feature flags, error tracking, AI observability, and a built-in data warehouse in a single self-hostable stack.

View details
92
Repo Health
80
Technical
65
Dependency
Built with
Python 55%
TypeScript 36%
Updated 6 days ago
TypeScript
98%
MIT

Promptfoo

AI Development

26,358

An open-source CLI and library for evaluating and red-teaming LLM applications — replace trial-and-error prompt engineering with systematic evals, vulnerability scanning, and CI/CD integration.

View details
90
Repo Health
73
Technical
67
Dependency
Built with
TypeScript 98%
Updated 6 days ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers