Currently shipping · v0.11.2

A programming language
training a model on its own code.

EigenScript is a zero-dependency C-implemented language with native observer semantics, tensor math, and selective-observation training. iLambdaAi is a self-training research system built on it. Tidepool is a real-time evolution game with an in-language DQN reinforcement-learning trainer. DMG is a Game Boy emulator written as a deliberate language stress test. EigenMiniSat is a CDCL SAT solver benchmarked against the C++ reference. Together they push the runtime hard enough to drive its next round of optimizations.

This site is served by EigenScript — from a single 296 KB binary, with no other runtime or proxy in the path.

Five projects, one feedback loop

What's being built

Five repositories driving each other. The language adds a primitive; the consumers immediately use it; gaps exposed downstream become the next features upstream.

EigenScript

v0.11.2

A standalone language with native observer semantics, written as a single zero-dependency C binary. Stack-based bytecode VM with computed-goto dispatch, NaN-boxed slots across stack and environments, and a chunk-level JIT emitting native code for hot opcodes.

  • Chunk-level JIT with code cache, W^X, inlined OP_CONST / OP_GET_LOCAL
  • NaN-boxed EigsSlot + per-chunk inline cache for name lookups
  • 60+ opcodes, non-recursive calls (4096-frame depth)
  • Observer stall detection compiled directly into loops
  • Pattern matching, lambdas, pipe operator, f-strings
  • Tensor math, regex, JSON, HTTP, SDL2, audio, real concurrency
  • LSP, formatter, linter, observer-aware debugger
  • Embedded DB (EigenStore), UI toolkit, STEM stack

iLambdaAi

research

A self-training research system that trains a model on its own EigenScript source code, using observer semantics as the supervision signal.

  • Geometric introspection: converged, stable, improving
  • Interrogatives: what / why / how is x
  • Temporal operators: was of x, change of x, trend of x
  • Framework strength + signature as runtime metrics
  • Phased training pipeline, baseline lineage tracked
  • Migrated to native .eigen corpus format for 0.9.3

Tidepool

demo

A Spore-inspired cell-stage evolution game written entirely in EigenScript. Real-time graphics, procedural audio, zero-allocation physics — and an in-language DQN reinforcement-learning trainer.

  • DQN training pipeline in pure EigenScript
  • Neural policy inference with 4-frame observation stacking
  • Diet-driven NPC AI with boid flocking
  • Body-zone damage system, part-unlock progression
  • Procedural audio synthesis, spine-bend creature bodies
  • Headless / batch / autopilot modes for training runs
  • Interactive training UI with background threading

DMG

stress test

A Game Boy DMG emulator written in EigenScript — built as a deliberate worst-case workload for the language. 8 language gaps already resolved upstream because the emulator demanded them. Currently runs at 0.177 MHz through the bytecode VM.

  • Full SM83 CPU (256 base + 256 CB-prefix opcodes)
  • MBC1 / MBC3 / MBC5 cartridges, PPU with sprite priority
  • Blargg CPU instruction + timing suite runners
  • Pokemon Red scripted smoke test, bounded graphics test
  • Inlined memory access, ALU flag ops on hot path
  • Headless (Blargg) and graphical (SDL2) modes
  • MBC regression suite: banking, cartridge RAM, echo, DMA

EigenMiniSat

solver

A MiniSat-targeted CDCL SAT solver in EigenScript — benchmarked against the C++ reference, now reaching beyond plain MiniSat into Glucose territory. Validated on real random 3-SAT up to uf150 at the phase transition.

  • Full CDCL: 1-UIP conflict analysis, VSIDS heap, backjumping
  • LBD-based clause management (Glucose-style glue clauses)
  • MiniSat-style clause minimization (litRedundant)
  • Geometric + Luby restart schedules, phase saving
  • Flat clause arena with lazy watch cleanup, compaction
  • Random 3-SAT generator + manifest-driven corpus, 23 test suites
  • Drove list_truncate, sort_by, list_remove_at upstream
Recent velocity

What's happening this week

EigenScript went from 0.9.3.4 to 0.11.2 — the AST tree-walker was replaced with a stack-based bytecode VM with computed-goto dispatch, then every VM bug found by the cross-runtime test pass was fixed in the same day. Today the stack, environments, and immediates all flipped to a NaN-boxed slot representation, and a chunk-level JIT started emitting native code for the hot opcodes. 41 commits in a single day. Every feature ships with a regression suite, and the runtime is valgrind-clean on exit.

