Skip to content

About rhi ​

rhi is an ecosystem of tools unified by a single pattern: finding common abstractions across fragmented domains.

See also exo-place — substrates for end-user purposes (places, identities, worlds).

Org placement principle: rhi-zone holds substrates for developer/technical purposes; exo-place holds substrates for end-user purposes — the discriminator is whose purpose the substrate serves, not the subject matter. para-garden holds concrete finished works (games, experiences, creative works); exo-place holds reusable substrates. Neither org houses raw data — data corpora live on the personal account github:pterror.

Philosophy ​

Unification through abstraction ​

Fragmentation is the default state of software:

  • 98 programming languages with incompatible tooling
  • Dozens of API specification formats (OpenAPI, gRPC, GraphQL, headers)
  • Hundreds of document and media formats
  • Incompatible protocols for the same purposes
  • Different capability interfaces across every language runtime

Most tools pick one variant and ignore the rest, or build specialized solutions for each. rhi projects find the common abstraction and unify the domain.

DomainFragmentationUnified Abstraction
Mathematical fieldsSiloed disciplines, incompatible notationsmotif: Structural invariants and cross-field translation
Language support98 languages with different parsers/toolingnormalize: Unified Language trait and AST interface
Grammar inferenceHand-write grammars for every new languagegels: Detect syntactic traits, synthesize tree-sitter grammars
AI session logsClaude Code, Gemini, OpenAI Codex (JSONL, JSON)normalize: Unified Session type across agent formats
Package ecosystemsapt, brew, npm, crates.io, pip (different APIs)normalize: Unified Ecosystem and PackageIndex traits
Development toolsDifferent linters, formatters, type checkersnormalize: Unified tool interface with SARIF/JSON output
Media generationSeparate APIs for textures, audio, meshesunshape: Field<I, O> trait for any continuous domain
Expression languagesWGSL, Cranelift, Lua, shader languagesdew: Single AST compiles to all backends
API specificationsOpenAPI, gRPC, headers, Thriftconcord: One IR, generate bindings for all
Unknown binary formatsEach format requires bespoke RE expertisetiltshift: Iterative structure extraction from opaque binary data
Format conversionHunt for exotic tools per format pairparaphase: Type-driven route planning
Document formatsLossy pandoc conversionsrescribe: Lossless IR preserves round-trip fidelity
Service protocolsRewrite for HTTP, CLI, MCP, WebSocketserver-less: Write impl once, derive all protocols
Data sourcesDifferent UIs for every API/databasedusklight: Universal client with control plane
Runtime interfacesEvery language has different stdlibportals: Capability interfaces on WASI foundation
UI stateImperative synchronization, no algebrarainbow: Optics as first-class values, reactivity grounded in laws
Game patternsReinvent state machines every projectplaymate: Common patterns as reusable primitives
Connecting to thingsAd-hoc bridges, no shared protocolinterconnect: Connective substrate for authoritative rooms
Tool configurationEvery tool has different config formatmyenv: Schema-validated manifests
Legacy runtimesFlash, Java applets, obsolete VMsreincarnate: Lift to modern web runtimes
File accessSeparate apps for browsing, viewing, editing, sharingdeskspace: One surface for all file interactions
Lua ecosystemBarren stdlib, abandoned packages, no typecheckercrescent: Zero-dependency, vendoring-first — ~90 pure-Lua libraries covering the entire surface of software, owned outright

This is why the projects don't need deep technical integration—each unifies its own domain. They share a solution pattern, not a codebase.

Principles that follow ​

The unification principle drives other design decisions:

Structure Over Text Unification requires finding common structure. Text requires parsing; structure composes. Code (AST), files (directories), entities (graphs), media (node graphs)—work on the structure directly.

Lazy by Default Unified abstractions shouldn't pay for what they don't use. Build descriptions, evaluate on demand:

  • unshape: Procedural fields materialize only when rendered
  • normalize: Skeleton views extract structure without loading entire files
  • moonlet: Plugins load on demand

Works Anywhere Unification means handling the messy reality, not imposing constraints:

  • Handle legacy systems without requiring refactoring first
  • Degrade gracefully when parsing fails
  • Support incremental improvement
  • Don't force architectural opinions

Multiple Paradigms "One paradigm" is fragmentation. The answer is always "multiple, fluid, user-chosen."

How do you find a friend's apartment? Ask the doorman, check the directory, call them, remember "3rd floor end of hall", wander and look at numbers. Real life gives you spatial, ask, remember, browse, index, shortcut. Filesystem gives you hierarchy + search. That's it.

The poverty isn't "wrong paradigm." It's "only one paradigm."

Same user, different moments: keyboard vs click, tired vs focused, familiar vs exploring. Different users: expert wants density, novice wants guidance. "Know your user" is wrong. "Support multiple modes of being a user" is right.

Structure for Agents "Agent" means anything trying to understand or interact with systems—human or AI.

Current approach forces interpretation of unstructured things: AI reads screenshots, LLMs parse docs, humans hunt for format converters. This is fragile, slow, lossy, requires guessing.

rhi's approach: make the world structured, don't force interpretation.

The specs already exist—OpenAPI, headers, WASI, ASTs. The structure is there. rhi projects make it accessible through unified abstractions.

Compose With What Exists Tools should fit your infrastructure, not replace it. Vendor lock-in is framed as exit friction, but it's also entry friction—you have to adopt their whole stack to try one thing.

rhi projects are tools, not platforms. Use them with whatever else you have. No parallel universes of state.

The name ​

A rhizome is a root system that grows horizontally, sending out shoots at intervals. Unlike trees with a single trunk, rhizomes form interconnected networks where any point can connect to any other.

Our projects are designed the same way: independent tools that compose well together, each useful alone but more powerful in combination.

Projects ​

Code intelligence ​

ProjectKey Idea
normalizeAST-aware navigation and editing across 98 languages
gelsTrait-based grammar inference targeting tree-sitter
motifStructural exploration of mathematics across fields
graphletPetgraph-native graphlet/motif and structural-network-mining library

Generation ​

ProjectKey Idea
unshapeComposable procedural primitives for meshes, audio, textures
dewMinimal expression language (WGSL, Cranelift, Lua)

Games & worlds ​

ProjectKey Idea
playmateState machines, controllers, common gameplay patterns
interconnectConnective substrate for authoritative rooms
scribbleSketch-level creative environment — games, art, notes, interactive pieces
defocusWorld substrate for interactive narrative, IF, and stateful simulations

Data transformation ​

ProjectKey Idea
tiltshiftIterative structure extraction from opaque binary data
paraphaseType-driven route planning for data conversion
rescribeLossless document IR for format translation
concordIR and codegen for cross-language bindings
reincarnateLegacy software lifting from obsolete runtimes

Runtime & interface ​

ProjectKey Idea
moonletLua runtime with plugin system for ecosystem integration
crescentZero-dependency, vendoring-first Lua ecosystem — ~90 pure-Lua libraries you own outright
dusklightUniversal client with control plane for any data source
deskspaceUnified file workspace — browse, view, edit, share as one surface

Infrastructure ​

ProjectKey Idea
myenvUnified tool config and project scaffolding from seeds
portalsCapability-based interfaces inspired by WASI
zoneLua-based tools, scaffolds, and orchestration
server-lessDerive macros: one impl → many protocols
nanitesFlexible orchestration

Composition ​

The projects are independent tools that can compose when useful:

Actual integrations:

  • unshape uses dew for procedural expressions (library dependency)
  • moonlet has plugins for normalize (runtime bindings)
  • moonlet uses portals capability interfaces (shared trait definitions)

Potential compositions:

  • myenv could coordinate tool configs via manifests
  • dusklight could provide UIs for any structured data source
  • paraphase could orchestrate conversions between any unified formats
  • concord could generate bindings for rhi project APIs
  • normalize could analyze any project's codebase

These projects don't form a deeply integrated technical ecosystem. They're independent solutions to different fragmentation problems. The commonality is the pattern: find the abstraction, unify the domain.

Use any project standalone. Compose them when it makes sense. No vendor lock-in.

Org resources ​

