im·a·cto
← choices

$ cat choices/crystal.md

Crystal

the call

I reach for Crystal when I want compiled speed and static types but still want code that reads like Ruby. I don't push it on a team that isn't already living in the Ruby headspace.

why

Crystal gives you the thing Ruby never could: compiled speed and static types, with syntax that still reads like Ruby. You get a real type system and a single fast binary out the other end, but the code on the page looks like the language a Ruby team already thinks in. For CLIs and tools where startup time and a clean distributable matter, that combination is hard to beat.

when I don’t

Crystal’s ecosystem is small and the community is a fraction of Ruby’s or Go’s. If a tool needs a battle-tested library that only exists in a bigger ecosystem, reaching for Crystal means writing that library yourself. And on a team that doesn’t already think in Ruby, the syntax familiarity buys nothing. You’re just paying for a niche language without the payoff that makes it worth it.

in production

Crystal is where a lot of my own OSS lives. admiral.cr, a CLI DSL, and promise.cr are both written in it. The one that earned its keep in production is psykube: a Crystal tool that templates and ships Kubernetes manifests, run in production at GigSmart and CommercialTribe. A compiled binary that reads like Ruby was exactly right for that job: fast to run, easy to reason about, clean to distribute.— see: open-source / psykube

the principle under it

The right language isn’t the fastest one or the most popular one. It’s the one that fits the shape of both the problem and the people. Crystal wins when you want native performance and a real type system without making a Ruby-minded team relearn how to read code. The judgment is matching the tool to the team’s existing grain, not just the benchmark.

the gaps — what it costs even when it’s right

The ecosystem is thin. When the library you need doesn’t exist, you’re the one writing it. That’s fine for a focused tool, expensive for anything that leans on a deep dependency tree.

The hiring pool is tiny. “Reads like Ruby” gets a Rubyist productive fast, but Crystal experience itself is rare. Every Crystal project is something the team has to be willing to own and maintain themselves.

Compile times are a tax on the loop. You trade Ruby’s instant feedback for a build step. Worth it for the speed and a single shippable binary, but it slows the tight edit-run cycle you get for free in an interpreted language.

© 2026 — written by a human, with help, and said so canonical jasonwaldrip.com · delivered through The Bushido Collective