0.11.2
Current version
4b
JIT stage shipped
41
Commits today
21
Vulnerabilities patched
May 22 Today · 41 commits · JIT + NaN-boxing
JIT Stage 4b — inline OP_GET_LOCAL emission with conditional incref
JIT Stage 4a — inline OP_CONST emission
JIT Stage 3a/3b — native trampolines, then inline emission for chunk-start opcodes
JIT Stage 2 — chunk-level compile hook into the bytecode-fn frame push
JIT Stage 1 — code cache + W^X roundtrip smoke test
Inline single-param bind fast path in OP_CALL / OP_DISPATCH; VAL_FN params interned
OP_DISPATCH / OP_RETURN — slot-native, avoid boxing
Per-chunk inline cache for GET_NAME / SET_NAME; env_hash_find interned-pointer fast path
EnvHash generation counter — O(1) recycle, no memset
NaN-boxing B/C — slot-native JUMP_IF_*, DUP, DOT_GET, INDEX_GET/SET, LOCAL_IDX_GET
NaN-boxing B-1…B-5 — flip VM.stack and Env.values to EigsSlot*, slot-flavored ARITH, immediates through stack
NaN-boxing A — slot encoding header + boundary shims
v0.11.2 — while-loop break + slot-error fixes; port ext_http to VM, drop eval.c
Escape analysis for slot promotion (Phase 1 + 1.5)
Fix LOCAL_IDX_DOT_GET/SET silent failures + 64K list/buffer truncation
Fix AST_LOOP break-jump stack corruption + global env release
v0.11.1 — observer convergence: state transfer, first-assign dH, loop iterations
Fix observer who/when, compound assignment double-eval (OP_DUP2), 5 audit findings
Stack-top arithmetic — eliminate push/pop overhead for num+num fast path
Earlier Bytecode VM & perf groundwork
Post-0.9.3.4Bounded memory for tight numeric loops (GAP-DMG-003)
Post-0.9.3.4Scratch numeric Values for all-numeric builtin args — zero allocation in hot paths
Post-0.9.3.4In-place numeric mutation extended to all assignment contexts
Post-0.9.3.4Native bitwise operators + scratch list optimization
Post-0.9.3.4Typed buffer type for flat numeric arrays
Post-0.9.3.47 language bug fixes — JSON roundtrip, break scoping, split, memory leak
Post-0.9.3.4Dynamic env: remove 512-variable limit, fix load_file scoping in imports
Post-0.9.3.4New builtins: try_recv, spawn args, audio_sweep, nearest_in_range, read_bytes, fill, dispatch
May 21v0.11.0 — bytecode VM completeness: 14 VM bugs fixed, full tree-walker parity
May 21Cache string hashes in constant pool — faster dict / env lookups
May 21Fix observe builtin and numerical-gradient refcounting
May 21v0.10.0 — bytecode VM replaces AST tree-walker, computed-goto dispatch
May 21Non-recursive function calls — 4096-frame depth, no C-stack recursion
May 21New builtins: list_truncate, list_remove_at, sort_by (driven by EigenMiniSat)
May 21DMG — public-release prep: LICENSE, CONTRIBUTING, CHANGELOG, CI workflow
May 21EigenMiniSat — public-release prep: LICENSE, CONTRIBUTING, CHANGELOG, CI workflow
May 20EigenMiniSat — LBD-based clause management (Glucose-style glue clauses)
May 20EigenMiniSat — MiniSat-style clause minimization, random 3-SAT generator
May 20DMG — inline memory access and ALU flag ops on hot path
May 16DMG — Blargg CPU instruction suite runner, MBC regression coverage
May 16Tidepool — stacked observations during DQN training
May 16EigenMiniSat — DIMACS scan parser + diagnostics, checked-in corpus benchmark
May 16EigenMiniSat — geometric restarts, phase saving, eager learnt-clause compaction
May 16EigenMiniSat — CDCL with VSIDS heap, learnt-clause DB, lazy reduction, backjumping
May 16EigenMiniSat — initial DPLL baseline, watched literals, persistent trail path
Apr 28DMG — wrap main loop in unobserved for memory efficiency
Apr 27DMG — convert bit_* builtins to native bitwise operators (GAP-DMG-004)
Apr 27DMG — replace per-instruction dict ctx with list, 7× decode speedup
Apr 27DMG — typed buffer for 64KB memory, timer + LCD/VBlank timing, first Blargg output
Apr 26DMG — opcode dispatch table replaces if-chain (GAP-DMG-001)
Apr 26DMG — initial Game Boy emulator: CPU core, memory, opcode decoder
Apr 26Tidepool — DQN training pipeline in pure EigenScript
Apr 26Tidepool — neural policy inference with 4-frame observation stacking
Apr 26Tidepool — diet-driven NPC AI with boid flocking, ported from C
Apr 26Tidepool — procedural audio synthesis, body-zone damage, part-unlock editor
Apr 26Tidepool — headless / batch / autopilot CLI modes, interactive training UI
Apr 25v0.9.3.4 — UI toolkit refactor: widget registry, layout caching, accessibility
Apr 25Eliminate every sprintf and strcpy from the codebase
Apr 25Security round 3 — screen_render overflow, join overflow, test injection
Apr 25Security round 2 — 11 fixes for bounds, recursion, injection, leaks
Apr 25v0.9.3.1 — security round 1: 7 vulnerabilities found in internal review
Apr 25EigenStore: full structural validation at store_open
Apr 25iLambdaAi migrated to .eigen format, corpus rebuilt for 0.9.3
Apr 22Tidepool — port mating, creature editor, camera zoom, caustics, high scores
Apr 22Tidepool — port combat system, abilities, epic cells, particle effects
Apr 22Tidepool — port creature spec system and body rendering from C version
Apr 22v0.9.3 — computational geometry library (the namesake)
Apr 22Expose observer thresholds for advanced users
Apr 2215 STEM simulation and analysis examples
Apr 22Lab data collection framework
Apr 22v0.9.2 — observer-aware optimization, simulation, numerics, experiment libs
Apr 22Linear algebra, calculus, probability libraries
Apr 22Engineering and earth science standard libraries
Apr 22STEM standard library: physics, chemistry, biology
Apr 22Code formatter (--fmt) and linter (--lint)
Apr 22Fix memory leaks found by valgrind: free token list and AST on exit
Apr 22SDL2 audio extension: synthesis, playback, mixing, envelope
Apr 22v0.9.1 — SHA-256, MD5, HMAC-SHA256 hash builtins
Apr 22Language Server Protocol (LSP) for editor integration
Apr 22v0.9.0 — meta-circular interpreter at full parity
Apr 22EigenStore: zero-dependency native embedded database
Apr 21Graphical debugger with observer-aware variable inspection
Apr 21Real concurrency: thread-local globals, spawn / channel primitives
Apr 21UI toolkit v1 → v4: themes, focus, animation, charts, modals, DnD
Apr 17v0.8.1 — auth hardening, proper Bearer parsing
Approach

