Run, Build, and Grow
Small Systems
Without Leaving Your Text Editor
Presenting at LIVE @ SPLASH 2024
Clojure, but more alive
See the value of any expression on any node β in your code.
A REPL, but it's connected to all your nodes at the same time (1:n)
- Query macro expression
- rewrites itself to show the data inline
- Declarative deployment
- Say "this function should run on that node"
- Supervision & reconciliation
- Stop a process? Comment it out.
- Effects via object capabilities
- All host platform caps passed in as argument
- The editor is also a node
- You can run code in it
- Define and use custom inline editor visualizations
- Values have history
Taglines#
- "Grug-brained Erlang"
- "Debug mode is the only mode"
- "A personal Bank Python" [todo / future work]
- "(i) see inside (ii) see across time (iii)
[see across possibilities]" - Baby's First Situated System
- Worse is Better [?]
- If Raspberry Pi were as simple as Arduino / P.C.C
Status#
Hacked together with SCI, rewrite-clj, zprint, Lezer and CodeMirror. Everything barely holds together.
I am ashamed of the code. But I might clean it up and release it if enough people are interested.
Maybe even turn it into a real useful thing?
Related work#
- Smalltalk
- Lisp
- Emacs
- org-mode
- Emacs
- TaskTXT - via Potluck - roundtrip state through plain text
- APX - trace points + context
- Cap'n Proto - IDs in code to stabilize expressions
- music live coding environments
- Eve - viz, feature flags, programming for humans
- Dark classic - redeploy-on-every-keystroke, production traces in the editor
- preimp, aka: The Program is the Database is the Interface - self-rewriting Clojure notebook
More related work that's missing from the video#
- Glisp - bidirectional self-rewriting Clojure-ish code, custom editor UIs for types
- Quokka.js, Console Ninja - inline runtime values, inline logging
- DreamBerd - question marks! πΈ
Future work (todo)#
- error handling - at least like Sentry, maybe even a poor Smalltalk debugger or Common Lisp condition system
- persistence story - accretive bitemporal facts like XTDB or something local-first?
- communication - infer netcode like Electric
- codebase management - hashed like Unison or Scrapscript
- collaboration / ocap code sharing / delegate authority to change part of the system
- control over when and where changes deploy: staged rollout, feature flags, "under construction" development preview areas
- actually secure security
- release as extensions for common editors (maybe as language server?)