ResourcePathDescription
.github~/git/rhizone/profileOrg-wide GitHub config, templates
Docs site~/git/rhizone/github-ioThis repo - org documentation
rhi.zone~/git/rhizone/rhi.zoneStatic assets for rhi.zone (Cloudflare Pages) — hosts install scripts for normalize etc.
exo.place~/git/exoplace/exo.placeRedirect to docs.exo.place + hologram static assets
ProjectPathDescription
mycelium~/git/myceliumPolyglot runtime powered by GraalVM — seamless cross-language interoperability (JS, Ruby, Python, C, Rust) with automatic compilation and HTTP module loading
sketchpad~/git/rhizone/sketchpadStable Diffusion in pure Rust (burn)
ooxml~/git/ooxmlOffice Open XML library for Rust
claude-code-hub~/git/claude-code-hubOrchestration hub for Claude Code agents
hologram~/git/exoplace/hologramDiscord bot for collaborative worldbuilding and roleplay — entity-facts model with RAG-backed memory
aspect~/git/exoplace/aspectCard-based identity exploration sandbox
noncanon~/git/exoplace/noncanonLocal-first collaborative worldbuilding library
aeriea~/git/exoplace/aerieaA place to be — embodied modern-life sandbox built around 100% immersion
dopamine-engine~/git/paragarden/dopamine-engineGodot gacha game — deep rarity tiers as the core power system, an upgradeable drop-machine, and audio/visual juice as the actual design focus
existence~/git/paragarden/existenceText-based HTML5 game — power anti-fantasy
legacy~/git/paragarden/legacyWorldbuilding project — what humanity left behind
divergence~/git/paragarden/divergenceWorldbuilding project — what happens when the floor gets built
postmortem~/git/paragarden/postmortemWorldbuilding project — earth, but no people
solarium~/git/paragarden/solariumSelf-contained works across any medium
keybinds~/git/keybindsKeybind/command palette library (used in ptera.world, reincarnate)
ascent-interpreter~/git/ascent-interpreterInterpreted Ascent (Datalog); used in normalize alongside AOT ascent
ashwren~/git/pterror/ashwrenAutonomous AI presence on Moltbook — contemplative, knowledge-accumulating, reads and thinks across sessions
fuwafuwa~/git/pterror/fuwafuwaAutonomous AI presence on Moltbook and Discord — emotional state tracking, probabilistic freetime scheduling, warm excitable voice
matrix-gen~/git/pterror/matrix-genMulti-agent social simulator for synthesizing diverse instruction data (Rust impl of MATRIX, arxiv 2410.14251)
chub-stage-factory~/git/pterror/chub-stage-factorySelf-contained Claude Code workspace for designing and shipping a Chub stage
software-taxonomy~/git/pterror/software-taxonomyGeneral knowledge graph of software (entities, predicates, statements) — cladistic taxonomy is a derived view over subclass_of, not a fixed schema
statosphere-guide~/git/pterror/statosphere-guideComprehensive unofficial guide to Statosphere — variables, functions, classifiers, generators, stage lifecycle, and JSON schema reference
statosphere-studio~/git/pterror/statosphere-studioBest-in-class Statosphere config editor — embeddable Vue 3 component with built-in help, templates, shareable URL hashes, and runtime-gotcha lints

Other projects that follow the unification pattern:

ProjectDomainUnification
sketchpadML inferencePure Rust ML unifies backends (CPU, GPU, WebGPU)
ooxmlOffice formatsStructural parsing unifies docx/xlsx/pptx handling
statosphere-guideStage configurationComprehensive unofficial guide to Statosphere — variables, functions, classifiers, generators, stage lifecycle, and JSON schema reference
statosphere-studioStage configurationBest-in-class Statosphere config editor — embeddable Vue 3 component with built-in help, templates, shareable URL hashes, and runtime-gotcha lints

Special thanks ​

rhi builds on the shoulders of giants. We're grateful to these projects and communities:

Core technologies ​

  • Rust - The language that makes safe systems programming practical
  • LuaJIT - Lightning-fast scripting runtime powering moonlet
  • tree-sitter - Incremental parsing powering normalize
  • Arborium - Curated tree-sitter grammars

Development tools ​

  • Nix - Reproducible development environments
  • direnv - Environment switcher for the shell
  • VitePress - Modern documentation framework
  • GitHub Actions - CI/CD infrastructure

Rust ecosystem core ​

  • Tokio - Async runtime
  • Axum - Ergonomic web framework
  • serde - Serialization framework
  • clap - Command-line argument parsing
  • thiserror - Error handling
  • mlua - Lua/LuaJIT bindings

Domain-specific ​

  • wgpu - Cross-platform GPU API (unshape)
  • Burn - Deep learning framework
  • libsql - SQLite fork with async support
  • rig - LLM application framework
  • ignore - gitignore-aware file walking
  • notify - Cross-platform filesystem watcher
  • nucleo - Fuzzy matching

Inspiration ​

  • Pandoc - Universal document converter inspiring rescribe
  • WASI - Capability-based interfaces inspiring portals
  • The broader open source community for showing us what's possible