@codemirror/legacy-modes

A collection of over 100 ported legacy stream-parser language modes for CodeMirror 6

Library
npm
v6.5.5
107 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
39 /100 Needs Attention
Development Activity 4
Maintenance 0
Community 72
Maturity 60
Momentum 20

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
65 /100 Good
Architecture 70
Code Quality 62
Innovation 55
Learning Curve 72

@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 StreamParser compatible with @codemirror/language’s StreamLanguage.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/require export 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 23 apps in this directory

Python
49%
Other

Arize Phoenix

Analytics · Devops · Monitoring

11,976

Open-source AI observability platform for tracing, evaluating, and debugging LLM applications with built-in intelligence and MCP support.

View details
92
Repo Health
88
Technical
67
Dependency
Built with
Python 49%
TypeScript 43%
Updated 6 days ago
TypeScript
51%
ZLIB

Portainer

Devops

38,707

A lightweight, open-source web UI that puts Docker, Kubernetes, and Podman management within reach of any team—no CLI expertise required.

View details
93
Repo Health
79
Technical
65
Dependency
Built with
TypeScript 51%
Go 38%
Updated 1 weeks ago
Python
100%
Other

Sourcebot

AI Code Assistants · Developer Tools · Search

4,005

A self-hosted, AI-powered code search engine that indexes every repo across GitHub, GitLab, Bitbucket, Gitea, Gerrit, and Azure DevOps, so both engineers and coding agents can search, browse, and ask questions about your codebase from one place.

View details
86
Repo Health
83
Technical
61
Dependency
Built with
Python 100%
Updated 1 weeks ago
TypeScript
85%
Apache 2.0

superset

AI Code Assistants · AI Development

15,503

Orchestrate an army of AI coding agents—Claude Code, Codex, Gemini CLI, and more—running simultaneously in isolated git worktrees from a single Electron desktop app.

View details
86
Repo Health
80
Technical
64
Dependency
Built with
TypeScript 85%
Updated 6 days ago
Rust
79%
Apache 2.0

TensorZero

Ab Testing Experimentation · AI Development · Monitoring

11,708

TensorZero unifies the LLM gateway, observability, evaluation, optimization, and experimentation stack behind a single OpenAI-compatible API, built in Rust for sub-millisecond p99 latency.

View details
53
Repo Health
87
Technical
68
Dependency
Built with
Rust 79%
TypeScript 15%
Updated 4 months 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