Why Isn't Every Sane Developer Obsessed with Crystal?

Seriously. This keeps me up at night. The language is right there. It’s fast, it’s beautiful, it’s expressive, the type system is incredible, and it compiles to native binaries. What more do people want?

I watch developers mass migrate to languages that make them fight the compiler, write verbose boilerplate, or handle errors like it’s 1995, and I just don’t get it. Crystal is something genuinely special and the rest of the world just walks right past it.

What is it going to take?

14 Likes
  1. Half the time when I want it to interface with something, I have to do it myself (AI may make this less important)

  2. Compile time

  3. Tooling (again AI makes this less important, I have not missed not having a great LSP since I am not typing code much)

1 Like

This is not going to change. Crystal is a language for people who recognize art and craft.

The AI Bros are killing that for the masses, and the niche of people who can appreciate that will be a smaller and smaller subset.

look at this very forum or even the reply you got:

that is apparently the future, and why do you think people who write things like that will care about the syntax of the language “they don’t write much”.

Consider Crystal in the same way you would look at a well equipped woodworking shop, with a lot of nice quality hand tools, where someone with the will to learn and create can make beautiful things.

For the rest of the programming world the language that is used will matter less and less.

AI will create more code in languages that are well covered in training data, which will create more training data for those languages for future training.

Crystal will have no place in this.

I see where you’re coming from, but I’m not sure I agree. I think Crystal still has a place in the age of AI assisted development more than ever.

From personal observation, I’ve noticed that AI assisted development is actually smoother with Crystal than with other languages.

Let’s compare Crystal to two other languages that are popular among the AI bros:

  1. Go: AI can be terrible at Go. The language is so minimalistic that it doesn’t define enough boundaries to constrain or guide the end user, which leads the AI to wanting to reinvent every fucking paradigm in computer science from scratch just to build a todo app.
  2. TypeScript: The TS type system is shaky and vague. It’s a perfect environment for getting any AI to start hallucinating.

Compare that to Crystal, where the type system is strict but expressive, the standard library is rich and well designed, and the compiler will reject nonsense before it ever reaches you. The language gives AI models clear guardrails to work within while still being flexible enough to not fight you. Crystal’s semantics are unambiguous enough that AI can actually produce correct, idiomatic code on the first try more often than not.

The “not enough training data” argument is real, but it cuts both ways. Crystal’s similarity to Ruby means models already have strong intuitions about the syntax, and the strict compiler catches whatever gaps remain. It’s a surprisingly good fit for AI assisted workflows.

10 Likes

That is mostly true, but also incomplete.

By that criteria there would be noone writing server-side code using TypeScript via AI. Why would they? They are not writing typescript, why do they want the slow end artifact?

Why would they generate Python? (hey, did you notice Python is slipping down in popularity?)

Crystal has several things that are very handy even when using a LLM:

  • Performance
  • Managed memory to avoid bugs
  • Decent builtin testing framework (tests are more important than before)
  • Expresive syntax. That’s what the LLM is writing. Why do we assume that syntax doesn’t matter to the LLM? I have seen it get stuck on syntax A LOT in TypeScript at work trying to do something like “update all the codebase to use a single module system”

And of course others: ease of shipping! Cross compiling binaries! Embedding data files! Decent binary sizes! Decent resource usage!

If anything, it’s in the top 10 languages I would want my AI buddy to work with. And since I still have to correct it when things get hairy, I like this better than, say, zig.

But could I do the exact same things? Sure. In zig, odin, rust, go and maybe C++ if I was in a bad mood.

My bet: LLMs will kill most interpreted languages popularity except for in-browser JS

3 Likes

The ecosystem issue is real, and it’s such a chicken-and-egg problem. You need a rich ecosystem to get developers hooked, but you need developers to maintain a rich ecosystem.
I wonder if the enthusiast community can do something about this. Could we define a handful of libraries that are a must have in every language and work collaboratively on producing high quality, production-ready tools? Something maintained under an official Crystal org (or similar), overseen by the core team or community volunteers.

2 Likes

I think the keyword here is “collaboratively”.

This is definitely what we need to learn how to do while wielding such power. Stop doing everything ourselves just because we can.

