๐ Introducing sqlite-js-stream: Litestream, rewritten in TypeScript for @nodejs.
Same LTX format; runs inside your process as an npm package. No sidecar, no extra moving parts.
Written by an AI agent, reviewed by a human.
https://t.co/2PyUNKaskX
An AI assistant calling a tool has no human to catch a silent response change.
Each of @Spendesk 's MCP tools is built on a Massimo-generated client from their OpenAPI specs, so a contract change is a @typescript error in development or CI, not a broken tool call in production.
Meet sqlite-js-stream: Litestream, rewritten for Node.js in TypeScript
It speaks the same LTX format as Litestream, so the two can read each other's files. Stream your SQLite WAL directly to S3 or local storage, and restore from it.
But the real breakthrough is not just the port. It's how you deliver it. Litestream requires a Go sidecar, its own config, and a separate binary to manage on every deploy. sqlite-js-stream is an npm package that runs inside your Node.js process. No sidecars, no extra moving parts.
That sidecar overhead? It's the main reason SQLite hasn't seen wider adoption in production. Matteo called it, and I agree.
Here's the kicker: the entire port was built by an AI agent running locally on two DGX Sparks, with a human in the loop for planning, review, and final decisions.
If SQLite backups were just one npm install away, would you finally run SQLite in production?
We never planned to build a memcached client.
But every existing option became the bottleneck in our stack. Gateway request deduplication demanded a client that could handle real production traffic at scale. Nothing out there could keep up.
When something sits this close to the hot path, I expect three things: strict opaque-token verification on every response, zero runtime dependencies beyond node:net, and real-world tests against memcached servers with authentication and TLS.
This client delivers on all three.
Whatโs the slowest link in your stack that everyone ignores?
Jarred Sumnerโs argument is that for JavaScript and TypeScript to stay relevant in an AI world, where moving a codebase between languages is suddenly cheap, they have to get as fast as Rust or Go.
๐ค๐ข๐ฏ๐๐ค๐ค๐ฆ๐ด๐ด๐๐ฐ๐ฐ๐ญ didn't exist in @platformatic/mcp until @Spendesk needed a role check that sees the full request context.
They built it, plus AJV validation, ๐ต๐ณ๐ข๐ฏ๐ด๐ง๐ฐ๐ณ๐ฎ๐๐ฐ๐ถ๐ต๐ฆ๐๐ค๐ฉ๐ฆ๐ฎ๐ข and ๐ฎ๐ค๐ฑ๐๐ข๐ญ๐ญ๐๐ฐ๐ฐ๐ญ, and contributed all of it upstream.
node:vfs is in @nodejs core.
Our follow-up covers what shipped in 26.4, 26.9, and 26.10: new mount model, ZIP provider, native addons, node:ffi, SEA support, --vfs-load.
Plus two corrections to our first article.
https://t.co/Z1PDEEDdub
memcached has 3 wire protocols.
Most @nodejs clients still use the oldest one: matching error strings, no way to verify a response is actually yours.
The meta protocol (1.6+) fixes this with opaque tokens. We built ours on it exclusively.
Which one does yours use?
Memcached offers three wire protocols. Reality tells us that most @Node.js clients pick the wrong one, and that exact choice has real consequences.
The classic text protocol relies on string matching for error detection. A single typo or unexpected message can silently break your clientโs sync. The binary protocol is no longer maintained.
The meta protocol in memcached 1.6 changes the game. It brings compact commands, length-prefixed data, CAS on every operation, and an opaque token with every response so your client always knows it matched the right request. We use it exclusively for a reason.
Anyone can make a fast client. Building one that is fast and never silently wrong is what actually matters.
Is your cache client verifying every response, or are you trusting luck?
๐๏ธ A new Banter episode is coming soon!
@NodeConfEU came back after a year off, new team, new country, and one deliberate decision: ๐ง๐จ๐ญ๐ก๐ข๐ง๐ ๐๐๐จ๐ฎ๐ญ ๐๐ ๐จ๐ง ๐ญ๐ก๐ ๐ฌ๐๐ก๐๐๐ฎ๐ฅ๐.
@lucamaraschi & @matteocollina will debrief the whole thing.
Instead of mentioning Ai, it ranged from @nodejs core internals, such as the new Foreign Function Interface or Garbage Collector internals, to an โinstruction manualโ for the EU CRA, and a Tokio PR.
Register now โฌ๏ธ
๐ Platformatic x Spendesk
@Spendesk's MCP server is retrieval-only by design.
Assistants can answer questions about payables or suppliers, but cannot approve or pay.
Write-action tools are built and gated behind a security review until the write path earns production trust.
Hereโs a lesson from @matteocollina deep dive into our memcached client:
A single pipelined connection outperformed a ten-connection pool from legacy @nodejs clients. Same server, same loopback, same Node version.
๐ก The result? Our approach delivered triple the throughput of the fastest alternative.
Why did the old clients need connection pools? They couldnโt pipeline efficiently. With a smarter parser, you unlock performance: pipeline on a single connection, parse by length for speed, and merge writes for efficiency. No extra cost, just better engineering.
Pooling still matters when you need to handle large values that could block a pipelined connection. Thatโs what poolSize is for. But letโs be clear: pooling should solve real scaling problems, not compensate for slow parsing.
How many connections does your busiest cache client open, and why?
๐๏ธ Here is the claim.
For an experienced programmer, reading AI-generated code is not diligence; it is a bottleneck.
@lucamaraschi & @matteocollina, two engineers working through a question that the whole industry is currently avoiding.
Register โฌ๏ธ
https://t.co/eOgkhiIOFI