Logs, #o11y, @logflare_logs and Elixir at @supabase. Previously @authoritylabs.

Joined June 2007
267 Photos and videos
Pinned Tweet
Our latest power user: > 1000 events/second
1
1
16
Chase Granberry retweeted
One of the first Elixir libraries I wrote was a NIF for the Arcade Learning Environment. It was really bad Elixir. Anyway, I revamped it and here's a video of Axon playing Breakout from a Livebook
1
2
21
1,110
Chase Granberry retweeted
QuackDB 0.5 is out ๐Ÿฆ† Iโ€™m increasingly convinced that @duckdb is becoming one of the best storage choices for hobby to medium-sized projects. Postgres is still the obvious default for highly concurrent OLTP systems, but many small and medium products are read-heavy, append-heavy, analytical, or operated by a small team. For those workloads, DuckDBโ€™s columnar execution model, vectorized engine, rich SQL surface, and embedded/local-first deployment model can be a much better fit. I intend to use DuckDB as the primary storage layer for the platform Iโ€™m building, so QuackDB focuses on the parts I need in a real Elixir app: supervision, connection pooling, Ecto, fast append paths, dataframes, telemetry, and helpers for DuckDBโ€™s analytical SQL. 0.5 focuses on making the Ecto and analytical side much more complete: - append through Ecto with defaults and returning - using an Ecto repo directly with QuackDB native query/append APIs - advanced join patterns, including semi/anti and ASOF-style queries - DuckDB star/COLUMNS expressions in SQL and Ecto - broader LIST/MAP/STRUCT helpers - PIVOT, UNPIVOT, GROUPING SETS, ROLLUP, and CUBE builders - LIST lambdas in Ecto with `fn` syntax and `case_when` - better nullable/schema type handling for append-heavy workloads QuackDB also continues to cover the broader integration surface: supervised DuckDB, DBConnection/Ecto, native append, Explorer dataframes, Table.Reader results, Geo/WKB, telemetry, managed DuckDB binaries, and DuckDB-specific SQL helpers. github.com/elixir-vibe/quackโ€ฆ
1
6
51
1,856
Chase Granberry retweeted
Announcing deflua.com ๐ŸŽ‰ The new home for Lua, the pure-Elixir Lua 5.3 VM for @elixirlang. Scriptable, sandboxed, stupid easy. Embed untrusted code (AI agent tools, user formulas, plugins) all on the BEAM, zero NIFs. Plus a live playground ๐Ÿ‘‡
12
37
242
9,713
Slack needs to auto tag messages that were AI generated.
3
50
Have it build tools for itself. What are we calling this now? Code mode?
Unpopular opinion: If your process is even semi-predictable and runs in a loop, you're probably burning money on tokens and don't need an agent ๐Ÿ”ฅ๐Ÿ’ต๐Ÿ”ฅ Use AI to build a good old-fashioned program that handles the workflow and only calls an agent as a fallback๐Ÿค– Thank me later๐Ÿ˜‰
1
3
214
Chase Granberry retweeted
I'm pretty sure the only reason to use Kafka for telemetry data in 2026 is muscle memory. A simple, open source, S3-backed pipeline can shuttle 1Gb/s of logs to @ClickHouseDB for $200/mo with 2.8s p50 latency. Fast enough for us. opendata.dev/blog/ingesting-โ€ฆ
12
23
336
90,247
you mean there is nuance in the compute storage separation discourse? strange
the default "puff into {nvme, dram}" works well for most use-cases, but in cases of high, sustained QPSโ€”coupling compute and storage is best this is what we mean by "compute-storage flexible"
117
wait wut
Don't know how I got this far in my career without realizing that us-east-1a/b/c are just random identifiers and 1a for one account might be 1c for another
1
138
Chase Granberry retweeted
Email > Slack Iโ€™ll fight for this one
I have probably never sent an email to an employee of Linear. Only when there is an external person involved. Itโ€™s Slack or Linear
15
4
126
23,282
Been thinking about an email interface to Slack for boomers
Slack > email. I will die on this hill.
1
4
2,394
Chase Granberry retweeted
Until now, LiveVue supported only two SSR modes: โžก๏ธ Vitejs-based (for development) โžก๏ธ Nodejs (for production) Now I'm introducting a third one: โœ… QuickBeam It's running QuickJS as NIF, which is more performant. Now a default mode! Thanks @dan_note for contribution!
1
1
18
482
Chase Granberry retweeted
erlang_quic 1.3.0 is out. First production-ready release. Pure-Erlang QUIC HTTP/3, zero C deps. - RFC 9000 / 9001 9114 / 9204 - Priorities, datagrams, CONNECT - -proto_dist quic for clusters - OTP 27 github.com/benoitc/erlang_quโ€ฆ
2
16
112
4,518
Chase Granberry retweeted
Apr 24
Replying to @badlogicgames
PI is now over 50% of agent usage at Shopify internally.
30
49
1,185
103,582
wat
Reach can now trace data flow from Elixir through QuickBEAM's JS runtime and back. One program dependence graph across two languages and two runtimes. Also: dead code detection now produces near-zero false positives across 5 real codebases. The line between frontend and backend is getting thinner. More coming soon. github.com/dannote/reach/relโ€ฆ
1
9
670
Chase Granberry retweeted
This is my first big Elixir project. I reached for it because I needed to manage the state of a lot of docker compose clusters to run the dev servers and docker containers to run agents. The supervisor tree was crucial to getting it working.
1
1
10
747
Chase Granberry retweeted
pure implementation of QUIC in erlang performs well now . github.com/benoitc/erlang_quโ€ฆ
1
6
108
6,053
Chase Granberry retweeted
Reach 1.5.0 โ€” effect classification accuracy went from 11% to 89%. The analyzer couldn't tell ๐š๐šŽ๐š™๐š˜.๐š’๐š—๐šœ๐šŽ๐š›๐š!() from ๐™ด๐š—๐šž๐š–.๐š–๐šŠ๐š™(). Now it can. What changed: โ€” Alias/import resolution. ๐šŠ๐š•๐š’๐šŠ๐šœ ๐™ต๐š˜๐š˜.๐™ฑ๐šŠ๐š› then ๐™ฑ๐šŠ๐š›.๐šŒ๐šŠ๐š•๐š•() was invisible to coupling analysis. Multi-alias ๐šŠ๐š•๐š’๐šŠ๐šœ ๐™ต๐š˜๐š˜.{๐™ฐ, ๐™ฑ} and ๐š’๐š–๐š™๐š˜๐š›๐š too โ€” Cross-module effect inference. Pure functions recognized transitively across modules โ€” Plugin ๐šŒ๐š•๐šŠ๐šœ๐šœ๐š’๐š๐šข_๐šŽ๐š๐š๐šŽ๐šŒ๐š/๐Ÿท callback for all 8 built-in plugins. ๐š๐šŽ๐š™๐š˜.๐šŠ๐š•๐š• โ†’ read, ๐š๐šŽ๐š™๐š˜.๐š’๐š—๐šœ๐šŽ๐š›๐š! โ†’ write, ๐šŠ๐šœ๐šœ๐š’๐š๐š— โ†’ pure โ€” On Elixir 1.19 reads compiler-inferred types from ExCk BEAM chunk 7 new commands: ๐šŒ๐š˜๐šž๐š™๐š•๐š’๐š—๐š, ๐š‘๐š˜๐š๐šœ๐š™๐š˜๐š๐šœ, ๐š๐šŽ๐š™๐š๐š‘, ๐šŽ๐š๐š๐šŽ๐šŒ๐š๐šœ, ๐š‹๐š˜๐šž๐š—๐š๐šŠ๐š›๐š’๐šŽ๐šœ, ๐šก๐š›๐šŽ๐š, ๐šŒ๐š˜๐š—๐šŒ๐šž๐š›๐š›๐šŽ๐š—๐šŒ๐šข. All take a path filter: ๐š–๐š’๐šก ๐š›๐šŽ๐šŠ๐šŒ๐š‘.๐š‘๐š˜๐š๐šœ๐š™๐š˜๐š๐šœ ๐š•๐š’๐š‹/๐š–๐šข_๐šŠ๐š™๐š™/ Tested on 7 real codebases (up to 817 files). Zero crashes, 30% faster. github.com/dannote/reach/relโ€ฆ
1
35
1,341
Chase Granberry retweeted
PgQue v0.1.0 is out. PgQ -- the Postgres queue system built at Skype 20 years ago for 1B-user-scale workloads -- repackaged for the managed-Postgres era. One SQL file. No C extension. No external daemon. pg_cron to tick. Why bother reviving a 2007 architecture? Every major Postgres queue in production today uses some flavor of SKIP LOCKED UPDATE/DELETE. It works under light load. When you have more data and higher load, it degrades predictably. Then you get posts like these: - Brandur at Heroku, 2015: 60k job backlog in one hour from a single open transaction - PlanetScale, 2026: death spiral at 800 jobs/sec - River issue #59, awa issue #169 and so on, Oban's partitioning work, PGMQ's autovacuum tuning guide and duct-taping with pg_partman The core issue is how Postgres MVCC is implemented and how we deal with it. Dead tuples in the hot path, xmin horizon pinned, vacuum falling behind, query performance quickly degrades. This happens every time you run pg_dump, execute an analytical query, or have a lagging/unused logical replication slot. PgQ solved this in 2007 with snapshot-based batching and TRUNCATE rotation -- zero dead tuples in the event path, by design. But PgQ needed a C extension and an external daemon. Which means it doesn't run on RDS, Aurora, Cloud SQL, AlloyDB, Supabase, or Neon -- i.e., where most Postgres lives now. PgQue closes that gap. ๐Ÿ’Ž Pure SQL PL/pgSQL (PgQ engine) ๐Ÿ‘ฉโ€๐Ÿ’ป \i sql/pgque.sql -- you're done ๐Ÿ•‘ pg_cron replaces pgqd (optional, recommended) ๐Ÿ’ป Python, Go, TypeScript client examples shipped ๐Ÿ’™ Apache 2.0 Trade-off: end-to-end event delivery latency is up to a second, it depends on ticking frequency. If you need sub-3ms job dispatch, use River, Oban, or graphile-worker (and avoid anything that blocks xmin horizon). If you need high-throughput event streaming with fan-out inside Postgres -- Kafka-shaped, without Kafka and dealing with transactional outbox implementation -- this is the right shape of tool. Kudos to Marko Kreen and Skype engineers who implemented this decades ago, for the original PgQ, and to Alexander Kukushkin whose recent "Rediscovering PgQ" talk brought this quiet corner of the Postgres ecosystem back into view. Stars, issues, PRs, and honest criticism all welcome. Link ๐Ÿ‘‡
6
50
352
34,456
Chase Granberry retweeted
for the erlang, elixir, and gleam fans - you can now use DOs to create and manage supervision hierarchies of child DOs ๐Ÿ˜Ž
In case you missed it, Project Think -- that's @threepointone's Workers-native agent harness -- supports sub-agents using Durable Object Facets: blog.cloudflare.com/project-โ€ฆ That's actually a different use case for facets than the one I presented Monday: blog.cloudflare.com/durable-โ€ฆ In this case, the facet isn't running agent-generated code -- the facet is running a regular, static DurableObject class exported by the same Worker as the parent DO's class. This is not actually documented yet, but you can refer to your own Worker's exported Durable Object classes using `this.ctx.exports.ClassName`, and provide that when starting a facet. In other words, this allows you to essentially run instances of a Durable Object class that are owned by some other instance and stored together with it. The child gets its own private SQLite database, but has a zero-latency connection to the parent since they are always co-located. Useful for running a sub-agent. If this makes no sense... I'm sorry, it's my fault. I've really outdone myself on the "nobody understands this" scale with facets. Just... use Think and don't worry about it.
7
7
132
17,254
Chase Granberry retweeted
The untold engineering story here is that this is powered by JS scripts that customers can author to validate and transform an event as it comes in. We built that by compiling JS to wasm via javy and executing wasm in elixir via wasmex (with some tight execution guarantees as it's on the critical path). I know sandboxes are all the rage right now, but elixir really is incredible for this sort of thing.
Trigger customer messaging directly from @stripe, @clerk, @WorkOS and @supabase. No webhook glue code or third party services needed.
3
9
57
9,053