Skip to main content

4 posts tagged with "sqlite"

View All Tags

Why We Chose Rust for Version 3

· 12 min read
Dave Rapin
Dave Rapin
Founder @ Curling IO
About this post

This is a technical architecture post from the development of Curling IO v3. It is written for software engineers and goes deeper into Gleam, Rust, SQLite, client-side UI architecture, and build tooling than our usual product posts.

For Curling IO v3, we knew we wanted to move away from the Ruby on Rails stack we'd used for v2. We wanted a statically typed language with stronger compile-time guarantees and fewer footguns. We first explored Gleam because it ticked those boxes and gave us access to the BEAM. Lustre offered a typed UI framework for both server and client. An initial implementation let us see how that combination would fit our architecture. Our early foundation posts describe what we were learning and building.

That work helped settle the product requirements, the changes we wanted from Version 2, and the UI design. It also exposed tradeoffs in deployment and client interactions that led us to ultimately choose Rust and TypeScript as the best fit for our architecture before going further with Gleam and Lustre. SQLite and the product design carried forward. We’ve since ported and expanded our SQL tooling and built a small TypeScript runtime called Hypertea for client interactions.

The move improved deployment, gave us useful compile-time automation, and suited the way we investigate and fix issues. Unfortunately, it also made our builds much heavier. There are things about Gleam and Lustre that we still prefer.

Test Isolation for Free with SQLite

· 9 min read
Dave Rapin
Dave Rapin
Founder @ Curling IO
Update: October 1, 2026

This post reflects our earlier Gleam exploration for Curling IO v3. We ultimately chose Rust and TypeScript. Why We Chose Rust for Version 3 explains that decision and what we kept from the exploration.

About this post

This is a technical implementation note about the testing architecture for Curling IO v3. It is written for software engineers and goes deeper into SQLite, in-memory databases, the backup API, and test isolation than our usual product posts.

Curling IO's tests don't need a shared test database, cleanup hooks, or transaction tricks. Each test gets its own database, so a test can pass alone or in the full suite for the same reason: nothing else can touch its data.

That falls out of one Version 3 choice: SQLite runs in-process. Each test gets a completely independent in-memory SQLite database, cloned from a template in microseconds using SQLite's backup API.

Why We Chose SQLite

· 13 min read
Dave Rapin
Dave Rapin
Founder @ Curling IO
Update: October 1, 2026

This post reflects our earlier Gleam exploration for Curling IO v3. We ultimately chose Rust and TypeScript. Why We Chose Rust for Version 3 explains that decision and what we kept from the exploration.

About this post

This is a technical architecture note about the database decision for Curling IO v3. It is written for software engineers and operators, and goes deeper into SQLite, Litestream, database isolation, hosting, and recovery tradeoffs than our usual product posts.

Version 3 should be cheaper to operate, easier to restore, and still fast during peak registration and live scoring. That pushed us toward a choice we didn't expect: SQLite.

We assumed PostgreSQL at first. After a decade running Postgres in production, we knew the tooling, the failure modes, and the operational playbook. Then we compared self-hosting Postgres with Litestream-backed SQLite and changed our minds.

The Next Version of Curling IO

· 8 min read
Dave Rapin
Dave Rapin
Founder @ Curling IO
Update: October 1, 2026

This post reflects our earlier Gleam exploration for Curling IO v3. We ultimately chose Rust and TypeScript. Why We Chose Rust for Version 3 explains that decision and what we kept from the exploration.

About this post

This is an overview of the technical foundation explored for Curling IO v3. It is written for software engineers and others interested in application architecture, and goes deeper into Gleam, the BEAM, SQLite, hosting, and scaling than our usual product posts.

The next version of Curling IO should feel familiar: the same registrations, schedules, scoring, and club admin workflows, just faster and harder to break. The work is mostly under the surface, but the payoff is practical: fewer slowdowns at peak registration, better reliability during live events, and a platform we can keep improving for a long time.

This series explains what changes, what doesn't, and why we're making the bet.