Skip to content

Repository files navigation

Rip

Rip is a zero-build, full-stack language for reactive UI, schemas, ORM, and server code. It runs directly under Bun, emits clean JavaScript, type-checks through TypeScript 7, and ships a full LSP.

Repository scope

This repository owns the complete Rip product:

  • the lexer, grammar, parser generator, and compiler;
  • precise bidirectional mappings between Rip and generated artifacts;
  • reactive, schema, ORM, component, and standard-library runtimes;
  • package and application infrastructure, including rip/sites (Agent, edge, demos);
  • VS Code/Cursor, Vim, and highlight.js integrations;
  • language, mapping, type, runtime, corpus, and editor test contracts.

Every capability must preserve the compiler's mapping architecture and carry correctness tests at the surfaces it affects.

Open product work is tracked in docs/ROADMAP.md and package-local TODO.md files (for example packages/sites/TODO.md).

Documentation

Working docs (read / rewrite while shipping):

Understanding (permanent contracts under docs/):

Core commands

bun run test:rip       # language suite (PR code check)
bun run test           # fast compiler/runtime suite
bun run test:all       # exhaustive: extended tier + every package
bun run test:tui       # the same lanes, drawn live on packages/tui
rip check [paths...]   # headless TypeScript checking over Rip source
bun run parser         # regenerate src/parser.js
bun run corpus
bun run audit

Package work: bun run test from that package directory (for example packages/sites). Browser smoke: bun run test:browser.

Compile cache

rip file.rip, rip test, and the Sites bundler compile .rip modules through an on-disk cache at .rip/cache/compile/ in this checkout (src/cacher.js), so a spawned process re-reads an unchanged module's emission instead of recompiling it. Any edit under src/ invalidates every entry, and compile errors are never cached. RIP_CACHE_DIR=<dir> relocates the cache and RIP_NO_CACHE=1 disables it. Entries unread for a week are pruned; rm -rf .rip/cache is the full reset.

The live runner

bun run test:tui runs the lanes test:all runs, with the same scheduler, the same verdict and the same exit code, and draws them live: a cell per lane, a bar for the whole run with its ETA, a bar per lane in flight against its last duration, each finished lane scrolled into the scrollback as one aligned row, and a card for the first failure of each failing lane (/ choose, Enter opens the lane's output, f shows only the failing lanes, q stops the run and every lane's process group). At the end each failing lane's output is printed as test:all prints it, then a summary card. Each complete run leaves the lanes' times and counts in .rip/test-last.json for the next run's bars and ETA. Piped, under CI, or with --plan it is test:all itself. It takes test:all's flags; both front ends are scripts/lanes.mjs underneath.

test:all needs janus on PATH for the Sites integration lane. Install Janus, or put a Janus build on PATH. The lane exercises that binary and rejects a local Go module replacement; it does not build a separate edge.

REPL

rip on a TTY (or rip -r) starts the interactive REPL: reactive bindings persist across lines, input is syntax-highlighted live from the real lexer, themes auto-detect the terminal background (.theme to override), imports resolve against the session cwd, and -e evaluates one entry. .help inside the session lists the commands.

Two conveniences worth knowing by heart:

  • A trailing ; suppresses the echo. The entry still evaluates and still sets _ — only the display goes quiet. The companion of anything that already printed its own answer: show User; prints the table without the REPL then dumping the returned instances.

  • A repl.rip in your cwd is the project's own console. It auto-loads at startup and states only what cannot be guessed — usually one line, import './api/db.rip'. Its exports, every schema the app registered, and the rip/db toolkit (sql, findAll, findOne, transaction, show) become your starting bindings, announced by provenance:

    schemas → User, Patient, Order, … · rip/db → sql, findAll, findOne, transaction, show
    rip> show User.where(lastName: /pat/i);
    

Sites (local HTTPS)

janus autostart               # once: the edge, as a service
rip sites add packages/sites/demos/hello
rip sites start hello
# https://hello.via.rip/

Postures and LAN/local trust: packages/sites/README.md.

About

Rip is a zero-build, full-stack language for reactive UI, schemas, ORM, and server logic. It runs directly under Bun, emits clean JavaScript, type-checks through TypeScript 7, and ships a full LSP.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages