Skip to content
CAI
Software that uses CAICheck a score

micro-editor/micro

61.1

Adequate · 24 September 2026

19.6k

lines of production code

Go

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a terminal-based text editor, specifically the Micro editor, rewritten in Go to replace its previous D-based implementation. It provides core editing capabilities including syntax highlighting, soft-wrapping, and a modular plugin architecture powered by Lua. The application supports advanced features such as split-pane layouts, external clipboard integration, and background shell execution for plugins, while managing configuration and runtime assets via the XDG Base Directory specification.

How it got here

2016 — Go migration and feature expansion

10 changes.

The project underwent a major architectural shift from D to Go, replacing the legacy build system and core text editing components with a standardized module structure and embedded runtime assets. This period also introduced significant new features, including an extensible linter, autoclose functionality, filetype-specific options, and expanded syntax highlighting and color scheme support.

2017–2019 — Micro v2 architecture and plugin system

15 changes.

This period focused on the foundational rewrite for Micro v2, introducing a new action system, configuration layer, and split-pane layout engine. It established a robust plugin ecosystem through Lua integration, a dedicated shell subsystem, and a new plugin manager, while upgrading the terminal backend to tcell v2 for advanced rendering and Unicode support.

2020–2021 — status, diff, and clipboard enhancements

4 changes.

This period focused on expanding editor functionality through new status and diff plugins, which provide Git integration and automatic inline difference viewing. It also involved a significant architectural rewrite of the clipboard system to support multiple backends and improved Debian packaging to integrate with system alternatives.

Features

Add man page and desktop file for micro

The packaging assets now include a man page (micro.1) and a desktop entry file (micro.desktop). The man page documents command-line options such as -exec, regex search, and plugin management, while the desktop file enables integration with desktop environments by defining the application as a text editor with appropriate MIME types and categories.

assets/packaging · high confidence

Add support for Literate Micro (.lit) files

The runtime now includes a new plugin that enables syntax highlighting for Literate Micro files (\.lit\). When a \.lit\ file is opened, the plugin automatically detects the embedded code type specified in the file header and applies the appropriate syntax rules, allowing for correct highlighting of code blocks within the literate document.

runtime/plugins/literate · high confidence

Add syntax highlighting for PowerShell

Users can now get syntax highlighting for PowerShell scripts (files with .ps1, .psm1, or .psd1 extensions). The new definition covers PowerShell keywords, cmdlets, variables, strings, comments, and embedded C\# code.

runtime/syntax · high confidence

Autoclose plugin for brackets and quotes

