# Learning Resources

**URL:** https://forum.crystal-lang.org/c/learning-resources/8.md

[Latest](https://forum.crystal-lang.org/latest.md) · [Categories](https://forum.crystal-lang.org/categories.md) · [Tags](https://forum.crystal-lang.org/tags.md)

---

## [About the Learning Resources category](https://forum.crystal-lang.org/t/about-the-learning-resources-category/22)

<div class="topic-metadata">

**Author:** [@bcardiff](https://forum.crystal-lang.org/u/bcardiff)\
**Replies:** 0

</div>

Share resources, experiences, ideas, and articles that will help going from 0 to 100 (or to 20).

---

## [What would you say is "Idiomatic Crystal"?](https://forum.crystal-lang.org/t/what-would-you-say-is-idiomatic-crystal/9073)

<div class="topic-metadata">

**Author:** [@luislavena](https://forum.crystal-lang.org/u/luislavena)\
**Replies:** 6\
**Last updated:** [July 31, 2026, 2:41am UTC](https://forum.crystal-lang.org/t/what-would-you-say-is-idiomatic-crystal/9073 "2026-07-31T02:41:17Z")

</div>

Hello folks, For languages like Ruby we had lot of books talking about design patterns applied, or what OOP looks like (excellent resources like Sandi Metz’s POODR) However, outside of Crystal Programming one, we don’t…

---

## [Looking for resources on idioms and patterns](https://forum.crystal-lang.org/t/looking-for-resources-on-idioms-and-patterns/8918)

<div class="topic-metadata">

**Author:** [@icosahedronsson](https://forum.crystal-lang.org/u/icosahedronsson)\
**Replies:** 6\
**Last updated:** [May 5, 2026, 10:45pm UTC](https://forum.crystal-lang.org/t/looking-for-resources-on-idioms-and-patterns/8918 "2026-05-05T22:45:21Z")

</div>

Hey all! Coming from a dotnet background, I’m pretty used to clean architecture, dependency injection, config and service registration on program.cs etc - doing stuff the dotnet way really. What are some good resources…

---

## [Kemal-by-example: Discover the Power of Kemal Through Practice](https://forum.crystal-lang.org/t/kemal-by-example-discover-the-power-of-kemal-through-practice/8839)

<div class="topic-metadata">

**Author:** [@sdogruyol](https://forum.crystal-lang.org/u/sdogruyol)\
**Replies:** 10\
**Last updated:** [April 25, 2026, 1:50am UTC](https://forum.crystal-lang.org/t/kemal-by-example-discover-the-power-of-kemal-through-practice/8839 "2026-04-25T01:50:03Z")

</div>

---

## [TIL: crystal-pg low performance with SSL](https://forum.crystal-lang.org/t/til-crystal-pg-low-performance-with-ssl/8484)

<div class="topic-metadata">

**Author:** [@sdogruyol](https://forum.crystal-lang.org/u/sdogruyol)\
**Replies:** 23\
**Last updated:** [January 19, 2026, 4:27am UTC](https://forum.crystal-lang.org/t/til-crystal-pg-low-performance-with-ssl/8484 "2026-01-19T04:27:56Z")

</div>

Hi everyone, I wanted to share a recent experience I had with crystal-pg that might be helpful for others. I’ve been benchmarking Crystal against Go and noticed that my Crystal implementation was performing 5-10 times …

---

## [Book: Crystal Programming](https://forum.crystal-lang.org/t/book-crystal-programming/4639)

<div class="topic-metadata">

**Author:** [@Blacksmoke16](https://forum.crystal-lang.org/u/Blacksmoke16)\
**Replies:** 26\
**Last updated:** [January 11, 2026, 10:36am UTC](https://forum.crystal-lang.org/t/book-crystal-programming/4639 "2026-01-11T10:36:31Z")

</div>

I’m pleased to announce that @lbguilherme and I have authored a new Crystal book, and it comes out this Friday, May 27, 2022! Electronic and physical versions will be available. Checkout the following links for more info…

---

## [Have you checked out the Crystal's CodeWiki?](https://forum.crystal-lang.org/t/have-you-checked-out-the-crystals-codewiki/8592)

<div class="topic-metadata">

**Author:** [@renich](https://forum.crystal-lang.org/u/renich)\
**Replies:** 4\
**Last updated:** [December 18, 2025, 1:10am UTC](https://forum.crystal-lang.org/t/have-you-checked-out-the-crystals-codewiki/8592 "2025-12-18T01:10:06Z")

</div>

Check this out: I find it helpful and a great idea for an AI implementation. What are your thoughts?

---

## [Koans in Crystal](https://forum.crystal-lang.org/t/koans-in-crystal/8587)

<div class="topic-metadata">

**Author:** [@wontruefree](https://forum.crystal-lang.org/u/wontruefree)\
**Replies:** 2\
**Last updated:** [December 16, 2025, 5:17am UTC](https://forum.crystal-lang.org/t/koans-in-crystal/8587 "2025-12-16T05:17:53Z")

</div>

When learning Ruby back in the day I enjoyed using https://www.rubykoans.com/. I thought it was a go at your own pace way to explore general concepts in the language. I have been using AI to port them and have made a c…

---

## [Advent of Compiler Optimizations](https://forum.crystal-lang.org/t/advent-of-compiler-optimizations/8572)

<div class="topic-metadata">

**Author:** [@straight-shoota](https://forum.crystal-lang.org/u/straight-shoota)\
**Replies:** 1\
**Last updated:** [December 2, 2025, 7:40pm UTC](https://forum.crystal-lang.org/t/advent-of-compiler-optimizations/8572 "2025-12-02T19:40:13Z")

</div>

Matt Godbolt, the creator of Compiler Explorer is posting a series about code optimisations in compilers: The first two posts are already interesting and short. This is probably not that relevant for the Crystal compi…

---

## [Code Coverage Reporting](https://forum.crystal-lang.org/t/code-coverage-reporting/8390)

<div class="topic-metadata">

**Author:** [@Blacksmoke16](https://forum.crystal-lang.org/u/Blacksmoke16)\
**Replies:** 13\
**Last updated:** [November 10, 2025, 6:28pm UTC](https://forum.crystal-lang.org/t/code-coverage-reporting/8390 "2025-11-10T18:28:22Z")

</div>

Writing tests is an important part of creating an easy to maintain codebase by providing an automated way to ensure your program is doing what it should be. But how do you know if you’re testing the right things, or how …

---

## [A blog post about using Google Sheets API with Crystal](https://forum.crystal-lang.org/t/a-blog-post-about-using-google-sheets-api-with-crystal/8157)

<div class="topic-metadata">

**Author:** [@Maroo-b](https://forum.crystal-lang.org/u/Maroo-b)\
**Replies:** 0\
**Last updated:** [June 13, 2025, 4:58pm UTC](https://forum.crystal-lang.org/t/a-blog-post-about-using-google-sheets-api-with-crystal/8157 "2025-06-13T16:58:24Z")

</div>

Hey everyone! :waving\_hand: I just published a new blog post on using the Google Sheets API with Crystal — it covers the basics of setting things up, handling authentication, and some example code to read/write data. I…

---

## [Catch on nested macros](https://forum.crystal-lang.org/t/catch-on-nested-macros/8150)

<div class="topic-metadata">

**Author:** [@wolfgang371](https://forum.crystal-lang.org/u/wolfgang371)\
**Replies:** 1\
**Last updated:** [June 12, 2025, 7:18pm UTC](https://forum.crystal-lang.org/t/catch-on-nested-macros/8150 "2025-06-12T19:18:37Z")

</div>

Dear all, I just had a little surprise (at least to me) that for macro nesting you don’t need to have a macro inside a macro definition, but this is enough already… {% if true %} # this also counts as a nested macro an…

---

## [Recent Crystal blog etc about state on GUI and Windows (seperate or combined)](https://forum.crystal-lang.org/t/recent-crystal-blog-etc-about-state-on-gui-and-windows-seperate-or-combined/8060)

<div class="topic-metadata">

**Author:** [@mavu](https://forum.crystal-lang.org/u/mavu)\
**Replies:** 11\
**Last updated:** [May 25, 2025, 10:54pm UTC](https://forum.crystal-lang.org/t/recent-crystal-blog-etc-about-state-on-gui-and-windows-seperate-or-combined/8060 "2025-05-25T22:54:14Z")

</div>

Hi, I have problems finding any, so quick question: Is there a recent blog post/article/presentation/etc. about the current state of Crystal on windows? And the same question for state of GUI in crytal? If anyone ha…

---

## [Use docr in Neovim](https://forum.crystal-lang.org/t/use-docr-in-neovim/8015)

<div class="topic-metadata">

**Author:** [@aiac](https://forum.crystal-lang.org/u/aiac)\
**Replies:** 3\
**Last updated:** [May 17, 2025, 5:35am UTC](https://forum.crystal-lang.org/t/use-docr-in-neovim/8015 "2025-05-17T05:35:21Z")

</div>

local docr = function(info\_or\_search) local on\_v\_modes = function() local v\_block\_mode = vim.api.nvim\_replace\_termcodes('\<C-V\>', true, true, true) local v\_mode, v\_line\_mode = 'v', 'V' local v\_modes = { v…

---

## [DeepWiki as a learning tool for Crystal](https://forum.crystal-lang.org/t/deepwiki-as-a-learning-tool-for-crystal/8016)

<div class="topic-metadata">

**Author:** [@kojix2](https://forum.crystal-lang.org/u/kojix2)\
**Replies:** 4\
**Last updated:** [April 30, 2025, 9:26pm UTC](https://forum.crystal-lang.org/t/deepwiki-as-a-learning-tool-for-crystal/8016 "2025-04-30T21:26:46Z")

</div>

I recently tried out the much-talked-about tool, DeepWiki. This tool generates a wiki from a public Git repository and answers questions by quoting the source code. DeepWiki has also been a hot topic in the ruby-jp Sla…

---

## [Need beginner-friendly tutorials](https://forum.crystal-lang.org/t/need-beginner-friendly-tutorials/7471)

<div class="topic-metadata">

**Author:** [@john\_schumandr](https://forum.crystal-lang.org/u/john_schumandr)\
**Replies:** 10\
**Last updated:** [December 9, 2024, 10:31am UTC](https://forum.crystal-lang.org/t/need-beginner-friendly-tutorials/7471 "2024-12-09T10:31:05Z")

</div>

I’m very interested in Crystal, but I’m confused about where to start learning it. I tried opening its documentation, but I got lost in it. There’s nothing like a complete tutorial teaching this language for beginners. I…

---

## [Crystal vs Go: Notes and Reflections](https://forum.crystal-lang.org/t/crystal-vs-go-notes-and-reflections/2989)

<div class="topic-metadata">

**Author:** [@jzakiya](https://forum.crystal-lang.org/u/jzakiya)\
**Replies:** 3\
**Last updated:** [March 3, 2021, 4:35am UTC](https://forum.crystal-lang.org/t/crystal-vs-go-notes-and-reflections/2989 "2021-03-03T04:35:51Z")

</div>

I recently (Feb 14, 2021) had a video session with @lbarasti to ask him to look at my Crystal implementation of my twinsprimes sieve and help me make it “better”. We found an issue with using channels that I don’t think …

---

## [CodeCrafters have a Crystal track](https://forum.crystal-lang.org/t/codecrafters-have-a-crystal-track/6901)

<div class="topic-metadata">

**Author:** [@beta-ziliani](https://forum.crystal-lang.org/u/beta-ziliani)\
**Replies:** 1\
**Last updated:** [June 7, 2024, 9:07am UTC](https://forum.crystal-lang.org/t/codecrafters-have-a-crystal-track/6901 "2024-06-07T09:07:01Z")

</div>

CodeCrafters added Crystal to the list of languages you can learn. They granted us with a discounted link, with the additional benefit that 60% of the revenue returns to Crystal! Find about it in External resources - The…

---

## [Cross-compiling Crystal applications - Part 2](https://forum.crystal-lang.org/t/cross-compiling-crystal-applications-part-2/7090)

<div class="topic-metadata">

**Author:** [@luislavena](https://forum.crystal-lang.org/u/luislavena)\
**Replies:** 16\
**Last updated:** [August 23, 2024, 10:01am UTC](https://forum.crystal-lang.org/t/cross-compiling-crystal-applications-part-2/7090 "2024-08-23T10:01:21Z")

</div>

Hello folks! Thank you all for the great feedback on Part 1 of my quest on scratching my own cross-compilation need for Crystal. This time, here is Part 2, which automates most of the manual steps covered in the first …

---

## [Simple Tcl/Tk example with crystal](https://forum.crystal-lang.org/t/simple-tcl-tk-example-with-crystal/3528)

<div class="topic-metadata">

**Author:** [@pebauer68](https://forum.crystal-lang.org/u/pebauer68)\
**Replies:** 3\
**Last updated:** [June 29, 2024, 5:49pm UTC](https://forum.crystal-lang.org/t/simple-tcl-tk-example-with-crystal/3528 "2024-06-29T17:49:25Z")

</div>

For small GUIs Tcl/Tk works fine with crystal. -start the wish shell in a subprocess https://www.tcl.tk/man/tcl/UserCmd/wish.html -pack your widgets -get values via subprocess while mygui.isopen? # run while …

---

## [Cross-compiling Crystal applications - Part 1](https://forum.crystal-lang.org/t/cross-compiling-crystal-applications-part-1/6956)

<div class="topic-metadata">

**Author:** [@luislavena](https://forum.crystal-lang.org/u/luislavena)\
**Replies:** 9\
**Last updated:** [June 25, 2024, 4:21pm UTC](https://forum.crystal-lang.org/t/cross-compiling-crystal-applications-part-1/6956 "2024-06-25T16:21:03Z")

</div>

If you do a search on the forums will find some replies from me on that subject but these do not go into details. Decided to sit and write down all that and tried to explain some concept in the first post of 4 in total,…

---

## [Cross-compiling using qemu-static](https://forum.crystal-lang.org/t/cross-compiling-using-qemu-static/6961)

<div class="topic-metadata">

**Author:** [@ralsina](https://forum.crystal-lang.org/u/ralsina)\
**Replies:** 4\
**Last updated:** [June 25, 2024, 12:17pm UTC](https://forum.crystal-lang.org/t/cross-compiling-using-qemu-static/6961 "2024-06-25T12:17:49Z")

</div>

qemu-static allows you to run containers built for other architectures (of course, with a performance penalty). BUT this means you can cross-compile to arm/amd64 quite easily. Here’s an example: $ docker run --rm --pri…

---

## [Playing with Crystal on Windows](https://forum.crystal-lang.org/t/playing-with-crystal-on-windows/4877)

<div class="topic-metadata">

**Author:** [@robmullr](https://forum.crystal-lang.org/u/robmullr)\
**Replies:** 5\
**Last updated:** [May 28, 2024, 12:53am UTC](https://forum.crystal-lang.org/t/playing-with-crystal-on-windows/4877 "2024-05-28T00:53:49Z")

</div>

I’m a hobbyist level hack programmer but wanted to share the steps I followed to get Crystal working on Windows. I have MS Visual Studio 2022 installed with the C++ build tools. BLUF: crystal runs, shards runs, libs get…

---

## [Popular Twitch streamer reviews Crystal code](https://forum.crystal-lang.org/t/popular-twitch-streamer-reviews-crystal-code/5730)

<div class="topic-metadata">

**Author:** [@decabytes](https://forum.crystal-lang.org/u/decabytes)\
**Replies:** 3\
**Last updated:** [April 5, 2024, 12:53pm UTC](https://forum.crystal-lang.org/t/popular-twitch-streamer-reviews-crystal-code/5730 "2024-04-05T12:53:57Z")

</div>

Popular Twitch streamer the Primeagen reviewed an implementation of monkeylang written in Crystal from the book Writing An Interpreter In Go by Thorsten Ball. It’s a short video, but it’s interesting to see the feedback …

---

## [LavinMQ](https://forum.crystal-lang.org/t/lavinmq/6705)

<div class="topic-metadata">

**Author:** [@vinit812010](https://forum.crystal-lang.org/u/vinit812010)\
**Replies:** 1\
**Last updated:** [March 21, 2024, 6:46pm UTC](https://forum.crystal-lang.org/t/lavinmq/6705 "2024-03-21T18:46:10Z")

</div>

Take a look at Lavin… a drop in replacement for Rabbit MQ supporting AMQP 0.9.1, we are currently evaluating lavin and are very satisfied with the results. Their site has excellent resources to get started with Message …

---

## [\[Share\] Crystal internals (part 1) by @asterite](https://forum.crystal-lang.org/t/share-crystal-internals-part-1-by-asterite/6633)

<div class="topic-metadata">

**Author:** [@zw963](https://forum.crystal-lang.org/u/zw963)\
**Replies:** 0\
**Last updated:** [February 22, 2024, 2:52pm UTC](https://forum.crystal-lang.org/t/share-crystal-internals-part-1-by-asterite/6633 "2024-02-22T14:52:47Z")

</div>

Share this because no one share this awesome slide in the forum.

---

## [Auto-recompiling a crystal project as I work](https://forum.crystal-lang.org/t/auto-recompiling-a-crystal-project-as-i-work/6617)

<div class="topic-metadata">

**Author:** [@rob](https://forum.crystal-lang.org/u/rob)\
**Replies:** 10\
**Last updated:** [February 20, 2024, 6:18pm UTC](https://forum.crystal-lang.org/t/auto-recompiling-a-crystal-project-as-i-work/6617 "2024-02-20T18:18:38Z")

</div>

On various crystal projects when I’m developing, I want something akin to live-reload. I recently found a solution for this which has really changed my workflows for the better. Maybe it’ll save you some time too. I cam…

---

## [Finding where a fiber is halt](https://forum.crystal-lang.org/t/finding-where-a-fiber-is-halt/2946)

<div class="topic-metadata">

**Author:** [@bcardiff](https://forum.crystal-lang.org/u/bcardiff)\
**Replies:** 6\
**Last updated:** [January 15, 2024, 9:24pm UTC](https://forum.crystal-lang.org/t/finding-where-a-fiber-is-halt/2946 "2024-01-15T21:24:55Z")

</div>

I was needing to find a reason why a given fiber was hanged. This situation can happen when waiting for IO or Channel operation that seems it will never arrive. To solve this I, temporally, added the call-stack of the f…

---

## [Share a configuration snippet for formatting crystal code under neovim](https://forum.crystal-lang.org/t/share-a-configuration-snippet-for-formatting-crystal-code-under-neovim/6044)

<div class="topic-metadata">

**Author:** [@aiac](https://forum.crystal-lang.org/u/aiac)\
**Replies:** 0\
**Last updated:** [October 1, 2023, 1:22pm UTC](https://forum.crystal-lang.org/t/share-a-configuration-snippet-for-formatting-crystal-code-under-neovim/6044 "2023-10-01T13:22:17Z")

</div>

plugin ref: GitHub - stevearc/conform.nvim: Lightweight yet powerful formatter plugin for Neovim lazy config: { 'stevearc/conform.nvim', event = { 'BufWritePre' }, config = function() require('conform').setup…

---

## [Generate documention with mutiple versions](https://forum.crystal-lang.org/t/generate-documention-with-mutiple-versions/5907)

<div class="topic-metadata">

**Author:** [@Fulgurance](https://forum.crystal-lang.org/u/Fulgurance)\
**Replies:** 1\
**Last updated:** [August 3, 2023, 6:08pm UTC](https://forum.crystal-lang.org/t/generate-documention-with-mutiple-versions/5907 "2023-08-03T18:08:13Z")

</div>

Hi everyone, Today I would like to share to you a tutorial I made to know how to generate a documentation for your project in Crystal. I will show you an example with my own project ISM (this tutorial was realized on G…

[Next page](https://forum.crystal-lang.org/c/learning-resources/8.md?page=1)
