News for hackers. Stuff that matters.

ilbert

Crazy how versatile SQLite is!
Re:Ask HN: Framework to Manage Firecracker? on Thursday September 17, 2026 @10:47AM (#49741626)
Nice suggestion! I've been working on https://github.com/ilbertt/nibrunner now to give people an easy and fast way to turn theri VPS into a microVM host
Re: on Tuesday September 08, 2026 @12:07PM (#49612343)
I build a lot of small apps, and often times most of the effort goes into the infra rather than the app. I typically only need a machine and a disk where to run the compiled binary, but I can't find it on any of the existing cloud solutions. The "batteries included" platforms give you Postgres and object storage but nowhere to run your own binary. Vercel and friends will run your code as a function with an ephemeral filesystem, so an SQLite file is gone the moment the request ends unless you configure additional services. Using a VM means ssh, a firewall to open, TLS to renew, and an OS to keep updated. They're all either difficult to configure and maintain or an overkill, or both.

It doesn't happen only when I build my apps, but also every time I find a good open-source project that ships as a single binary. Hosting it means one of the above again, or wrapping it in a container image when it was already deployable as a single file. Self-hostable single-binary projects are great until you have to host them.

So I built nibrun. You upload a binary executable, and you get an isolated Firecracker microVM (1 vCPU, 256 MiB) and an 8 GiB persisted volume. The volume is all yours to use, as if it was your local machine: write your SQLite file, JSONs, assets uploads. And it's instantly available via HTTPS. No extra config file or Docker image needed. It sleeps after 5 minutes idle and wakes up on incoming requests in ~120 ms.

For example, you can deploy PocketBase (single-binary Supabase clone) in one click: https://nibrun.com/deploy/pocketbase

And when you want to leave, the export button gives you back the binary and everything in the volume, so leaving only costs you the download of a zip file.

All open source, so you can even run the whole platform on your own AWS account: https://github.com/ilbertt/nibrun

Ask HN: Framework to Manage Firecracker?

I've been using Firecraker lately and it's really good to manage microVMs.What I still haven't found though is a proper daemon/framework that wraps Firecracker and provides an easy to use API to start/stop microVMs, keep their filesystem backed up and expose their HTTP endpoint to the public.Are there any frameworks/tools out there?

( Read More... | 2 comments | 2 points | on HN )
Re:Ask HN: Is anyone using MCP notifications? on Tuesday July 21, 2026 @05:41AM (#48990058)
Actually, after reading more carefully, it seems that custom notifications won't be supported anymore in favor of the `subscriptions/listen` RPC endpoint. Maybe the upcoming extensions will make it possible?
Re:Ask HN: Is anyone using MCP notifications? on Tuesday July 21, 2026 @04:42AM (#48989688)
Thanks for sharing this SEP. Yeah some system notifications will go away, but servers will still be able to send custom notifications. Those can be turned into push notification on the device of the user or even actions that the user's device can do programmatically.

Ask HN: Is anyone using MCP notifications?

The MCP spec includes server-to-client notifications for things like list-changed events, progress, log messages, but I barely hear anyone talk about them, and I'm not sure how much they're used.In theory, it would be nice to receive updates from MCP servers ("Your product has been shipped") like we are already receiving from apps installed on the devices.I'm wondering if this is a useful part...

( Read More... | 4 comments | on HN )
Really cool, same concept as Pocketbase.

Starred!

Ask HN: Why aren't we collaborating on the prompts we give to our AI agents?

Now that code is so cheap, I feel like the real work is the spec, the context, the plan (aka the prompt) you hand over to the AI agent. That's where you decide what's actually getting built and how.That step still seems to be completely individual. You write it alone, the plan you formulate is local and private, and your coworkers only see the result when the PR is opened. On a team, that's the...

( Read More... | no comments | on HN )
Re:Voice Is My New Keyboard on Tuesday July 07, 2026 @06:15AM (#48815776)
Software like this make me questioning a lot the defensibility of products such as Wispr Flow.

A friend of mine created something similar with just a few prompts, allo working locally, and he's stopped using Wispr Flow

That's actually the library that inspired me the most for building bun-sqlgen
Re:Show HN: Bun-sqlgen – Type-safe raw SQL for Bun, no ORM on Wednesday June 24, 2026 @06:35PM (#48666403)
sql<type>`query` is the reason why I started bun-sqlgen, to not have to write types manually
Re:Show HN: Bun-sqlgen – Type-safe raw SQL for Bun, no ORM on Wednesday June 24, 2026 @06:34PM (#48666393)
I've updated the READMEs by the way
Re:Show HN: Bun-sqlgen – Type-safe raw SQL for Bun, no ORM on Wednesday June 24, 2026 @11:42AM (#48661614)
Really cool! I see you don't discover the SQL in the code right?
Re:Show HN: Bun-sqlgen – Type-safe raw SQL for Bun, no ORM on Wednesday June 24, 2026 @05:13AM (#48657182)
Kysely is really cool, but I don't like that you are not writing SQL directly
Re:Show HN: Bun-sqlgen – Type-safe raw SQL for Bun, no ORM on Wednesday June 24, 2026 @05:04AM (#48657119)
No real reason, I was working with Bun's SQL module for a project and felt the need for such codegen. I'm thinking of generalizing it to Node.js
Yeah, I'm still iterating on the docs
I actually took a lot of inspiration from sqlx, which is really nice. The main differences are:

- in JS/TS you don't have compile-time scripts that you can run like with Rust's macros, so you need to run a codegen command before running the type checks (disadvantage)

- I had to create a TS parser that goes and finds the tagged template functions with the sql statements, while sqlx has them "for free" because sql statements are the input to the macro itself (disadvantage)

- I use an in-memory Postgres (PGLite) to describe the queries, instead of requiring a running pg instance (advantage)

- I don't cache the statements and codegen for now like sqlx does, something that can be added later

I think they are similar in that they both substitute the dynamic params with no-ops like $1, $2, etc. before handing the sql statement to the pg's DESCRIBE function

I was targeting Bun because I really like its built-in SQL module. I can tweak the TS parser to look for e.g. postgres.js tagged template functions and make it work for that as well. I don't really see any blockers
The cli config supports specifying the PGLite extensions (the codegen uses PGLite as an in-memory light postgres), see this example: https://github.com/ilbertt/bun-sqlgen/tree/main/examples/wit....

You'll still probably have to manually override some column types using PG comments like: https://github.com/ilbertt/bun-sqlgen/blob/dee757ebc9c38aec7...

PGLite extensions: https://pglite.dev/extensions/#postgis

I think with some tweaks to the TS parser that goes and looks for the sql statements it's doable. How are you solving the problem right now?
I write Bun.sql with raw SQL and no ORM, and the one thing I kept missing was types. You write a query, get back `any[]`, and hand-write a row type that silently drifts from the actual columns. Drizzle/Kysely fix this by moving the query into TypeScript, but then you're not really writing SQL anymore.

bun-sqlgen goes the other way. You keep writing raw SQL queries, just give each one a name.

A codegen step reads your migration `.sql` files, stands up a throwaway Postgres via PGlite (so no Docker) or SQLite, prepares every tagged query against it, and writes a `.d.ts` that maps each query name to its real result type. After that, plain `tsc` does the rest: `user.notExistingField` won't compile, and `display_name.length` gets flagged because the column is nullable.

Nullability was the annoying part. Postgres's describe doesn't hand you per-column nullability, so I infer it from the query plan plus the catalog, with manual overrides for the cases that genuinely can't be inferred. SQLite works too.

The runtime stays 100% Bun.sql, the generated file is the only artifact (commit it), and codegen is fast enough to rerun on save.

It's early (v0.1, built it for my own projects) so I'd mostly like to hear where it falls over.

Re:Reviewing in the Age of AI on Wednesday May 06, 2026 @12:29PM (#48038152)
In the last couple of companies I've worked in, I've felt both overwhelmed by PRs to review and disappointed by my teammates that were just rubber-stamping my PRs
Re:Batteries Included CLI Framework on Thursday April 30, 2026 @08:30AM (#47961444)
That's a good framework and I like that the creator took the same design choices as the FastAPI framework.

Although I think a type-safe language is a better fit for CLIs, to let coding agents iterate faster and have less runtime bugs (help messages not updated, unknown flags, etc.)

Re:Batteries Included CLI Framework on Thursday April 30, 2026 @08:06AM (#47961234)
I've noticed that the TypeScript ecosystem around CLIs is fragmented, and for that reason (and because I love type-safe code), I've built parsh.

It's extensible by design, and you can test single commands atomically.

I think there's a good opportunity for it to become the Next.js/Vercel of CLIs.

Repo: https://github.com/ilbertt/parsh

Great idea! Are you also considering fine-tuning models as a "side-effect"? Basically, you collect traces of the agent's mistakes from your proxy, and you fine-tune a smaller model that you can offer specifically for that agent as a cheaper alternative?
Really cool! Just as feedback, the 3D worldview seems to have low quality on my browser

Ask HN: Keeping TypeScript CLI options and types in sync

Building TypeScript CLIs, I keep running into the same problem. I define an option in one place (its default, its parser, its validator) and the type for it on argv ends up declared somewhere else. After enough changes, one of them is always slightly wrong, and I find out only when something silently coerces to undefined.Have you ever faced the same issue? How are you solving it?Same question...

( Read More... | no comments | 4 points | on HN )

Older »