Technical Museum
All Hardware Maps ML & AI Music Social Tools Writing Apps & Games
Deciduous
Decision graph CLI for tracing how software decisions evolve
Rust SQLite HTML/JS
Deciduous Archaeology Demo
Demonstrations of decision archaeology on React and stacked git workflows
Rust React Git
Phish Explorer
Jam analytics dashboard for Phish 3.0 era
Elixir Phoenix LiveView D3.js
Local LLM on MacBook
4-bit quantization, safetensors, and Bumblebee + EMLX for Apple Silicon
Elixir Rust Python
A Bot that posts like me
Porting the posting bot to Elixir using local LLM work
Elixir Bumblebee EMLX
Receipt Printer Software Suite
A complete software suite for thermal receipt printers
Elixir Python
Role Call
TV writer overlap explorer
Elixir Phoenix LiveView
Fill Your Sky
Interactive map of 418+ Bluesky communities with 545K+ people
Elixir Phoenix LiveView D3.js
Code Mirror
A live code mirror experiment
Elixir Phoenix LiveView
Pocket Pnin
A local LLM running on my iPhone, coming to the App Store for free
Swift MLX
NYC Census Maps
Interactive census and PLUTO data visualization for New York City
Elixir Phoenix LiveView Leaflet.js
MTA Bus Tracker
Real-time MTA bus and train tracking on an interactive map
Elixir Phoenix LiveView Leaflet.js
Concert GIF Maker
Extract GIFs from concert videos with a retro Mac interface
Elixir Phoenix LiveView FFmpeg
Send a VERY direct message, to my receipt printer
A social project where friends send photos that print on my receipt printer
Elixir Phoenix LiveView
Archive TV
A real over-the-air TV channel from magnetic media archives
Elixir FFmpeg
Losselot
Neural network loss function explorer
Python
Todoinksies
A personal todo app
Elixir Phoenix LiveView
Ormery
An ORM written in Temper
Temper
Collage Maker
Upload photos and arrange them into grid collages
Elixir Phoenix LiveView
GenStage Tutorial 2025
A modern GenStage tutorial for the Elixir ecosystem
Elixir GenStage
Temper Rust Bug
Found a bug in the Temper compiler and built a demo repo
Temper Rust
300+ Years of Tree Law
A blog post that became its own LiveView application
Elixir Phoenix LiveView
HEEx in Other Languages
Experiments porting Phoenix HEEx templates to Rust, Lua, C#, Java, Python, and JS
Temper Rust Lua
Live Draft LSP
Live-stream blog drafts from Zed to Phoenix via a custom LSP
Rust Elixir Zed
Bluesky Hoover Apps
Various apps that vacuum up and process the Bluesky firehose
Elixir Phoenix LiveView
Bobby Posts Bot
A bot that posts like me, in Python
Python
Photo Booth Receipt Printer
A portable photo booth that prints on receipt paper
Python Elixir
Nathan For Us
A Nathan For You social network with video search and GIF creation
Elixir Phoenix LiveView FFmpeg
Browser History Roast MCP
An MCP server that roasts you based on your browser history
Python MCP
GenStage Tutorial (Original)
The original GenStage tutorial
Elixir GenStage
Bluesky Firehose Toys
Real-time firehose visualizations: emoji streams, jetstream comparisons, and more
Elixir Phoenix LiveView WebSocket
31 exhibits Apps & Games
MY FAV
LEICA SHOTS
Work Log — Recent Commits
+182-24 notactuallytreyanastasio/blimp/main Mar 25 04:26
c557e98 LLVM O3 + native CPU, TCO, LTO, Elm-style compiler errors - O3 + native CPU targeting: Blimp matches/beats C, Rust, Zig - fib(40): 433ms (C: 444ms), btree(25): 162ms, KNN: 160ms - Tail call optimization: recursive def calls annotated, tailcallelim pass - LTO: --lto flag emits bitcode, links with -flto - Rich error messages: title bars, source lines, region underlines, hints - Type checker wired into blimp-compile
+89-9 notactuallytreyanastasio/blimp/main Mar 25 03:41
8cbb9b9 LLVM O2 optimization, type checker in compiler, actor-typed state fields - LLVMRunPasses("default<O2>") eliminates all benchmark overhead - fib(40): 434ms (was 579ms, now faster than C's 450ms) - btree(25): 164ms (was 338ms, now tied with Rust) - Type checker wired into blimp-compile (was skipped entirely) - spawn/struct_lit infer actor types for message send validation - Parser supports dotted type names (Marketplace.AccountHolder.Account) - Wrong actor type in message send now caught at compile time - try/catch removed from roadmap -- bubbles+orelse is the error model
+162-130 notactuallytreyanastasio/blimp/main Mar 25 03:15
4b6f560 more ownership and actors example
+170-138 notactuallytreyanastasio/blimp/main Mar 25 03:15
ea531f0 more ownership and actors example
+288-76 notactuallytreyanastasio/blimp/main Mar 25 03:03
dec79c4 readme refresh
+917-37 notactuallytreyanastasio/blimp/main Mar 25 02:43
40870d0 more marketplace configuration and changes with drawings to children
+488-0 notactuallytreyanastasio/blimp/main Mar 25 02:33
b2d542d add canvases of compiled programs as an option
+638-45 notactuallytreyanastasio/blimp/main Mar 25 02:22
ed203c1 Compiled benchmarks: fib, btree, knn vs C/Zig/Rust/Python/Ruby - Forward-declaration pass for def functions (order-independent) - Fibonacci fib(40): 579ms (1.28x C) - Binary tree depth 25: 338ms (2x C) - KNN 1000x1000 grid: 173ms (1.02x C) - bench/run.sh runner with median-of-3 timing - All benchmarks produce correct results across all 6 languages
+2395-122 notactuallytreyanastasio/blimp/main Mar 25 01:50
d73d9dc try/catch for structured error handling try do risky_actor <- :dangerous catch err do "caught: #{err}" end Catches all errors: Bubble, TypeError, DivisionByZero, etc. Error reason bound to catch variable as an atom (:bubble, :type_error, :division_by_zero). Bubble reasons from bubble :reason are passed through. Happy path returns try body result. REPL depth counter handles catch as block closer. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
31bd195 Fix diff viewer compactness and colors: nil pattern match bug, tighter spacing - Fix line_class returning empty string when highlighted_at is nil (nil != false in pattern match, fell through to catch-all) - Tighten gutters, hunk spacing, line height for compact diff display - Gate AutoScroll on follow mode to prevent scroll hijack - Use custom CSS classes for diff line backgrounds instead of Tailwind utilities Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
80e7f35 Fix: dismissComp was clearing compItems before renderComp could use them
c185968 Error showcase examples + top-level Makefile 12 error example files demonstrating all error message types: typo suggestions, type mismatches, operator-specific advice, language refugee detection, bubble/catch, no matching handler. Makefile targets: make build - build compiler + interpreter make repl - launch terminal REPL make compile - compile .blimp to native make wasm - build WASM module make web - start local playground server make test - run all tests make bench - run benchmarks make errors - showcase error messages make term-diff - launch Phoenix diff viewer make deploy - deploy blog + REPL to production make deploy-wasm - rebuild WASM and deploy Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
d585702 Elm-inspired error messages: language refugee detection Detects common patterns from other languages and explains the Blimp way: return 42 -> "Blimp doesn't use return. Last expression is the value." class Foo -> "Use actors instead." var x = 5 -> "Just assign directly: x = 5" if true -> "Use situation for branching." while -> "Use for to iterate." function -> "Use def or fn." 1 === 2 -> "Use ==. Blimp does structural equality." Also: "Did you mean?" for unknown functions now searches all 36 builtins with edit distance. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
be4d8db Add auto-complete to playground: shows as you type, Tab cycles, Enter accepts
0294995 Add syntax highlighting to diff viewer via highlight.js - Per-hunk highlight.js hook: highlights whole hunk for context, splits back into per-line HTML preserving +/- prefixes - Language detection from file extension (Language.detect/1) - diff_content/1 helper builds spans without template whitespace - GitHub-style syntax colors that work over green/red diff backgrounds - 230 tests pass, zero warnings Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
717d8f1 History recall shows full multiline blocks, auto-sizes textarea
d2e8d31 Auto-show completions as you type, Tab cycles, Enter accepts
5e0c04d Tab completion in browser REPL with type-aware auto-fill Tab shows up to 3 completion candidates below the cursor. Repeated Tab cycles through them. Enter accepts the highlighted completion. Escape or any other key dismisses. Completions include: - Variables with their types - Functions with full signatures: add(a: Int, b: Int) -> Int - Type-aware argument filling: selects best-matching variable from scope based on parameter types - Builtins (36), keywords, actor templates Click a completion to accept it. Shows "... N more" when there are more than 3 candidates. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fc78832 Fix: rebuild WASM with completion exports, add error handling
9e0c32e Debug autoComplete
120d063 String interpolation: "hello #{name}!" Strings containing #{expr} are evaluated at runtime. The expression inside #{...} is parsed and evaluated, then formatted and inserted. Works with variables, arithmetic, function calls: name = "world" "hello #{name}!" # => "hello world!" "math: #{1 + 2}" # => "math: 3" "count: #{length([1,2])}" # => "count: 2" Nested braces handled via depth counting. String values have their quotes stripped in the output. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
e37996f More debug logging for completion
c101ed4 Batch: rem/abs/nil?/elem/floor/ceil/round builtins, multi-line collections 7 new builtins (29 total): rem(10, 3) => 1, abs(-5) => 5, nil?(nil) => true elem({10,20,30}, 1) => 20 (works on tuples and lists) floor(3.7) => 3, ceil(3.2) => 4, round(3.5) => 4 Multi-line collections: lists, tuples, and maps can span lines. REPL depth counter now tracks brackets/parens/braces in addition to do/end. Skips brackets inside strings and comments. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4f0c48a Builtin signatures in completions: reduce(list: List, init, fn: Function) All 36 builtins now show full type signatures in autocomplete: reduce(list: List, init, fn: Function) map(list: List, fn: Function) -> List split(str: String, sep: String) -> [String] range(start: Int, end: Int) -> [Int] etc. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5135afc Rebuild WASM with Elm-quality errors. 138KB
4657560 Rebuild WASM: try/catch, string interp, 36 builtins, pipe into sends. 134KB
edb5f08 Type-aware completion engine for REPL and LSP CompletionEngine queries evaluator state for intelligent completions: - Variables in scope with their types - Closures show full signatures: add(a: Int, b: Int) -> Int - Type-aware argument filling: auto-fills best-matching variable e.g., greet(c) when c is a Counter and greet expects Counter - Builtins (36), keywords, actor templates - Ranked by prefix match quality WASM exports: blimp_complete(prefix_ptr, len) returns JSON array. JS API: blimp.complete("prefix") returns completion candidates. Each candidate has: label (display), insert (auto-fill), kind, score. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
0655d28 Rebuild WASM: string interp, rem/abs/nil?/elem, multi-line collections, 29 builtins
47f7a97 Fix: atoms in branch body, random() builtin, marketplace demo Branch body while loop was stopping at .atom tokens, preventing branches like 1 -> :one from having a body. Removed .atom from the outer while condition; atom-as-new-branch detection stays in the newline check. Fixes for+situation, nested situations, and any branch returning an atom value. random(min, max) builtin using xorshift64 PRNG. Marketplace simulation: Account, Network, Thief actors interacting with randomness, bubbles, try/catch over 15 rounds. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4578e7d Typed function parameters with runtime type checking def add(a: Int, b: Int) -> Int do a + b end fn(x: String) -> Int do length(x) end Type annotations on params are now mandatory-compatible (optional for backwards compat, but supported). Runtime type checking: passing a String to an Int param gives TYPE MISMATCH. Actor types work: def inc(c: Counter) -> Int accepts Counter refs. Built-in types: Int, Float, String, Atom, Bool, Nil, List, Tuple, Map, Function. List types: [Int], [String]. Actor types match by template name. Return type annotation: -> Type shown in function display. Closure format shows types: fn(a: Int, b: Int) -> Int do ... end Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
a59f019 7 more builtins: not, size, empty?, flat, zip, uniq, sum (36 total) not(true) => false size([1,2]) => 2 (alias for length) empty?([]) => true, empty?("") => true flat([[1,2],[3,4]]) => [1,2,3,4] zip([1,2], [:a,:b]) => [{1,:a},{2,:b}] uniq([1,2,1,3]) => [1,2,3] sum([10,20,30]) => 60 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
d80514d Pipe into message sends and closures 10 |> actor <- :set(_) substitutes the piped value for _ in args. items |> double pipes into closures (not just builtins). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
d3771aa Fix completion visibility: explicit display:block, background, border
3879d3a Fix completion rendering: use .after(), better styling, scroll into view
d203de9 %Actor{fields} struct literal syntax for spawning actors %Counter{count: 42} spawns a Counter with count overridden to 42. %Greeter{} spawns with all defaults. Supports dot notation: %Shop.Checkout{items: 0}. Sugar for spawn Actor(field: value). Parses by dispatching % + UpperIdentifier to struct path, % + { to map path. Evaluator looks up template and spawns with field overrides like evalSpawnExpr. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
a970ed5 When guards in situation branches, random(), comments in REPL, marketplace demo situation n do x when x > 0 -> :positive x when x <= 0 -> :negative _ -> :zero end Branch guard evaluated after pattern match, before body execution. Fixed: atoms in branch body, comments skipped in piped REPL. random(min, max) builtin with xorshift64 PRNG. Marketplace demo: Account, Thief actors with deposits, withdrawals, theft attempts, bubble on insufficient funds, orelse for recovery. Shows: typed state, guards, situation, bubble/orelse, struct literals, message passing, all working together. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
0b131f7 Debug: add console.log to autoComplete
88cafc8 Elm-style error architecture: pre/post messages, region underlines, operator-specific errors Error messages now show explanation BEFORE the code, then the code with ^^^^ region underlines, then explanation AFTER the code, then hints. Matches Elm's visual structure exactly. Operator-specific type errors: "hello" + 42 -> "I can't use + with String and Int. The + operator works with Int and Float. To join strings, use ++ or concat." [1,2] + [3,4] -> "To join lists, use the ++ operator." Value.typeName() returns human-readable type names for errors. BlimpError now supports col_end for multi-character underlines. post_message field for after-code explanations. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
a00f270 Elm-quality error messages: Did you mean?, line numbers, better hints Undefined variables now suggest closest match via edit distance: "Did you mean \`x\`?" for \`xz\` Unknown functions suggest closest builtin: "Did you mean \`length\`?" for \`lenght\` Error format now includes line number gutter (when available). Source line highlighted in red. Improved type mismatch shows compatible type combinations. No matching handler explains what was attempted and suggests the handler definition. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+2389-1 temperlang/vale-spec-experiment/add-deciduous-boilerplate Mar 24 20:44
7d46c3e add readme instructions for basic sync of deciduous dbs Signed-off-by: Robert Grayson <bobbbygrayson+github@gmail.com>
2a047d8 initial deciduous bootstrap Signed-off-by: Robert Grayson <bobbbygrayson+github@gmail.com>
+35703-7063 notactuallytreyanastasio/blimp/main Mar 24 14:22
926e41e start adding TUI stuff
f1b53f4 Perceus reference counting for BlimpVal Every BlimpVal gets an rc field initialized to 1. RC operations: - blimp_rc_inc: increment on share (list push, variable copy) - blimp_rc_dec: decrement on scope exit, recursive free at zero (strings freed, list items dec'd, map keys/vals dec'd, closure env dec'd) - blimp_rc_reuse: returns same pointer if rc==1 for in-place mutation Codegen inserts rc_dec after list element pushes (list_push already does rc_inc, so the local ref is balanced). Foundation for become in-place reuse and actor death O(1) cleanup. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
499085e Closures and higher-order functions fn(x, y) do ... end creates closures that capture enclosing scope. Closures are first-class values: store in variables, pass as arguments. Named function calls check for closure bindings before builtins. Higher-order builtins: map, filter, reduce, each. These take a list and a closure, calling the closure for each element. double = fn(x) do x * 2 end map([1, 2, 3], double) # => [2, 4, 6] filter([1,2,3,4], fn(x) do x > 2 end) # => [3, 4] reduce([1,2,3], 0, fn(acc, x) do acc + x end) # => 6 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
b1258ab range, head, tail, sort builtins range(1, 5) => [1, 2, 3, 4, 5] for integer sequences. head/tail for list destructuring as functions. sort for integer lists (insertion sort). for i in range(1, 10) do i * i end now works naturally. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
040ac00 Codegen: lists, closures, for loops compile to native Tagged value runtime (BlimpVal) with constructors, list operations, and value extraction. Codegen emits blimp_val_int/blimp_val_list/ blimp_list_push for list literals, blimp_val_closure for fn expressions, blimp_list_map for spread (...), and loop codegen with blimp_list_get/ blimp_val_to_int for unwrapping. New .tagged_val type tag for values that live in the heap world. blimp_print_val for tagged output. Full programs compile: actors + closures + lists + for loops + spread all in native code. [21, 41, 61] from a program that spawns a Counter, maps a list with a closure, and loops over the result. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
b28b738 Fix multiline situation branches: allow bare identifiers in body The handler body parser rejected bare identifiers (like _ -> n) as "probably a typo". This broke situation branches that return variables. Removed the check. Now all situation patterns work: situation n > 1 do true -> n * 2 _ -> n end Works inside fn, def, standalone, with any expression in branches. This was the root cause of all the multiline parsing failures. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
7d61d90 Add blog post #3: Actors Are Alive New post covering diff viewer, multiplexer, actor runtime, evaluator, Elm-style errors, LLVM compilation, REPL, and tooling feedback loop. Split-pane layout for all code sections in posts 2 and 3. Screenshots of diff viewer, multiplexer, REPL, line selection dialog. Image lightbox modal on click. Index updated. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
0320969 Parser fixes, tree-sitter sync, benchmark suite Fix parseStatementPublic to use parseTopLevel (handles def, situation, case, for at top level). Remove def/situation/case/orelse from parseError keyword reject list. Improve branch body termination to detect new branch patterns at line start. Tree-sitter grammar synced with all new constructs. Benchmark suite: fib, actor spawn, ring in Blimp/Rust/Python/Elixir. Known issue: multiline situation with 3+ branches inside def body still fails in piped REPL. Needs deeper parser refactor for branch boundary detection. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
530a306 Fix post 4 REPL embed: init widget, remove broken demo fn
e5b5078 Rebuild WASM with def, string ops, supervision. Add supervision example. WASM now includes: def keyword, concat/split/contains/to_string/ to_int/slice/upcase/downcase builtins, bubble/orelse supervision, CascadeBubble/SelfBubble restart strategies. 119KB module. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
d7c68bd fix canvas
f608d00 List concatenation with + operator [1, 2] + [3, 4, 5] => [1, 2, 3, 4, 5] Works alongside string + for concat and integer + for addition. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5a091ae Supervision: bubble propagation, orelse catches, CascadeBubble restarts siblings bubble keyword signals actor failure. orelse catches Bubble errors and executes fallback. Handler bubbles() annotation declares strategy: - SelfBubble: restart just the failing actor - CascadeBubble: restart all siblings under the supervisor Dot notation defines the supervision tree: Shop.Checkout and Shop.Inventory are siblings under Shop. When Checkout bubbles with CascadeBubble, both siblings get restarted to their default state. Also: spawn now handles dot-notation names (spawn Shop.Checkout). Parent/child relationships derived from type name prefixes. Registry.restartActor and restartChildren reset state to template defaults. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
b000853 Fix REPL depth counter for end), rebuild WASM, add playground The REPL's do/end depth counter didn't recognize end) as closing a block. Now allows ) and , after end keyword. Fixes inline closures in function calls: map(list, fn(x) do x * 2 end) Rebuild WASM with closures, spread operators, for/in, self. Add playground.html with canvas + state panel + cheat sheet. Rays draw on top of all shapes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
f8fc2f9 Pattern matching: destructure maps, lists, tuples in situation/case situation/case branches now do structural pattern matching: - Variable binding: n -> n * 2 - Map destructuring: %{name: n, age: a} -> n - List head/tail: [h | t] -> h - Tuple destructuring: {a, b} -> a + b - Literal matching: :ok, 42, "hello", true, nil - Nested patterns compose recursively - Holes always match (wildcard) Patterns produce bindings that are scoped to the branch body. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
a9b5ca0 Sync tree-sitter grammar with Zig parser Added: fn expressions, def statements, for/in loops, spread operators (... and ..), self keyword, bubble statement, ++ concat operator, spawn with actor_name. Updated conflicts and precedences. All new constructs parse correctly. Known limitation: spawn with dot-notation names (spawn Shop.Checkout) needs Zig parser, tree-sitter treats the dot as dot_access. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
db61ab1 Fix 3+ branch situation parsing: don't skip newlines after body stmt The branch body loop was skipping newlines after each statement, preventing the branch boundary detection from seeing the newline that separates branches. Now the newline check at the loop top handles boundary detection, and looksLikeBranch scans for -> on the next line. Fixes: situation with 3+ branches, recursive fib definition. fib(25) = 75025 in 187ms (tree-walking interpreter). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
7c5804d Embed WASM REPL in blog with canvas visualization Inline REPL with canvas on the index page. "Try Blimp" button on all three posts opens a modal REPL. Widget loads blimp.wasm (96KB), blimp.js, and canvas.js from repl/ directory. Self-contained: one script tag, no dependencies. Canvas shows generative hexagons for actors, rays for message sends. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
c9ba44c Canvas: adaptive grid layout, squares for values, same-state same-art Grid layout tries all column counts and picks the largest cell size. Scales hexagons down when space is tight. Staggered odd rows for hex packing. Raw values (non-actor variables) render as squares. Same type + same state produces identical generative fill. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2517e17 Rebuild WASM: 123KB with def, string ops, supervision, ++, range, merge, type_of, print
3b9de49 WASM REPL: interpreter in the browser with generative canvas Compile the tree-walking interpreter to wasm32-freestanding via zig build wasm. 96KB blimp.wasm module. JS loader class with eval/getState/reset API. Browser REPL with inline prompt, multiline do/end buffering, command history, state sidebar showing variables and actor instance state. Canvas visualization: actors as hexagons with generative fills seeded from state hash. Four pattern types (dots, rings, stripes, blobs). Message sends animate as dashed rays from REPL blob to target actor. State changes flash the border white. Breathing green blob for the global runtime. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
e15ff3c Parser depth counter: use proper word boundaries for do/end detection Word boundary check now uses isAlphanumeric instead of whitelist. Fixes detection of 'do' after digits (e.g., 'situation n > 1 do'). Removed def/situation/case from parse error keyword reject list. Improved branch body termination for new patterns at line start. Known: 3+ branches in multiline situation still needs work. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
a987b2d term_diff: config-driven orchestrator, REPL explorer, cleanup Orchestrator config for max concurrent slots and stall detection. REPL LiveView consuming blimp --introspect JSON. Agent runner session continuation. Commentary prompt refactor. Navigation and diff parser cleanups. Test fixes for async coordination. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
45a5ada def keyword and string builtins def name(params) do ... end creates named functions (sugar for assigning a closure). String builtins: concat, split, contains, to_string, to_int, slice, upcase, downcase. length() now works on strings and maps too. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
365348e Loops, spread operators, and self keyword Three ways to iterate: ...list, fn -> map (returns new list) ..list, fn -> each (side effects, returns :ok) for x in list do ... end -> verbose loop (returns list) Self keyword resolves to current actor's ref inside handlers: on :double do self <- :set(val * 2) end for/in keywords added. .. and ... are lexed as distinct tokens. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
7495ce3 Runtime message log for canvas rays, demo mode, mobile fixes Evaluator tracks message sends in a log so canvas rays fire for sends inside closures (map over actors). WASM state JSON includes messages array. Canvas: ResizeObserver for mobile, re-layout on resize, per-frame size check. Playground: Demo button types out a full session at human speed. Root landing page links to playground. Blog post #4 draft started. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
b31a8d1 Rebuild WASM with multiline fix
b6384c8 Codegen: stub new features, preserve existing compilation Add compileExpr cases for self_ref, for_expr, spread_map, spread_each. Currently return UnsupportedNode (interpreter-only features). Existing actor compilation (counter, bank, traffic_light) unaffected. Full codegen for closures and list iteration needs runtime support for heap-allocated values beyond i64. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
61421ba TUI REPL: live LLVM IR panel, Tab toggles STATE/IR view Source accumulates across submissions, IR updates on each eval with syntax highlighting. libvaxis TEA architecture. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
a081c6b merge, values, type_of, print builtins merge(%{a: 1}, %{b: 2}) => %{a: 1, b: 2} with overwrite on conflict. values(%{x: 10}) => [10] extracts map values as list. type_of(42) => :integer for runtime type introspection. print(val) outputs to stdout and returns val (identity). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1262e6c Compile def to native LLVM functions with recursion def name(params) do ... end compiles to a real LLVM function. Forward-declared so recursive calls work. func_call finds it via LLVMGetNamedFunction. situation branches compile to conditional blocks. fib(40) benchmark: Blimp (compiled): 230ms Rust: 190ms (1.2x faster) Python: 8317ms (36x slower) Blimp compiled is within 1.2x of Rust for pure recursion. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
9378be8 ++ operator for list and string concatenation [1, 2] ++ [3, 4] => [1, 2, 3, 4] "hello" ++ " world" => "hello world" Separate from + (arithmetic/string). ++ is explicitly for joining collections. Lexed as a two-character token. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
be54559 Async actor scheduler: run queue, round-robin dispatch, deadlock detection blimp_send now enqueues messages and pumps a round-robin scheduler instead of processing inline. FIFO run queue tracks runnable actors. Self-send guard prevents deadlock when a handler sends to its own actor. Deadlock detection aborts if scheduler makes no progress. Actor status tracking (idle/runnable/running). Two new test programs: cross_send.blimp and fairness.blimp. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1b827fb Tagged value runtime: BlimpVal for heap-allocated data structures Add BlimpVal tagged union to runtime.c alongside existing i64 path. Supports: int, float, string, atom, bool, nil, list, map, actor_ref, closure. Value constructors (blimp_val_int, blimp_val_list, etc.). List operations: push, get, len, map, filter, reduce, each. Tagged value printer (blimp_print_val). This is the foundation for compiling closures, lists, maps, and higher-order functions to native code. Existing i64-based actor codegen is preserved and unaffected. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
f42e46b Rebuild WASM with 3+ branch fix, fib now works in browser REPL
b84e661 Add blog post #4: You Can Try It Now Covers closures, spread operators, pattern matching with Holes, self keyword, async scheduler, tagged values with Perceus RC, LLVM compilation of lists/closures/loops, WASM REPL in the browser, and the generative canvas. Embedded REPL with Demo button at the bottom. Split-pane layout for code sections. Index updated. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
d760881 Full actor system: LLVM codegen, C runtime, async mailboxes Actors compile to native: state structs, handler functions, handler tables, spawn, message send, become, reply, guards, multi-clause dispatch. C runtime provides actor registry, ring buffer mailboxes, round-robin scheduler. Parser fix for integer patterns. Four example programs. --run and --dump-ir flags on blimp-compile. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+10-2 notactuallytreyanastasio/deciduous/main Mar 23 03:44
8cd5693 release: v0.13.15 - reduce meta-process noise in decision graph Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+98-0 notactuallytreyanastasio/deciduous/main Mar 23 03:37
add1978 log what not to log
+1198-0 notactuallytreyanastasio/blimp/main Mar 22 22:44
af218d8 Add blog post: Actors Are Alive Covers the full day's work: REPL, actor runtime with spawn/refs, Elm-style errors, LLVM codegen, multiplexer overhaul, agent decision trees, design docs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
9f138e0 Add TUI REPL with libvaxis: TEA architecture, vim modes, syntax highlighting New blimp-tui target built on libvaxis (v0.5.1): - TEA (Elm Architecture): Model/Msg/update/view cycle - Split panels: 75% REPL output + input, 25% state sidebar - Vim modes: insert (default), normal (Escape), :q to quit - Normal mode: j/k scroll, h/l cursor, w/b word, gg/G top/bottom, dd clear - Syntax highlighting via existing Lexer token stream - Multi-line input with do/end depth tracking - Input history with up/down arrows - Status bar with mode, counts, depth indicator Separate target: zig build produces blimp, blimp-compile, and blimp-tui. Existing targets unaffected. All tests pass. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+0-153 notactuallytreyanastasio/blimp/main Mar 22 22:44
8b83534 Revert "Add blog post: Actors Are Alive" This reverts commit af218d80f35719de9efdc573bbdc20d8124af1a8.
+327-0 notactuallytreyanastasio/blimp/main Mar 22 22:29
fab4072 Add TUI REPL design doc: TEA architecture, vim navigation, libvaxis Comprehensive design for the modern REPL TUI: - TEA (Elm Architecture): Model/Msg/Update/View cycle - Vim modes: insert (default), normal (Escape), command (:), search (/) - Full vim keybindings: hjkl, w/b/e, 0/$, #, gg/G, dd, yy, p, u - Syntax highlighting via existing Lexer token stream - Tab completion from env/registry/builtins/keywords - Scrollable split panels with mouse resize - Multi-line TextBuffer with undo/redo - Status bar with mode, actor count, cursor position - Built on libvaxis (Zig 0.15 TUI framework) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
798db7c ignore zig out code
+1003-241 notactuallytreyanastasio/blimp/main Mar 22 22:20
f37d5cb Merge term-diff/deep-look: multiplexer overhaul, deciduous integration URL-parameterized agents, line selection, dark mode, interactive permissions, agent decision trees via deciduous, LiveView REPL route. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+1234-312 notactuallytreyanastasio/blimp/term-diff/deep-look Mar 22 22:16
eb2f2b8 Multiplexer overhaul: URL params, line selection, dark mode, permissions, deciduous Major term_diff changes from this session: Multiplexer: - URL-parameterized agent state (/agents?panes=1,2&dark=1) - Sidebar-driven pane management (click to toggle open/close) - Per-pane chat input for continuing conversations - Dark mode toggle with full theme support - Interactive permission approval (Allow/Deny buttons) - Runner defaults to --permission-mode default (not plan) - PTY wrapper removed for clean stdin on permission responses - LiveView navigation between Diffs/Agents/REPL tabs Diff-to-Agent flow: - Line selection in diff viewer (click + shift-click + drag) - LineSelection pure module with tests - Floating commentary prompt on selection - Submit spawns agent and navigates to /agents?panes=<id> - LineSelect JS hook for mouse events Agent decision trees: - deciduous_root column on runs table - Deciduous wrapper module (create_root_node, build_agent_preamble) - Orchestrator injects deciduous context on every dispatch - Agents get root node ID and active agent info in system prompt LiveView REPL: - /repl route with dark terminal + state sidebar - Spawns blimp binary as Erlang Port Commentary: - Added --permission-mode plan to AI.Claude for commentary calls Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+222-0 notactuallytreyanastasio/blimp/main Mar 22 22:10
9bcddcc Add agent decision tree design doc: root nodes, overlap, recovery, merge Covers how agents integrate with deciduous: - Every agent gets a root goal node, ID stored on run record - System prompt injection with deciduous context and active agent info - Overlap detection via file lists and keyword matching - Dead agent recovery: subtree persists, user can resume from last outcome - Decision merge across agent subtrees - Conflict detection and user resolution Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+527-53 notactuallytreyanastasio/blimp/main Mar 22 22:05
33d6679 Add actor registry: templates, spawn, refs Actor definitions are now templates (struct types). spawn creates instances with independent state and unique refs. - registry.zig: ActorRef, ActorEntry, ActorTemplate, Registry with registerTemplate, spawn (with overrides), getInstance, updateState - value.zig: replaced actor_instance with actor_ref (lightweight handle) - token.zig: added kw_spawn keyword - ast.zig: added spawn_expr node - parser.zig: parse spawn Counter and spawn Counter, count: 10 - eval.zig: actor_def registers template, spawn_expr creates instance, message_send resolves through registry - errors.zig: templateNotFound, alreadyDefined errors Multiple spawns are independent: c1 = spawn Counter => ref<Counter:1> c2 = spawn Counter => ref<Counter:2> c1 <- :increment => 1 c2 <- :increment => 1 (independent state) All tests pass. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+3501-2860 notactuallytreyanastasio/blimp/main Mar 22 22:04
9342f6a Add spawn keyword to tree-sitter grammar - spawn_expression: spawn Counter or spawn Counter(count: 10) - Added to highlights.scm as keyword - Corpus tests for basic spawn and spawn with state overrides - 63/63 tree-sitter tests pass Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+25-0 notactuallytreyanastasio/deciduous/main Mar 22 22:02
e0114e6 some claude updates
d3fd21b add updates to decision graph
+323-0 notactuallytreyanastasio/blimp/main Mar 22 21:47
75e1384 Add actor runtime design doc: memory model, scheduler, registry Covers the full runtime architecture: - Per-actor arenas with Perceus RC (in-place reuse on refcount 1) - Deep copy at message boundaries, actor refs are lightweight handles - Preemptive scheduling via reduction counting (BEAM-style, 4000 default) - FIFO run queue, full stack snapshot on yield, Zig async/suspend - Global actor registry for message routing and supervision - Supervision from dot-notation names (Shop.Checkout supervised by Shop) - Five implementation phases from registry to supervision Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+375-0 notactuallytreyanastasio/blimp/main Mar 22 14:39
8b92a5f Add LLVM codegen: compile Blimp expressions to native executables New blimp-compile target using LLVM 20 C API via Zig's @cImport: - codegen.zig: AST -> LLVM IR (integers, floats, binary/unary ops, comparisons) - compile_main.zig: CLI that parses, compiles, emits object, links with cc - runtime.c: minimal C runtime (blimp_print_int, blimp_print_float) - build.zig: separate blimp-compile target linking libLLVM, does not affect REPL Tested: "1 + 2 * 3" compiles to native binary, outputs 7. REPL continues to work without LLVM dependency. All 214 Zig tests pass, no regressions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+919-0 notactuallytreyanastasio/blimp/main Mar 22 14:33
21f7ed2 Add compilation pipeline design document: AST to LLVM IR via C API Comprehensive design doc covering: Blimp IR (typed SSA), lowering passes for all constructs (pipes, actors, become, message send, situation/case), LLVM C API integration from Zig, runtime type representation, actor runtime architecture (mailbox, scheduler, per-actor arenas), and five build phases from expressions to WASM. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+535-1 notactuallytreyanastasio/blimp/main Mar 22 14:32
b4ddbd7 Fix last failing tree-sitter pipe test: hole in chained pipe args 61/61 tree-sitter corpus tests now pass. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
a1fff0d Add REPL design document: architecture, evaluator, state sidebar, errors Comprehensive design doc covering the dual-mode REPL (TUI + plain), expression evaluator, actor runtime, Elm-style errors, multi-line input, state sidebar, and LiveView integration. Living document. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
+18644-2518 notactuallytreyanastasio/blimp/main Mar 22 14:20
a52cabd Add expression evaluator, actor runtime, and REPL New modules: - value.zig: runtime Value type (int, float, string, atom, bool, nil, list, tuple, map, hole, actor_instance) - env.zig: lexically scoped variable environment with allBindings() - eval.zig: tree-walking interpreter for all expression and actor nodes - builtins.zig: 9 built-in functions (length, max, min, append, reverse, lookup, put, keys, now) - errors.zig: Elm-style rich error reporting with source context and hints Evaluator handles: literals, binary/unary ops, assignments, function calls, pipes with _ substitution, lists, tuples, maps, dot access, orelse, situation/case pattern matching, actor definitions, message send (<-), become, reply, guards. REPL features: - TUI mode with 75/25 split (REPL left, state sidebar right) when TTY - Plain mode with parseable output when piped (for LiveView consumption) - Multi-line input: tracks do/end depth, accumulates until balanced - State sidebar shows all variables after each evaluation - Elm-style errors: UNDEFINED VARIABLE, TYPE MISMATCH, DIVISION BY ZERO, UNKNOWN FUNCTION, NOT AVAILABLE IN REPL, NO MATCHING HANDLER, etc. Actor semantics: become updates state for next message (not current scope). 214 Zig tests pass. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
b566fff Add case keyword, type checker, and enforce explicit types - case keyword: exhaustive pattern matching counterpart to situation Separate case_expr AST node, parseCase mirrors parseSituation - Type system (types.zig): Type tagged union with structural equality, subtyping (Int->Float, nil->list/map/actor, hole as wildcard), tuple {A, B} and map %{K => V} parsing, scoped TypeEnv - Type checker (checker.zig): validates state defaults, become fields, handler param types (required), return types vs reply, binary ops - Handler params now typed: on :charge(payment: Payment) -> Receipt do - parseTypeName extended for tuple {A, B} and map %{K => V} syntax 100 Zig tests pass, zero warnings. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
27 pushes github.com/notactuallytreyanastasio
phangraphs — Phish 3.0 Jam Analytics
phangraphs
Ruby Waves
.455
BATTING AVG
20 JC · 44× played
Avg 15.0m · Peak 38:10 · 🎧 34/44
Longest: 38:10
2019-07-14 · Alpine Valley Music Theatre
Most Loved: 104 likes
2019-07-14 · Alpine Valley Music Theatre
📊 91% Set 2 · 19/20 JCs from Set 2
Last: 2025-12-30 (85d ago) · avg every 56d
Best year: 2022 — 4/6 JC
"Debut. Compact, and coyly > from Halley's Comet, playful licks, a meandering, br..."
TAP TO SEE AND PLAY JAMS
Ruby Waves .455
TAP TO FLIP BACK
20 jams
2019-06-18 9:37
Budweiser Stage · Toronto, Ontario, Canada
Debut. Compact, and coyly > from Halley's Comet, playful licks, a meandering, breezy, and open-ended feel following the main chorus, offers a glimpse of what soons becomes a signature, second set staple.
2019-06-23 12:25
Merriweather Post Pavilion · Columbia, MD
First improvisational version wastes no time delving into a dark swampy zone with Page's synths leading the way, Mike going to the envelope filter to add some extra filthiness. Fish picks up the pace and Trey moves to a nice low-key groove with some "Weekapaug"-y tones, with some "Crosseyed" quotes for funsies. The band gooses some woos, then finds a nice -> into "Twist".
2019-06-29 13:38
BB&T Pavilion · Camden, NJ
Smoothly pivots to a fuzzed-out and warm space, then grows darker and heavier with some real nice work from Mike in particular. Page flashes his stuff on the keys as the jam grows busier and more intense, and with a few strums of his guitar Trey moves the band into a quicksilver blissful upbeat hose jam. Things get murkier and heavier, a perfect setting for "DDHVL" to emerge.
2019-07-14 38:10
Alpine Valley Music Theatre · East Troy, WI
An unflagging improvisational behemoth that moves from moody rocking out to a low-simmering groove to a propulsive Trey-led anthemic rush to swampy blissfulness to reggae (!) to motorized power riffing with a thrilling peak to ambient space to a surprising and welcome effects-laden gallop into the unknown to a breathless and ferocious finale (and second ambient deep space segment, for good measure) with neither muss nor fuss. At the time of writing, the longest modern era jam and seventh-longest ever to date, and not a second wasted on top. Listening to this masterpiece is non-negotiable.
2021-08-11 15:57
Hersheypark Stadium · Hershey, PA
A wonderfully multi-faceted jam that touches on fiery effects-laden minor key grooviness, a twinkly Page-heavy relaxed jam, and a superb rockout that builds to a gigantic peak before coming to an echo-laden close. Right up there with any of the year's lengthier behemoths. > into "CDT".
2021-10-20 29:59
Matthew Knight Arena · Eugene, OR
Moves from a warm and hearty jamming zone into something darker and Mike-driven, then Trey hits on a really nice repeating riff as the playing gets sparser and more delicate. The band moves smoothly into "rock out, man" mode, then an absolutely wild disco groove emerges, eminently danceable and tinged with weirdness. A thirty minute jam that feels like fifteen, one of the many hallmarks of 2021.
2022-06-03 11:05
Ruoff Music Center · Noblesville, IN
"Ruby Waves" asserted itself early as a Phish staple, and the song's versatility, as evinced on 12/30/19, and again, here, seemingly cements its status as part of the new Phish order. Powerhouse play, replete with "Lizards" licks and impassioned improvisation, creates, a la "CDT," a new sort of joy, erasing anything by way of sentimentality and flips the set, which unfurls as if from an earlier era.
2022-08-05 14:33
Atlantic City Beach · Atlantic City, NJ
Ruby emerges from the ether of a big "Down with Disease." This jam gallops along through various vignettes in butter-smooth fashion (including a brief passage of dissonant jamming) before the band lands on a super connected major key rock groove. Trey begins a repeated lick that builds patiently to an absolutely incendiary hose-y peak. Fishman kicks it into an overdrive with a tempo change and the band segues into the "DWD" ending in once again, butter-smooth fashion.
2022-09-01 17:05
Dick's Sporting Goods Park · Commerce City, CO
The band is locked in early and gives us a series of scorching, rolling peaks that modulate and are eventually capped off by soaring trilling from Trey. The jam then downshifts into a not quite ambient section that maintains its forward momentum, growing more hypnotic as play gradually accelerates towards another peak and a clean return to end the song.
2022-12-29 16:03
Madison Square Garden · New York, NY
Cool version > from "YEM." Straight from the song, proper, Trey wastes no time, leaning into his solo, a shearing sort of sound carving up space and backed by great Fish. As play seemingly cools, Trey augments his tone, his play offset by Page's inspired, sonic soundwaves. Form and structure dissolve into wild and inventive improv, full-band jamming near raucous at times, celebratory, and ubeat. More patterned play, highlighted by dynamic Fish, breaks for a nasty "Heartbreaker" tease and a return to the song's riff, thus resolving another memorable MSG moment.
2023-02-24 ?
Moon Palace · Quintana Roo, Cancun, Mexico
Veritable monster of a version. The band enthusiastically sets up a passage of dense, funky psychedelia off the back of Fish's propulsive engine. Inspiring play follows as Trey, Mike and Page all shine with affected tones and loops. Without ever dipping in energy, the band then patiently builds to a seriously rocking peak section before returning to the main theme of "Ruby Waves."
2023-07-14 26:10
Ameris Bank Amphitheatre · Alpharetta, GA
A Fish propelled, space hopping rocket that sizzles thanks in large part to the drummer's restless shuffle. A big version that only gets bigger, gathering speed from a brief orbit near a certain planet, it explodes in loopy peaks before a full return.
2023-10-11 30:48
Ervin J. Nutter Center, Wright State University · Dayton, OH
A multi-section monstrosity that features highly inspired melodic playing, atypical modulations, an extended passage based on either "Roll with the Changes" or "Paradise City", and a false ending that catalyzes a deep dive of inter-dimensional sonic alchemy rarely heard in the modern era. Must-hear.
2024-07-31 18:18
Chaifetz Arena, Saint Louis University · St. Louis, MO
> "Twist," a great, driving version which finds Trey (possibly) teasing "Holiday in Cambodia" after the ten-minute mark. Either way, dramatic, somewhat (pleasantly) droning play continues until, around 13:15, Trey strums - signals - a decisive shift, and play becomes more plucky, with more by way of sonic separation, before the jam bleeds out and > tease-driven "NMINML."
2024-08-16 15:19
The Woodlands · Dover, DE
Bananas - there's possibly something like six (or whatever) key changes - Phish arguably performs a parody of a "Type II" Phish song. While there may be segments one might not recommend, it's almost as if there's willful-sh*t in this version. And so perhaps you'd rec. it all. It's crazed. The ending might leave you thinking, "WTF?", too. Awesome. > "Pillow Jets."
2024-08-16 0:38
The Woodlands · Dover, DE
> from "YPC" to complete the version.
2024-08-30 21:09
Dick's Sporting Goods Park · Commerce City, CO
Act One: Listen for Fish playing with the rhythm of Trey's feet. Act Two: Enjoy .... Intermit. Act Three: Listen to Trey listen to Page's melody (11:14-ish), follow the line, and go CRAZY. For a bit, it sounds something like "Guyute" chasing "David Bowie" around "Esther's" cemetery before... Well, while there is a conclusion, the whole thing is better off listening to, rather than reading about. It is that cool.
2024-12-29 37:49
Madison Square Garden · New York, NY
A colossal, must-hear "Wave" washes over Madison Square Garden. The jam expands exponentially through multiple sections, including contemplative but optimistic melodicism, driving rhythmic play, and harmonically dense electro-funk before finally crash landing back to the "Ruby Waves" theme, concluding the epic journey.
2025-04-22 23:10
Bill Graham Civic Auditorium · San Francisco, CA
> from "NMINML". Score one for another massive "RW". Never stagnant and never wandering, there are few notes wasted as the band moves from theme to theme. There is no reliance on tropes as they keep the jamming fresh. The only thing unlikable is the jarring return to the song which seemingly comes out of nowhere.
2025-06-28 30:18
Moody Center · Austin, TX
As yet another outsized, aquatic crimson portal opens up, the jam begins in a swirling rhythmic push. This platform remains steady until play breaks into spacier territory around the 11 minute mark. Mellowing space then forms up into darker territory, and oscillates back and forth between brighter and darker textures/moods. Then, the band begins another push towards an anthemic zone, executing a steady climb towards a bright-sized peak, before after-burning into introspective textural territory and > "Monsters".
phangraphs Phish 3.0 Jam Analytics
AIM Chat - Terminal
Online (0)
jeff 02:52 AM
What is up y'all
jeff 03:44 AM
Thanks for visiting my website
jeff 03:51 AM
Trying from mobile let’s see what’s up
Uechi Nerd 03:54 AM
Hi, greetings from Planet Crackpot!
jeff 03:55 AM
oh man what's up
jeff 03:56 AM
Hey everyone
Uechi Nerd 03:56 AM
winding down with a beer or three
Uechi Nerd 03:57 AM
desktop version
Uechi Nerd 04:01 AM
Disappointed that War does not lead to actual combined-arms conflict.
jeff 04:01 AM
that would be hard to conjure
jeff 04:02 AM
I am so excited that this works and is a successful combination of windows and old apple lol
Uechi Nerd 04:02 AM
Probably for the best, actually. That shit is very very messy.
Uechi Nerd 04:02 AM
I am intrigued and happy it works!
Uechi Nerd 04:03 AM
I respect the wizardry.
Visitor7804 04:05 AM
this is delightful.
jeff 04:06 AM
hell yeah visitor 7804, this is livin' brother
guy4get 04:07 AM
i've never felt so alive
EarlofVincent 04:09 AM
Commencing experiment in 3....2....
jeff 04:14 AM
1
leah 04:16 AM
hi!
leah 04:16 AM
this is lovely
jeff 04:21 AM
hi! lol I was just like what if I combined Mac and windows and added a flower tree of life and called it my homepage and then smoked some weed and made it happen in an empty mall in Connecticut
B. Droptables 10:51 AM
Always cool to play with your toys.
Visitor1128 08:47 AM
yo!
Visitor1128 08:48 AM
i can barely work my phone. what am i doing here?
jeff 09:04 AM
the phone is not optimized yet but it "kind of works" I am sorry lol
jeff 09:04 AM
you have to pick a username, then it goes to the chat, then if you hit the bottom tabs it'll let you go to the app sections.
Bobdawg 04:43 AM
Hi everybody this is my blog I hope you enjoy it I did some more changes and anyone can write a post here now for me.
dinkleberg 01:45 AM
ALL HAIL TREE OF LIFE
jeff 08:55 PM
hi Hacker News
jeff 04:28 PM
hey there I am not really Jeff
Mal Function 05:34 PM
Hey! Please reveal... how exactly do I actually use losselot on my Mac? I've run the git clone commend in Terminal.app and seem successfully to have installed into a new <losselot> sub-folder in my home folder but now???