Programmable Text Editor

Built in Odin. Extended in Racket.

A batteries-included editor: Git, Org, file management, projects and workspaces, language support, a personal knowledge base, agents and MCP. Extend any of it in Racket.

Odra project logo
Odra showing its file explorer, editor view, status bar, and command navigator
Odra's terminal interface from August 2026.

01

Architecture

Odin owns the text and the editor's state. Racket, embedded in the same process, defines how you work with them.

Odin
Text, buffers, views, edit history, rendering and system resources.
Racket
Commands, keymaps, themes and configuration, including your own.
Interface
The core does not depend on the interface. Odra runs in a terminal today.

02

What's included

Editing
Edit UTF-8 files with the default Direct profile or the optional Modal profile. Select and transfer text, undo or redo changes, configure indentation, and recover unsaved work.
Buffers and terminals
Arrange files and integrated terminals in split panes. Each view keeps its own cursor and scroll position. Hide a terminal without stopping its shell.
Search
Search and replace with plain text or regular expressions, search across a project, and move through results or symbols.
Files and projects
Browse local or remote files in a tree or editable directory listing, and create, rename, move, copy, or remove them without leaving the editor.
Version control
Use Ksawery to inspect Git status and history, stage files or diff hunks, create commits, work with branches and conflicts, and follow repository operations. Manage repository changes
Structured documents
Jan is Odra's module for Org documents: outlines, tables, tasks, agendas, capture, source blocks, computation, and export. Files ending in .org or .jan use the same Org syntax. Work with Jan
Linked knowledge
Install the optional Roman package to connect personal notes with stable links, references, relations, daily notes, and graph inspection. Your Org documents remain the source of truth. Build a linked knowledge base
Language support
The basic pack supports Org documents through Jan, plus Odin, Racket, Go, Rust, TypeScript, JavaScript, HTML, and CSS. Local syntax works independently of language servers; configured servers provide completion, diagnostics, navigation, and formatting.
Programming
Write personal commands in Racket, discover them through M-x, bind them to keys, and reload them during a session. Compose keymaps and themes, and extend the status bar or gutter. Create personal tools
Packages and agents
Install packages from official or independent catalogs, choose their permissions, and enable, update, or roll them back. Run installed agents, inspect their activity, and cancel tasks from the editor. Use packages and catalogs