@codemirror/autocomplete

Autocompletion engine for the CodeMirror 6 code editor, with fuzzy matching, snippets, and bracket closing.

Library
npm
v6.20.4
83 stars
MIT License

Repository Health

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

Technical Analysis

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

@codemirror/autocomplete is the official autocompletion package for CodeMirror 6, the in-browser code editor toolkit built by Marijn Haverbeke. It supplies the state, view, and tooltip logic needed to show a completion popup as users type, merging one or more registered completion sources into a single ranked list with fuzzy matching, sectioning, and configurable keybindings.

Beyond raw completion, the package ships snippet support (tab-through placeholder fields), automatic bracket and quote closing, and a small set of composable helpers (ifIn, ifNotIn, completeFromList) for scoping completion sources to specific syntax contexts. Language packages across the CodeMirror ecosystem — for JavaScript, Python, SQL, CSS, and more — depend on it to provide language-aware suggestions.

What You Get

  • An autocompletion() extension with configurable activation, keymap, and tooltip rendering
  • Fuzzy and strict matching engines that score and rank completions by relevance
  • A snippet system with tab-stop navigation and field editing
  • An automatic bracket and quote closing extension
  • Composable source helpers — completeFromList, ifIn, ifNotIn, completeAnyWord

Common Use Cases

  • Wiring language-aware code completion into a CodeMirror-based IDE or code playground
  • Providing word-based completion for plain-text or markdown editors
  • Building snippet-driven scaffolding for inserting boilerplate code
  • Adding bracket and quote auto-closing to any CodeMirror 6 editor instance

Under The Hood

Architecture — The package layers cleanly: state.ts owns the completionState StateField that tracks ActiveSource objects (one per completion source) through Inactive/Pending/Result transitions and rebuilds a CompletionDialog whenever a transaction requires it; tooltip.ts renders the popup via CodeMirror’s showTooltip facet; completion.ts defines the public Completion/CompletionContext/CompletionResult contracts and helpers like completeFromList, ifIn, ifNotIn, and insertCompletionText; filter.ts implements the FuzzyMatcher/StrictMatcher scoring engines consumed by state.ts’s sortOptions; snippet.ts and closebrackets.ts are self-contained sibling extensions composed into the top-level autocompletion() extension array in index.ts. Everything is threaded through CodeMirror’s Facet/StateField/StateEffect primitives rather than an autocomplete-specific event bus, so the package is really a set of pure reducers over EditorState/Transaction objects.

Tech Stack — Pure TypeScript (100% by GitHub’s language breakdown), compiled via the shared @codemirror/buildhelper devDependency into ESM (dist/index.js) and CJS (dist/index.cjs) builds with bundled .d.ts types. Runtime dependencies are exclusively sibling CodeMirror packages — @codemirror/state, @codemirror/view, @codemirror/language — plus @lezer/common for syntax-tree access, keeping the dependency graph entirely first-party with zero third-party runtime deps.

Code Quality — test/webtest-autocomplete.ts defines a purpose-built Runner class that spins up a real EditorView per test case and asserts against live completion state rather than mocking — a heavier-weight but higher-fidelity style of testing for editor behavior. Source files are consistently documented with /// doc comments consumed by CodeMirror’s own doc-generation tooling, naming is terse but consistent with the rest of the CodeMirror 6 codebase, and the code favors immutable value classes (ActiveSource, CompletionDialog, Option) updated via reducer-style .map()/.update() methods over mutation. No explicit try/catch is visible in the reviewed files; failures in async completion sources are expected to surface as rejected promises rather than being caught internally.

API Design — The public surface is small and deliberately composable: one extension factory (autocompletion(config)), a handful of pure helper functions (completeFromList, ifIn/ifNotIn, completeAnyWord) for building CompletionSource functions, and read-only accessors (completionStatus, currentCompletions, selectedCompletion) for host applications to introspect state. Wiring a working autocomplete requires only the autocompletion() extension plus a source via language data or the override config option. Every exported symbol carries a doc comment with cross-links, and the CompletionSource/CompletionResult contract cleanly separates synchronous simple cases (a fixed option list) from async/incremental ones (validFor, update, map) without forcing all consumers to deal with that complexity upfront.

Used by 54 apps in this directory

TypeScript
82%
MIT

evidence

Analytics · Data Engineering

7,052

Turn SQL queries and markdown files into polished, interactive data apps and business intelligence reports — no drag-and-drop, no GUI, just code.

View details
91
Repo Health
79
Technical
64
Dependency
Built with
TypeScript 82%
Svelte 17%
Updated 1 weeks ago
Python
66%
MIT

Flowfile

Data Engineering

398

Visual ETL that compiles to Polars — build pipelines on a canvas, export as standalone Python, and run anywhere without platform lock-in.

View details
83
Repo Health
81
Technical
66
Dependency
Built with
Python 66%
TypeScript 17%
Vue 16%
Updated 1 weeks ago
TypeScript
58%
AGPL 3.0

Frappe Books

Invoicing Finance

5,003

Offline desktop accounting with double-entry, POS, and custom invoice templates

View details
88
Repo Health
77
Technical
72
Dependency
Built with
TypeScript 58%
Vue 39%
Updated 4 weeks ago
TypeScript
63%
MIT

Ghost

Blogging · CMS

55,598

Open source headless Node.js CMS for professional publishing, paid memberships, and newsletters with a fully owned audience.

View details
96
Repo Health
85
Technical
64
Dependency
Built with
TypeScript 63%
JavaScript 35%
Updated 1 weeks ago
Go
83%
MIT

Gitea

Developer Tools · Devops · Project Management

58,668

Self-hosted DevOps in a single Go binary — Git hosting, GitHub Actions-compatible CI/CD, and 30+ package registries without any SaaS dependency.

View details
93
Repo Health
79
Technical
64
Dependency
Built with
Go 83%
Updated 6 days ago
TypeScript
47%
AGPL 3.0

Grafana

Analytics · Monitoring

77,469

The open-source observability platform that unifies metrics, logs, and traces from any data source into dynamic, queryable dashboards.

View details
95
Repo Health
91
Technical
63
Dependency
Built with
TypeScript 47%
Go 47%
Updated 6 days ago
TypeScript
71%
Other

highlight.io

Analytics · Developer Tools · Monitoring

9,384

Open-source full-stack monitoring that unifies session replay, error tracking, logging, and distributed tracing so you can stop context-switching between tools.

View details
76
Repo Health
78
Technical
65
Dependency
Built with
TypeScript 71%
Go 16%
Updated 1 weeks ago
TypeScript
68%
MIT

Hoppscotch

Developer Tools

80,676

A lightweight, offline-capable API development ecosystem for testing HTTP, GraphQL, WebSocket, MQTT, and SSE endpoints across web, desktop, and CLI.

View details
91
Repo Health
83
Technical
62
Dependency
Built with
TypeScript 68%
Vue 24%
Updated 1 weeks ago
TypeScript
97%
MIT

HyperDX

Analytics · Developer Tools · Monitoring

9,963

Open source observability platform that unifies logs, traces, metrics, and session replays on ClickHouse — now the core of ClickStack.

View details
89
Repo Health
83
Technical
64
Dependency
Built with
TypeScript 97%
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