The new autoclose plugin automatically handles closing pairs of brackets, quotes, and backticks (such as (), {}, \[\], '', ", and \\) as you type. It intelligently skips closing characters if the cursor is already positioned after them, inserts newlines and indentation when pressing Enter inside empty brackets, and removes both the opening and closing characters when backspacing between them.

runtime/plugins/autoclose · high confidence

Automatic diff gutter support for tracked files

The new diff plugin automatically compares the current buffer against the version stored in Git HEAD when a file is opened, provided the 'diffgutter' setting is enabled and the file is tracked. This allows users to view inline differences directly in the editor without manual intervention, falling back to the current buffer content if the file is not yet tracked or the Git command fails.

runtime/plugins/diff · high confidence

Debian package integrates micro with the system alternatives system

The Debian package now registers the micro editor as a selectable alternative for the system editor via update-alternatives. This allows users to choose micro as their default editor through standard system configuration tools, with proper installation and removal hooks managed by the new postinst and prerm scripts.

assets/packaging/deb · high confidence

Expanded and standardized color scheme library

The editor now ships with a significantly larger and more consistent set of built-in color schemes, including Atom Dark, Bubblegum, Darcula, Dracula, Gruvbox, Material, Monokai, One Dark, Railscast, Solarized, Twilight, and Zenburn, alongside several Duke variants. These new and updated schemes provide a wider range of aesthetic choices for users. Additionally, the default theme has been renamed from 'default' to 'simple' to better reflect its minimal nature, and the 'default' scheme file now simply includes 'monokai', effectively making Monokai the new default visual style.

runtime/colorschemes · high confidence

Improved Unicode handling and new utility functions

The internal utility package now provides robust support for combining Unicode characters (such as accents) by introducing \DecodeCharacter\ and \CharacterCount\ functions that treat base characters and their combining marks as single units, ensuring correct text slicing and counting. Additionally, new helper functions \LuaRuneAt\, \LuaGetLeadingWhitespace\, and \LuaIsWordChar\ have been added to support Lua plugins, while \GetMemStats\ and timing utilities (\Tic\/\Toc\) offer basic profiling capabilities.

internal/util · high confidence

Initial Lua integration with standard library bindings

This change introduces the core Lua engine (\internal/lua/lua.go\) to the application, enabling plugin support by exposing a wide range of Go standard library packages (such as \fmt\, \io\, \net\, \os\, \time\, and \http\) to the Lua environment. Users can now write Lua scripts that interact with these system capabilities, forming the foundation for the plugin system described in the commit messages.

internal/lua · high confidence

Introduce comment plugin with multi-language support

Adds a new comment plugin that provides toggle, comment, and uncomment functionality for lines and selections. The plugin includes a built-in mapping of comment syntaxes for over 50 file types (including OCaml, Haskell, TypeScript, Elm, and JSON) and automatically updates the comment style when the file type changes.

runtime/plugins/comment · high confidence

Introduce extensible linter plugin with built-in support for multiple languages

The editor now includes a new linter plugin that provides automatic and manual linting for a wide range of programming languages, including C, C++, D, Go, Rust, Haskell, Java, JavaScript, Lua, Nim, Objective-C, Python, Shell, Swift, YAML, and Nix. This feature allows users to receive real-time feedback on syntax and style errors via gutter messages and the command palette, with support for custom linter definitions and OS-specific configurations.

runtime/plugins/linter · high confidence

Introduce ftoptions plugin for filetype-specific tab handling

A new ftoptions plugin has been added to automatically manage tab-to-space conversion based on file type. For Go and Makefile buffers, the plugin disables automatic conversion to tabs, while for Fish, Python (2/3), YAML, and Nim buffers, it enables conversion to spaces.

runtime/plugins/ftoptions · high confidence

Micro v2 configuration system with plugin manager and tcell v2 support

The internal configuration layer has been rewritten for Micro v2, introducing a new plugin manager that allows users to install, enable, and disable plugins via settings. The terminal rendering backend has been updated to use gdamore/tcell v2, enabling support for advanced colorscheme attributes like bold, blink, dim, italic, reverse, strikethrough, and underline. The configuration directory now follows the XDG Base Directory spec (using $MICRO\_CONFIG\_HOME or $XDG\_CONFIG\_HOME/micro), and the settings system now supports per-buffer options, glob-based file maps, and a new autosave mechanism that rearms on file changes. Runtime files (syntaxes, colorschemes) are now loaded from embedded assets with user-defined files taking precedence.

internal/config · high confidence

New -clean command to remove unused settings and invalid buffer files

The editor now includes a \-clean\ command-line flag that allows users to automatically clean their configuration directory. This feature resets the \settings.json\ file to defaults, removes any configuration options that are no longer recognized by the editor or its plugins, and deletes corrupted or invalid buffer history files stored in the \buffers\ directory. It also handles the migration of the legacy \plugins\ directory by removing it, as plugins are now expected to be stored in the \plug\ directory.

cmd · high confidence

New autocomplete and backup systems

The buffer package now includes a new autocomplete system (autocomplete.go) that provides file and buffer-based completion suggestions, and a new backup system (backup.go) that handles periodic backups, recovery prompts on crash detection, and safe backup file management.

internal/buffer · high confidence

New build tooling for versioning, cross-compilation, and release automation

The tools directory now includes a comprehensive suite of scripts and Go utilities to streamline the build and release process. New Go programs (build-version.go, build-date.go, info-plist.go) handle semantic versioning, build dates (including reproducible builds via SOURCE\_DATE\_EPOCH), and macOS Info.plist generation. Shell scripts (cross-compile.sh, compile-linux.sh, release.sh, pre-release.sh, nightly-release.sh) automate cross-compilation for multiple platforms (Linux, macOS, Windows, Solaris, etc.), package creation (deb, tar.gz, zip), and GitHub release management. Additional utilities (remove-nightly-assets.go, testgen.go, vendor-src.sh) support nightly release maintenance, test generation, and source vendoring.

tools · high confidence

New shell job and terminal subsystem for plugins

The internal/shell package has been replaced with a new implementation that introduces asynchronous background job execution and a dedicated terminal emulator for plugins. Users can now run shell commands in the background via the new Job API, with stdout, stderr, and exit callbacks delivered to the main thread via a channel, allowing plugins to react to process output without blocking the editor. Additionally, the new terminal subsystem provides a VT-based terminal view with selection support and callback-driven output handling, enabling plugins to spawn interactive shells and capture their output reliably.

internal/shell · high confidence

New status plugin with Git, paste, and buffer info functions

A new status plugin has been added to the runtime, providing several functions that can be used in the \statusformatl\ and \statusformatr\ options to customize the status line. These functions include \status.branch\ and \status.hash\ to display the current Git branch and commit hash, \status.paste\ to indicate if aggressive pasting is enabled, and \status.lines\, \status.vcol\, \status.bytes\, and \status.size\ to show buffer line count, visual column, byte count, and human-readable file size respectively.

runtime/plugins/status · high confidence

Removals

Removal of legacy text editor core components

The source files for the application's core text editing engine have been deleted, including the buffer management (src/buffer.d), cursor positioning (src/cursor.d), terminal view rendering (src/view.d), status line display (src/statusline.d), clipboard integration (src/clipboard.d), and the main entry point (src/main.d). This change removes the existing implementation that handled text manipulation, terminal UI updates via termbox, and basic editing commands, likely as part of a larger rewrite or migration to a different underlying technology.

src · high confidence

Architecture

Project restructure to Go modules and standardized build configuration

The project has been reorganized to use Go modules (go.mod) and a new Makefile, replacing the previous D-based build system (dub.sdl) and legacy build scripts. This change introduces standardized build targets for building, installing, and testing, enforces LF line endings for Go files via .gitattributes, and configures .editorconfig for consistent indentation. The repository now includes explicit LICENSE and LICENSE-THIRD-PARTY files, updates .gitignore to reflect the new structure, and provides a snapcraft.yaml for Snap package builds.

(repo-wide) · high confidence

Behavioural changes

Introduce soft-wrap and visual-location abstractions for the display layer

The display subsystem now supports soft-wrapped lines and word-wrapping through new \SLoc\ and \VLoc\ types that track visual row and column positions separately from buffer locations. \BufWindow\ uses these abstractions to correctly calculate gutter offsets, handle horizontal scrolling, and update cursor positions when \softwrap\ or \wordwrap\ settings change. The \InfoWindow\ and \StatusLine\ components have been refactored to use these visual coordinates, ensuring that the info bar, status line, and tab bar render correctly alongside wrapped content and respect new color groups like \statusline.suggestions\ and \tabbar.active\.

internal/display · high confidence

Micro v2 action system and keybinding infrastructure

The \internal/action\ package has been restructured for Micro v2, introducing a new \KeyTree\ data structure to manage keybindings and support for key sequences (e.g., \\<Ctrl-x\>\<Ctrl-p\>\). This change includes a complete rewrite of the default keybindings for macOS and other platforms, the addition of new commands such as \textfilter\, \jump\, and \plugin\, and the implementation of a \Suspend\ action that is now platform-specific (available on POSIX systems). The refactoring also integrates \micro-editor/tcell/v2\ for event handling and adds support for raw escape sequence bindings.

internal/action · high confidence

New gutter messages and enhanced command history management

The info bar now supports gutter messages (info, warning, error) displayed on the side of the editor, allowing for clearer visual distinction of status updates. Additionally, command history handling has been improved with duplicate entry prevention, safe file writing for persistence, and new search capabilities (up/down) that filter history based on the current input prefix, enhancing usability for plugin developers and power users.

internal/info · high confidence

New modular clipboard system with external, terminal, and internal backends

The internal/clipboard package has been rewritten to support three distinct clipboard access methods: External (using the zyedidia/clipper library for system tools like xclip or pbcopy), Terminal (using OSC 52 sequences via micro-editor/tcell for terminal-integrated paste/copy), and Internal (using an in-memory buffer). This change introduces a new architecture where clipboard operations are routed based on the selected method, including specific support for multi-cursor clipboard operations and primary/secondary register handling on Linux.

internal/clipboard · high confidence

New split-pane layout engine for terminal views

The application now uses a dedicated split-pane tree structure (internal/views/splits.go) to manage terminal window layouts. This change introduces a hierarchical node system that supports vertical and horizontal splits, proportional scaling, and resizing logic. It specifically addresses previous stability issues by handling root node cases during splitting and unsplitting, preventing crashes when resizing split panes or manipulating the root view. A corresponding test suite validates the basic split and resize operations.

internal/views · high confidence

New syntax highlighting engine with improved Unicode and file detection

The \pkg/highlight\ package introduces a new syntax highlighting implementation that improves file detection by supporting signature-based checks alongside filename and header regexes. The engine now correctly handles Unicode combining marks, ensuring accurate character counting and highlighting for complex scripts. It also adds support for syntax file includes and makes nested highlighting rules optional, while fixing several crashes related to empty syntax definitions and invalid regular expressions.

pkg · high confidence

Runtime assets are now embedded in the binary with XDG config support

The runtime directory's colorschemes, syntax files, help, and plugins are now embedded directly into the Go binary using go:embed, ensuring portability without requiring external file paths. The application now uses the XDG\_CONFIG\_HOME environment variable to determine the user configuration directory (defaulting to \~/.config/micro), allowing users to override embedded assets by placing custom files in the appropriate subdirectories. A new runtime module provides functions to access these embedded assets, and tests verify that syntax files like go.yaml are correctly accessible.

runtime · high confidence

Terminal screen management and fake cursor support

The internal screen package now supports a configurable 'fakecursor' option to render the cursor by inverting cell styles rather than moving the terminal cursor, which prevents flashing on slow terminals like the Windows console. It also introduces a 'truecolor' configuration option to explicitly enable, disable, or auto-detect true color support via tcell. Additionally, new utility functions (TermMessage, TermPrompt, TermError) allow safe interaction with the user via standard input when the graphical screen is temporarily shut down, and the screen initialization now handles non-displayable characters by replacing them with the Unicode replacement character.

internal/screen · high confidence

Dependencies

Migrate to Go modules and update dependencies

The project has switched to Go modules (go.mod), setting the minimum supported Go version to 1.19 and updating the module path to github.com/micro-editor/micro/v2. Key dependency updates include upgrading tcell to v2.0.13, gopher-lua to v1.1.1, and go-runewidth to v0.0.16, while also replacing the shellquote library with a maintained fork and switching the terminal library to the micro-editor organization.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 62 → 61 (-0.4)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 60 → 76 (+15.9)
  • Architecture 100 → 92 (-8.2)
  • Maturity 57 → 57 (-0.6)
  • Readiness 67 → 59 (-7.9)
  • Security 63 → 62 (-1.5)

Resolved (45)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (10 lines × 2) (internal/action/actions.go)
  • Duplicated block (10 lines × 2) (internal/action/actions.go)
  • Duplicated block (10 lines × 2) (internal/action/bufpane.go)
  • Duplicated block (10 lines × 4) (internal/action/infocomplete.go)
  • Duplicated block (11 lines × 2) (internal/action/command.go)
  • Duplicated block (11 lines × 2) (internal/display/statusline.go)
  • Duplicated block (12 lines × 2) (internal/action/actions.go)
  • Duplicated block (12 lines × 2) (internal/display/infowindow.go)
  • Duplicated block (13 lines × 2) (internal/config/rtfiles.go)
  • Duplicated block (13 lines × 2) (internal/util/unicode.go)
  • Duplicated block (13 lines × 2) (internal/util/unicode.go)
  • Duplicated block (13 lines × 2) (internal/util/util.go)
  • Duplicated block (13 lines × 2) (pkg/highlight/highlighter.go)
  • Duplicated block (14 lines × 2) (internal/display/softwrap.go)
  • Duplicated block (6 lines × 2) (internal/action/actions.go)
  • Duplicated block (6 lines × 2) (internal/action/actions.go)
  • Duplicated block (6 lines × 2) (internal/action/command.go)
  • Duplicated block (6 lines × 2) (internal/buffer/cursor.go)
  • …and 25 more

New (112)

  • ClassTooLong: BufWindow (internal/display/bufwindow.go)
  • ClassTooLong: Buffer (internal/buffer/buffer.go)
  • Dependency pinned to a stale untagged commit: github.com/zyedidia/glob
  • Duplicated block (10 lines × 2) (internal/action/actions.go)
  • Duplicated block (10 lines × 2) (pkg/highlight/parser.go)
  • Duplicated block (11 lines × 2) (internal/action/actions.go)
  • Duplicated block (11 lines × 2) (internal/action/actions.go)
  • Duplicated block (11 lines × 2) (pkg/highlight/parser.go)
  • Duplicated block (12 lines × 2) (internal/action/bufpane.go)
  • Duplicated block (12 lines × 2) (internal/buffer/autocomplete.go)
  • Duplicated block (12 lines × 2) (internal/display/statusline.go)
  • Duplicated block (12–17 lines × 4) (internal/action/infocomplete.go)
  • Duplicated block (13 lines × 2) (internal/action/command.go)
  • Duplicated block (13 lines × 2) (internal/buffer/search.go)
  • Duplicated block (13 lines × 2) (internal/display/infowindow.go)
  • Duplicated block (13 lines × 2) (internal/util/util.go)
  • Duplicated block (14 lines × 2) (internal/util/unicode.go)
  • Duplicated block (15 lines × 2) (internal/util/unicode.go)
  • Duplicated block (15 lines × 2) (internal/util/unicode.go)
  • Duplicated block (16 lines × 2) (internal/display/softwrap.go)
  • …and 92 more

Changes since last survey

  • 22 commits — 17 feature/other, 5 fixes

By area

  • (repo) — 3 commits
  • (root) — 3 commits
  • internal/action — 3 commits
  • runtime/syntax — 3 commits
  • cmd/micro — 2 commits
  • internal/buffer — 2 commits
  • runtime/help — 2 commits
  • runtime/plugins — 2 commits
  • internal/config — 1 commit
  • runtime/runtime.go — 1 commit

Notable commits

  • fix: Fixing commandbar/plugin autocomplete regression from #4028 (#4200)
  • fix: Merge pull request #4116 from puneetdixit200/fix-plugin-info-json5
  • fix: fix(buffer/eventhandler): MultipleReplace() comment (#4169)
  • fix: fix(plugin/autoclose): remove unused utf8 import() (#4168)
  • fix: fix(runtime): TrimLeft() -> TrimPrefix() in fixPath() (#4184)
  • change: Add .libsonnet file type to jsonnet syntax highlighting (#4163)
  • change: Add .gitattributes to force LF for *.go files
  • change: Autocomplete support for multiple cursors (#4028)
  • change: Fix typo and dead snap link in README (#4234)
  • change: Merge pull request #4159 from 3x/master
  • change: Merge pull request #4175 from JoeKar/test/gofmt
  • change: Merge pull request #4231 from JoeKar/feature/plugin-deinit
  • change: add default keybindings CtrlShiftHome and CtrlShiftEnd (#4214)
  • change: add languages to fenced code blocks in docs (#4227)
  • change: detect jinja filetype from file extension (#4223)
  • change: docs(internal/buffer): remove the reference to the old ToCharPos function (#4182)
  • change: help/colors: remove references to the removed cmc-paper colorscheme (#4235)
  • change: improve vi syntax highlighting (#4222)
  • change: micro: Remove Screen.Fini() on recover()
  • change: micro: Run plugin's deinit() on exit()
  • …and 2 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

micro-editor/micro was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 24 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 7484d5f5fa95d3dfb025a01b09f31a1b0e7f9b1b — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-5f8d0eb43fd7.