Mirror of github.com/ewanc26/esoterica
  • Rust 86.8%
  • Svelte 12.5%
  • JavaScript 0.4%
  • HTML 0.3%
Find a file
2026-07-16 18:22:46 +01:00
data docs: add comments to source files 2026-06-29 22:00:16 +01:00
src docs: add comments to source files 2026-06-29 22:00:16 +01:00
web docs: add comments to source files 2026-06-29 22:00:16 +01:00
.gitignore Update .gitignore for Rust project 2026-06-14 17:16:49 +01:00
AGENTS.md docs: correct agent guidance after source audit 2026-07-16 18:22:46 +01:00
Cargo.lock feat: implement core modules and web interface 2026-06-25 11:20:40 +01:00
Cargo.toml docs: add comments to source files 2026-06-29 22:00:16 +01:00
README.md docs: align AT Protocol naming 2026-07-16 14:14:07 +01:00
repos.txt chore: remove azurite from repos.txt 2026-06-16 22:39:04 +01:00

Esoterica Conlang Generator

Generates constructed languages from composable components: phonology, morphology, syntax, sound changes, semantic drift, and orthography. Written in Rust.

Features

  • Phonology — Syllable generation from phonotactic patterns with tone and vowel harmony
  • Morphology — Affix insertion and reduplication rules
  • Sound changes — TOML-based rules + formal parser (p > b / V_V)
  • Semantic drift — Probabilistic meaning change (broadening, narrowing, amelioration, pejoration, metaphor, etc.)
  • Orthography — Procedural script generation (alphabets, abjads, abugidas, syllabaries, logographies)
  • Collaborative — AT Protocol-based collaborative editing with merge conflict detection
  • CLI + TUI — Ratatui interface with phonology designer, config selector, real-time generation
  • WASM — Core engine compiles to WebAssembly
  • Web UI — Svelte 5 frontend with phonology designer, lexicon browser, sound change editor
  • AT Protocol — Publish lexicons to the AT Protocol

Quick start

cargo build --release

# Interactive TUI
cargo run --release -- --interactive

# CLI
cargo run --release -- \
  --phonology uralic_finnic \
  --morphology agglutinative \
  --syntax sov \
  --sound-change lenition,rhotacism \
  --syllables 3 \
  --drift-steps 3 \
  --generate-orthography \
  --output my_language.json

# WASM
wasm-pack build --features wasm --no-default-features

# Web UI
cd web && npm install && npm run dev

Project layout

esoterica/
├── src/
│   ├── lib.rs              # Library root
│   ├── main.rs             # CLI binary
│   ├── wasm.rs             # WASM bindings
│   ├── archetypes.rs       # Component types + registry
│   ├── phonology.rs        # Syllable/word generation
│   ├── morphology.rs       # Morphological transformations
│   ├── syntax.rs           # Word order (6 orders)
│   ├── sound_change.rs     # Rule parser + legacy engine
│   ├── lexicon.rs          # Dictionary generation
│   ├── lexicon_structs.rs  # Data structures
│   ├── semantic_drift.rs   # Probabilistic meaning change
│   ├── orthography.rs      # Script/glyph generator
│   ├── collaborative.rs    # AT Protocol collaborative editing
│   ├── atproto.rs          # AT Protocol publishing
│   └── tui/                # Ratatui interface
├── data/
│   ├── phonologies.toml    # 8 phoneme inventories
│   ├── morphologies.toml   # 4 morphology definitions
│   ├── syntaxes.toml       # 3 word-order configs
│   └── sound_changes.toml  # 10 diachronic rule sets
├── web/                    # Svelte 5 web interface
└── Cargo.toml

AT Protocol publication

export ATPROTO_HANDLE="your-handle.bsky.social"
export ATPROTO_PASSWORD="your-app-password"

cargo run --release -- \
  --phonology uralic_finnic \
  --morphology agglutinative \
  --syntax svo \
  --publish-title "My Conlang" \
  --publication-uri "at://did:plc:.../site.standard.publication/..."

Licence

MIT