I’d love to see a ticket (just one) solved by an engineer using an LLM in the crystal project. Preferably, the patch being less than 30 lines long so that it is reviewable.

Also, I’d love to see an LLM reviewer help out and a sign-off by a core developer.

I think we all should be thinking of such things. Imagine if we could “automate” collaboration while keeping humans in the loop.

2 Likes

100%. I’m just as guilty of this, as we all probably are lol. And on top of that, AI kind of amplifies this problem!

I’ve been thinking about contributing for a while now, but my first contribution won’t be AI generated :stuck_out_tongue: I’d want to get my hands real dirty with the source before trusting any AI output on it.

That said, on the collaboration side, I would be very happy to work with the rest of the community on tooling and projects outside the language codebase, AI or not, just to make nice things for the lang. Throwing out some suggestions off the top of my head:

  • A more modern shards frontend, something more akin to crates.io, or hell, even more akin to RubyGems or npm would be fine!
  • Some official projects that are well maintained to guide beginners and expose them to the power of Crystal
  • A well maintained list of all the active web frameworks, the advantages of each, and unbiased comparisons
  • A well maintained task runner that the community agrees on adopting as the “preferred” task runner for projects (I know a few exist already, but none seems to have won its place as the de facto tool for the language)
  • A curated “awesome-crystal” list that’s actively maintained and filters out abandoned projects
2 Likes

I think Crystal is a successful programming language. It has been actively developed for over 10 years, reached version 1.0, and is used by companies in production. From what I’ve seen, the Crystal community continues to grow slowly and steadily, and I expect it will keep growing at its own pace.

Collaboration doesn’t happen as easily as it could, though. Crystal has strict typing, so libraries that sit unmaintained for a few years rarely work without updates. This might be part of the reason. I don’t fully understand what’s holding back collaboration, but I think we need to identify those barriers and tackle them one by one.

In recent years, the Crystal core team has overcome major technical challenges like parallel execution, Windows support, and removing the libevent dependency. Before that, we were mostly just running away from these dragons, but we’ve finally gained enough breathing room to focus on collaboration.

(Translated with Claude)

4 Likes

I was searching the crystal blog and found an article about bright and Manus collaborating to provide tooling.

They came up with that dependicies and rectable tools. Also, a perf tool for memory leak discovery.

But maybe you’re talking about libraries.

https://shardbox.org/ to the rescue!

I think it’s pretty good. It might benefit from collaboration.

I have no doubt @straight-shoota would welcome pull requests and a co-maintainer or two:

(there are two more repos)

If I may say so, I’d love to see a federated version. An ipfs-powered version perhaps. Boone is swimming in money here so it would be a money saver and a pretty neat (and unique, AFAIK) approach.

There are more than a few. Lucky and Athena are two web frameworks that appear to be actively maintained. Marteen might be a third one.

I, personally, love

There was an implementation of the micro services demo for k8s in crystal IIRC.

Any repo from the crystal-data organization; of which @kojix2 and @christopherzimmerman are members are awesome examples as well.

Well, one can Google them and find them. There are more than a few.

I agree that a more official awesome list or one that is more collaborative (or automated) would be beneficial.

I use @veelenga 's list.

Or do you agree that having a filter of actively maintained shards/frameworks would be nice.

That said, I think one can use GitHub Search to filter out those. On the other hand, we don’t all use GitHub. I, for one, use codebwrg and GitLab. :S

Some web crawling would become handy.

I don’t think we need a single one. Fragmentation can be perceived as diversity. It’s always nice to see collaboration though.

Lavinmq and sidekiq.cr seem pretty good to me.

3 Likes

I’ve been part of the Crystal ecosystem for over 10 years, and I’ve felt like @omarluq since day one.

Unfortunately, it doesn’t matter how good what you have is. People’s attention spans are very short and they are indifferent.

That’s why Marketing, Branding, and Hype (I dont like it) make the real difference. Without these, I think Crystal will always remain a niche language.

8 Likes

Your question was so good, that it inspired me to register on the Crystal Lang Forum :grin:
Not so long time ago I even tried to make an meaningful language presentation on one of university courses for CS Master. And I tried to think about it from “investor” perspective.

