@codemirror/legacy-modes
A collection of over 100 ported legacy stream-parser language modes for CodeMirror 6
Repository Health
Technical Analysis
@codemirror/legacy-modes packages up the older, stream-based language modes originally written for CodeMirror 5 so they can be used with CodeMirror 6’s newer, more structured language system. Each mode is shipped as its own file under mode/<name>.js and exports a StreamParser that plugs into @codemirror/language’s StreamLanguage.define(), giving CodeMirror 6 editors syntax highlighting for languages that don’t yet have a dedicated Lezer grammar.
Because CodeMirror 6’s core distribution only ships first-class Lezer-based grammars for a handful of mainstream languages, this package fills the long tail: everything from APL and COBOL to Lua, Toml, and dozens of other syntaxes are available as drop-in stream parsers with no separate installation beyond this one package.
What You Get
- Over 100 individual language mode files, each importable independently as
@codemirror/legacy-modes/mode/<name> - Each mode exported as a
StreamParsercompatible with@codemirror/language’sStreamLanguage.define() - Coverage of legacy and niche languages (APL, COBOL, ASN.1, Asterisk dialplan, and many more) with no dedicated Lezer grammar in CodeMirror 6 core
- Both ESM and CommonJS builds via dual
import/requireexport conditions - TypeScript type declarations (
.d.ts) shipped alongside every mode
Common Use Cases
- Adding syntax highlighting to a CodeMirror 6 editor for a language that only has a CodeMirror 5-era mode, not a modern Lezer grammar
- Building general-purpose code editors or admin tools that need broad, long-tail language coverage rather than a curated few languages
- Migrating a CodeMirror 5 integration to CodeMirror 6 while preserving highlighting for less common languages already relied upon
- Embedding config-file or infrastructure-as-code editors (e.g. for formats like TOML, Dockerfile, or Nginx config) where a Lezer grammar doesn’t yet exist
Under The Hood
Architecture: The package has no shared runtime logic of its own beyond a thin per-mode wrapper — each mode/<name>.js file defines a CodeMirror 5-style stream parser (a state machine with a token() function reading one token at a time from a StringStream) and exposes it as a StreamParser object matching the shape @codemirror/language’s StreamLanguage.define() expects. There’s deliberately no central registry or barrel export; consumers import exactly the modes they need (@codemirror/legacy-modes/mode/lua), keeping bundle size proportional to usage. Tech Stack: Plain JavaScript (ESM, type: module) built with Rollup into dual ESM/CJS outputs, TypeScript used only for authoring .d.ts declaration files, with @codemirror/language as the sole runtime dependency providing the StreamParser interface being implemented. Code Quality: Tests run through cm-runtests, a shared CodeMirror test runner rather than an in-repo suite, so correctness is validated against upstream CodeMirror project conventions; individual mode files vary in sophistication (some are compact regex-driven tokenizers, others like clike.js implement more elaborate configurable state machines shared across several C-family languages) but follow a consistent token-function convention throughout, a legacy of their shared CodeMirror 5 origin. API Design: The per-language, per-file export convention is the package’s defining ergonomic choice — there is exactly one way to consume any given mode (import {lua} from "@codemirror/legacy-modes/mode/lua" then StreamLanguage.define(lua)), which keeps the API surface predictable across all 100+ modes at the cost of needing to know the exact file/export name for each language in advance.
Used by 21 apps in this directory
1Panel
Devops · Hosting Control Panel · Monitoring
The only open-source VPS control panel with native AI agent runtime — deploy websites, Docker stacks, and local LLMs from one web interface.
authentik
Authentication · Security
The self-hosted Identity Provider that replaces Okta, Auth0, and Entra ID with a unified SSO platform supporting SAML, OAuth2/OIDC, LDAP, RADIUS, and WebAuthn.
Dokploy
Devops · Hosting Control Panel · Security
Self-hosted PaaS that deploys apps and databases on your own VPS using Docker, Traefik, and multi-build-system orchestration
GitButler
Developer Tools · Devops · AI Development
Git, but better — a modern version control client with stacked branches, parallel workflows, unlimited undo, and first-class support for AI-powered development.
Gitea
Devops · Developer Tools · Project Management
Self-hosted DevOps in a single Go binary — Git hosting, GitHub Actions-compatible CI/CD, and 30+ package registries without any SaaS dependency.
Hook0
Devops
Open-source Webhooks-as-a-Service: deliver events to your users with auto-retry, signed payloads, and a real-time subscriber dashboard — all without building the infrastructure yourself.
hoop
Security · Monitoring
A wire-protocol gateway that enforces data masking, command blocking, approval workflows, and full session recording for engineers and AI agents accessing production infrastructure.
Hoppscotch
Developer Tools
A lightweight, offline-capable API development ecosystem for testing HTTP, GraphQL, WebSocket, MQTT, and SSE endpoints across web, desktop, and CLI.
Joplin
Note Taking
The privacy-first, open-source note-taking app with end-to-end encrypted sync, AI assistance, and a powerful plugin ecosystem across every platform.