Why the repos are private

·

No backwards compatibility, no workarounds

Pre-1.0 work moves fastest when bugs can be fixed at the root instead of papered over for downstream users. Keeping the source private removes the obligation to preserve old behavior — every issue gets corrected where it actually lives, the API tightens, and the language gets cleaner with each version. When the language is ready to support contracts I can keep, it will go public.

unobserved blocks
Opt out of observer tracking for hot loops — ~22% faster on a 200k-iteration mutation benchmark.
Refcount GC unified
Collapsed two near-duplicate teardown paths into one — fixes a silent dict leak and a double-free risk together.
Growable string buffers
Replaced 64 KB ceilings across f-strings, regex, JSON, REPL — strings now grow with memory instead of silently truncating.
Stack overflow fixed
High-severity f-string lexer overflow patched as part of the strbuf migration.
HTTP path confinement
Static-file serving now uses realpath and rejects symlinks escaping the configured root.
Overflow-safe allocators
safe_size_mul and friends abort cleanly on nmemb * size wrap across model I/O, parser, lexer.
Computational geometry
770 lines, 60+ functions: convex hull (Andrew's monotone chain), barycentric coords, circumcircle, Hausdorff distance — 124 tests against known values.
No unsafe C string ops
Every sprintf and strcpy call removed from the codebase — replaced with bounded variants and explicit length tracking.
Three security audit rounds
21 vulnerabilities caught and fixed in internal review: screen_render overflow, join overflow, recursion bounds, injection, leaks, test harness gaps.
EigenStore validation upfront
Database integrity checked exhaustively at store_open instead of per-operation — corrupt files fail loudly at load, not silently mid-query.
UI toolkit refactor
v0.9.3.4: widget registry, layout caching, timer fix, accessibility pass — toolkit decomposed into focused modules.
Typed numeric buffers
Flat numeric arrays as a first-class type — Tidepool's neural policy and audio buffers no longer pay the boxed-Value tax for every sample.
Scratch numeric Values
All-numeric builtin calls reuse stack-allocated scratch slots instead of allocating new Values — zero allocation in hot inner loops.
In-place numeric mutation
Compound assignment now mutates the existing Value across every assignment context — not just the easy ones — collapsing churn in tight loops.
Driven by the workload
Every post-0.9.3.4 perf change traces back to a real Tidepool RL hot path. The language gets faster because the consumer needs it to.