Back to the question. I won’t say anything new, because this topic is as old as the world, but who cares. It might sound very strange, slightly depressing, and even ironic, but the problem with Crystal’s popularity is not its language syntax, type system, or performance capabilities at all. It’s the timing of when Crystal exists.

I think we can even talk about any new “mythical” programming language (PL for short) that can do anything you want, with godly performance, etc. Even if Crystal fixes its compilation speed via crystal-alpha, finishes Windows support, parallelism, and its primitives, there will still be a list of issues that Crystal must address:

  1. Legacy systems: You have billions of lines of code that drive businesses. From a project management perspective, there is no need to rewrite, for example, a working Java project, even if it has boilerplate or exhausting error handling. Even in the context of PLs similar to Crystal, like Golang and Rust (because of high-concurrency capabilities), there is still a need for refactoring. There are several options on how to handle refactoring in general:
    a) “Tabula rasa”: You keep supporting legacy code, but build new services with a new PL. Golang and Rust are examples of such an approach, and they are growing very slowly because of project codebase inertia, as you need to write a lot of stuff by yourself (even from a business logic perspective).
    b) Symbiosis: Use an already existing platform and build a PL as part of it. With interoperability, you get all the good stuff that already exists in the ecosystem. Scala and Kotlin are parts of the JVM; JRuby, TypeScript (sort of), Elixir, etc. Downside: if you aren’t big enough, you will be devoured by the mainstream language because it will chop some good stuff from you into their PL.
    c) Mimicry: Use the syntax, but change the engine. Similar to Symbiosis, you’re using an existing platform, but using another development approach: F#, Clojure, Elixir, etc.

Crystal chose the first approach, so it will have a very long marathon to become one of the mainstream development choices.

  1. Documentation: I know it sounds obvious, but it means that a new language must have documentation and learning materials greater than existing PLs, because it’s a new PL. No one knows about the language, so documentation is the only way to make developers interested in your language. Then will come forums, communities, and other sources to solve existing PL questions, and even find some bugs and future considerations for language evolution (But it’s perfect already :D). In the context of AI, it means that non-programmers can do some stuff with ease because AI will be trained on all that documentation. Python and TypeScript have grown from 2024 to 2025 by 50-70%.

In this context, Crystal works very well; AI compensates for a poor amount of study sources like books and video tutorials (because there were only like 2 or 3).

  1. Chicken-Egg problem: I think in terms of Crystal, that’s a key factor. If a PL is unpopular, there will be fewer developers. Fewer developers → fewer innovative developers. Fewer innovative developers → fewer tools. Fewer tools → less popularity. And for this matter, there is no other way to solve this issue but to become innovative developers and share/engineer shards that solve business problems (and maintain them, which is a big ungodly pain). Yes, it can be solvable (and the Crystal community, from what I see, is doing it great, but it will be a very long, steady path). Windows support is not in a gold state yet, LSP is in active development (I know that is a hard task for Crystal especially, kudos to Ameba’s developers), parallelism is getting closer and closer.

  2. “Money rulez”: For successful PL development, there is a need for money. A lot of money. Yes, you can create a PL, but you need money for marketing, lobbying, DevRel, and conferences. Most of the big mainstream languages have a company that pumps a lot of money into them: Java (Oracle), C# (Microsoft), Golang (Google), Rust (Mozilla), Kotlin (JetBrains). Yes, you can be successful without it if you created a language in the last century when there weren’t any alternatives. I consider this very valuable stuff, because there aren’t a lot of meeting where Crystal was mentioned. Every year Crystal.Conf will be a good step for marketing. (even in online format)

  3. Market share: A PL must have a meaningful market share to become popular because a) it creates a demand for Crystal developers, b) it creates a demand for study materials, and c) it creates a meaningful community for sharing stuff with each other. Yes, we have Manas (ofc), 84Codes with LavinMQ, Kagi, PlaceOS and … that what I know from Crystal page “In prod”, but like that are big meaningful projects/companies that use Crystal? I don’t think there are a lot of them.

