Run, Build, and Grow
Small Systems
Without Leaving Your Text Editor
Presenting at LIVE 2024
Watch on YouTube: https://youtu.be/ehR-KIgw7T8
Clojure, but more alive.
- A REPL, but it's connected to all your nodes at the same time (1:n)
- See the value of any expression on any node – in your code
- Query macro expression rewrites itself to show the data inline
- Declarative deployment: "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 and 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" [future work]
- "(i) see inside (ii) see across time (iii)
[see across possibilities]" – Seeing Spaces - Situated [Systems]()
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?
Join the wait list & get notified when it's alive >
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
- music live coding environments
- Eve - rules db, programming for humans
- Dark classic - production traces in the editor
- preimp - self-rewriting Clojure notebook
Missing from the video:
- Glisp - bidirectional self-rewriting Clojure-ish code, custom editor UIs for types
- Quokka.js, Console Ninja - inline runtime values, 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?)
Comments welcome: hi@albertzak.com 💌