install
source · Clone the upstream repo
git clone https://github.com/plurigrid/asi
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/plurigrid/asi "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/ewig-editor" ~/.claude/skills/plurigrid-asi-ewig-editor-c51aa9 && rm -rf "$T"
manifest:
skills/ewig-editor/SKILL.mdsource content
Ewig - Eternal Didactic Text Editor
The eternal text editor — Didactic Ersatz Emacs demonstrating immutable data-structures and the single-atom architecture.
Repository
- Source: https://github.com/bmorphism/ewig (fork of arximboldi/ewig)
- Language: C++ (immer library)
- Pattern: Persistent data structures + single atom state
Core Concept
Ewig demonstrates how to build a text editor using:
- Immutable data structures - All state changes create new versions
- Single-atom architecture - One atom holds the entire application state
- Structural sharing - Efficient memory via shared structure
// Single atom state atom<editor_state> state; // All mutations are pure transformations state.update([](editor_state s) { return s.insert_char('x'); // Returns new state, doesn't mutate });
Architecture
┌─────────────────────────────────────────────────────┐ │ Ewig │ ├─────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────┐ │ │ │ Single Atom │ │ │ │ (immutable editor_state) │ │ │ └─────────────────────────────────────────────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌─────────┐ ┌─────────┐ │ │ │ immer │ structural │ lager │ │ │ │ vectors │ sharing │ cursors │ │ │ └─────────┘ └─────────┘ │ │ │ └─────────────────────────────────────────────────────┘
Key Libraries
immer
Persistent immutable data structures for C++:
#include <immer/vector.hpp> immer::vector<char> buffer = {'h', 'e', 'l', 'l', 'o'}; auto new_buffer = buffer.push_back('!'); // O(log n), shares structure
lager
Unidirectional data-flow architecture:
auto store = lager::make_store<action>( model{}, lager::with_reducer(update), lager::with_effect(effect) );
Relevance to CRDT/Collaborative Editing
Ewig's immutable architecture aligns with CRDT principles:
| Ewig Concept | CRDT Parallel |
|---|---|
| Immutable state | Operation-based CRDT |
| Structural sharing | Delta-state CRDT |
| Single atom | Causal consistency |
| Pure transformations | Commutative operations |
Integration with crdt-vterm-bridge
The single-atom pattern can be applied to terminal state:
// Terminal state as immutable atom struct terminal_state { immer::flex_vector<line> lines; cursor_pos cursor; gf3_trit trit; // GF(3) assignment }; atom<terminal_state> term_state;
Building
git clone https://github.com/bmorphism/ewig cd ewig mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make ./ewig
Related Skills
- Immutable refactoring patternscode-refactoring
- State equivalencebisimulation-game
- Deterministic UI coloringgay-mcp