And that’s the largest problem with Crystal: from an ordinary developer’s perspective, there is no need to learn Crystal because it doesn’t pay. Yes, potentially you can take a shot in the dark and get some job, but if this work ends, what will you do? You won’t have many options; at most, you will migrate to Ruby/Elixir (because of the similarity), but that will create a lot of problems on its own.

  1. Pioneer company: This is more about a company that fully resonates with Crystal. I’m talking about something as Shopify/Github or other product company that’s big on the market, which will create an effect and give meaning to trying the PL. A PL needs “tourists”—yes, it creates the Gartner hype cycle, but it will leave a reasonable amount of developers to grow and move the PL forward.

I understand that Manas doesn’t have infinite resources, they have other more important stuff than this, and even in these conditions, they built an amazing piece of technology. However, because of this, these issues will persist and will resolve very slowly.

It is what it is.

6 Likes

Yeah…

For those who want to do something, may I come with a suggestion: Aim for the juniors.

As an official old fart, I’ll say you need to be a bit of a polyglot in this business. At least enough to pick up some other perspectives than just the one of the thing that’s making your paycheck. I get a feeling that most of this forum grok this.

So when crossing pass with juniors, and those just out of school, explain this, and why they need to expand their vocabulary outside of JavaScript. And when they warm up to that idea, suggest they try Crystal, it certainly makes Go and Rust virtually identical in comparison.

Won’t change the tides overnight, but having some enthusiastic young ones join the community can’t be a bad thing…

2 Likes

wohoo welcome to the party :tada: very detailed analysis and great food for thought!

2 Likes

I mentor a couple of juniors who are very talented and motivated, and I had this exact same thought. Turns out it’s harder than I anticipated, and honestly for good reason.

Both of them liked the idea of the language when I showed it to them. The syntax clicked, they appreciated the type system, the whole pitch landed. But the pushback came from a completely rational angle: they want to learn something that’s widely adopted. When you’re an enthusiastic junior ready to leave JS kitty land, the logical next step is to pick up one of the dominant languages because it just makes more sense career wise at that stage.

And I can’t really argue with that. Telling a junior “learn this niche language because it’ll make you a better programmer” is a tough sell when they’re competing for roles that list Go, Rust, or Python on every job posting :/

The polyglot advice is solid and I believe in it 100%, but the order matters. They need to build career leverage first, and that usually means reaching for the thing with the bigger ecosystem and job market before exploring the edges.

That said, I haven’t given up on the idea. For those of you who have successfully gotten juniors or newcomers excited about Crystal and actually sticking with it, what worked? What was the hook that made it click beyond “nice syntax”? I’d love to hear what’s worked for others because I clearly need a better playbook here.

2 Likes

I’ve never gotten a job through a job posting, so what do I know, but it’s not my impression that it’s the ones that list the usual suspects in their applications that get noticed the most.

But I know the problem, it’s a hard sell when “the hot stuff” changes on a weekly basis. Which is not exactly helped by the LLMs.

3 Likes

I spend a lot of time on Crystal. I don’t know why. I can’t stop reading the forums, posting in machine-translated English. Lately I even want to understand the compiler internals. There is no reward for this. My income doesn’t increase. My free time disappears. Part of my mind is always occupied by Crystal. As the condition progresses, I begin to feel joy. I start thinking “I need Crystal to live.”
I believe recommending Crystal to others is dangerous. :cat_face:

9 Likes

I think this answers the question in the topic title, specifically the “sane” part. :grinning_face_with_smiling_eyes:

6 Likes

Crystal Meth…

4 Likes

Just now, with help from GPT 5.2, I released a new version of procodile/compare/v1.1.2…v1.1.3, which replace the deprecate Process.fork , you can find the discussion in this issue

Some prompts, a few deliberate nudges, and sending the full GitHub project URL directly to GPT (I’m still not using Codex yet)—it precisely helped me solve this issue that I might have struggled with for much longer on my own.

Thanks to Crystal’s expressive design, GPT shows a stronger ability to learn and analyze Crystal code than I expected. Honestly, before this, I rarely asked GPT anything about Crystal—I always thought AI was just a tool to cover my weak spots (like using AI to write frontend CSS I wasn’t good at). for Crystal, I thought my skills were already above average, so using AI didn’t seem meaningful. but now I realize AI is actually a great tool that helps me keep improving my Crystal skills.

(Translated with qwen3:30b)

My bet: LLMs will kill most interpreted languages popularity except for in-browser JS

I think so too.

3 Likes