Courses & TutorialsProgramming
Awesome Crystal – Massive Collection of Resources
The goal is to have projects mostly stable and useful for the community.
Search Crystal Shards or follow announcements Crystal [ANN] for more.
- Awesome Crystal
- Algorithms and Data structures
- Blockchain
- C Bindings
- Caching
- CLI Builders
- CLI Utils
- Code Analysis and Metrics
- Compression
- Configuration
- Converters
- Cryptography
- Data Formats
- Data Generators
- Database Drivers/Clients
- Database Tools
- Debugging
- Dependency Injection
- Environment Management
- Examples and funny stuff
- Framework Components
- Game Development
- GUI Development
- HTML Builders
- HTML/XML parsing
- HTTP
- Image Processing
- Implementations/Compilers
- Logging and monitoring
- Machine Learning
- Markdown/Text Processors
- Misc
- Network Protocols
- Networking
- ORM/ODM Extensions
- Package Management
- Processes and Threads
- Project Generators
- Queues and Messaging
- Routing
- Scheduling
- Science and Data analysis
- Search
- Serverless Computing
- System
- Task management
- Template Engine
- Testing
- Third-party APIs
- Validation
- Web Frameworks
- Community
- Resources
- Services and Apps
- Tools
Algorithms and Data structures
- bisect – Inserting values into a sorted array
- blurhash.cr – BlurHash implementation
- crie – Compile-time Trie
- CrOTP – HOTP and TOTP implementation for two factor authentication
- crystal-linked-list – Implementation of Linked List
- crystaledge – A pure Vector Math library
- crystalg – A Generic Algorithm Library
- crystalline – A collection of containers and algorithms
- edits.cr – Collection of edit distance algorithms
- fzy – A Crystal port of awesome Fzy project fuzzy finder algorithm
- graphlb – Collection of graph datastructure and algorithms
- haversine – An Implementation of the Haversine formula
- kd_tree – An implementation of “K-Dimensional Tree” and “N-Nearest Neighbors”
- ksuid.cr – K-Sortable Globally Unique IDs
- markov – Build Markov Chains and run Markov Processes
- multiset.cr – Implementation of a multiset
- qr-code – QR Code generator
- radix – Radix Tree implementation
- ternary_search_tree – Ternary Search Tree
Blockchain
- Axentro – A custom blockchain platform
- Cocol – A minimal blockchain testbed
- secp256k1.cr – Elliptic curve used in the public-private-key cryptography
C bindings
- clang.cr – Libclang bindings
- crt.cr – Bindings for libncursesw and crt
- crystal-gsl – GNU Scientific Library bindings
- crystal-hunspell – Bindings for Hunspell
- curl-crystal – Bindings for libcurl
- duktape.cr – Bindings for the Duktape javascript engine
- gphoto2.cr – Bindings for the libgphoto2 library
- icu.cr – Bindings for the ICU library
- libnotify.cr – Bindings for Libnotify
- pcap.cr – Bindings for libpcap
- pledge.cr – Bindings for OpenBSD’s
pledge(2)
- ssh2.cr – Bindings for libssh2 library
- syslog.cr – Bindings for
syslog
- x_do.cr – Bindings for libxdo (
xdotool
)
Caching
- crystal-memcached – Implementation of a memcached client
CLI Builders
- admiral – A robust DSL for writing command line interfaces
- clicr – A simple declarative command line interface builder
- clim – Slim command line interface builder
- commander – Command-line interface builder
- Keimeno – A lightweight text user interface library in Crystal
- OptionParser – command-line options processing (Crystal stdlib)
- Phreak – A highly flexible Crystal CLI builder in the style of OptionParser
CLI Utils
- climate – Tiny tool to make your CLI output 🌈 coloured
- cride – A light CLI text editor/IDE
- lff – Simple and straightforward large files finder utility in command line
- oq – A performant, and portable jq wrapper to facilitate the consumption and output of formats other than JSON; using jq filters to transform the data.
- progress_bar.cr – A simple and customizable progress bar
- tablo – A flexible terminal table generator
- tallboy – Generate ASCII character tables with support for spanning cells over multiple columns
Code Analysis and Metrics
- ameba – A static code analysis tool
- linguist.cr – Using multiple ways to find programming language used in files, based on Github’s Linguist
Compression
- Crystar – Readers and writers of Tar archive format
- Gzip – readers and writers of gzip format (Crystal stdlib)
- polylines.cr — compression of series of coordinates
- snappy – Snappy compression format reader/writer for Crystal
- Zip – readers and writers of zip format (Crystal stdlib)
- Zlib – readers and writers of zlib format (Crystal stdlib)
- zstd.cr – Bindings for Zstandard compression library
Configuration
- cr-dotenv – Loads .env file
- Envy – Load environment variables from YAML
- envyable – A simple YAML to ENV config loader
- habitat – Type safe configuration for your classes and modules
- totem – Load and parse a configuration in JSON, YAML, dotenv formats
Converters
- base62.cr – Base62 encoder/decoder, well suited for url-shortening
- money – Handling money and currency conversion with ease (almost complete port of RubyMoney)
- sass.cr – Compile SASS/SCSS to CSS (libsass binding)
- wkhtmltopdf-crystal – Bindings / wrapper for libwkhtmltox (HTML to PDF / image converter)
Cryptography
- cmac – Crystal implementation of Cipher-based Message Authentication Code (CMAC)
- sodium.cr – Crystal wrapper for the libsodium crypto API
Data Formats
- BinData – Binary data parser helper with an ASN.1 parser
- config.cr – Easy to use configuration format parser
- crinder – Class based json renderer
- Crystalizer – (De)serialize any Crystal object; supporting JSON, YAML, and Byte formats out of the box
- CSV – parsing and generating for comma-separated values (Crystal stdlib)
- front_matter.cr – Separates a files front matter from its content
- geoip2.cr – GeoIP2 reader
- HAR – HAR (HTTP Archive) parser
- INI – INI file parser (Crystal stdlib)
- JSON – parsing and generating JSON documents (Crystal stdlib)
- JSON tools – An implementation of JSON Patch and Pointer RFC’s
- JSON::OnSteroids – handle and mutate JSON document easily
- maxminddb.cr – MaxMindDB reader
- toml.cr – TOML parser
- XML – parsing and generating XML documents (Crystal stdlib)
- YAML – parsing and generating YAML documents (Crystal stdlib)
Data Generators
- faker – A library for generating fake data
- hashids.cr – A library to generate YouTube-like ids from one or many numbers
- prime – A prime number generator
Database Drivers/Clients
- couchdb.cr – CouchDB client
- cryomongo – MongoDB driver
- crystal-db – Common db api
- crystal-ldap – LDAP client
- crystal-mysql – MySQL connector for Crystal
- crystal-pg – A Postgres driver
- crystal-redis – Full featured Redis client
- crystal-rethinkdb – Driver for RethinkDB / RebirthDB
- crystal-sqlite3 – SQLite3 bindings
- leveldb – Crystal bindings for LevelDB
- rocksdb.cr – RocksDB client
Database Tools
- migrate – A simpler database migration tool with transactions
- queryit – A setupless terminal based SQL query runner.
Debugging
- debug.cr –
debug!(…)
macro forpp
-style debugging
Dependency Injection
- Athena Dependency Injection – Robust dependency injection service container framework
- Crystal-DI – Lightweight DI Container
- HardWire – A compile-time non-intrusive dependency injection system.
- syringe – A simple and basic dependency injection shard for crystal
- carbon – Fun, testable, and adapter-based email library
- crystal-email – Simple e-mail sending library
- CrystalEmail – A RFC compliant Email validator
- sendgrid.cr – Simple Sendgrid Client
Environment Management
- asdf-crystal – Plugin for asdf version manager
- crenv – Crystal version manager
- rcm.cr – Redis Cluster Manager
Examples and funny stuff
- blackjack-cr – Console Blackjack
- crystal-patterns – Examples of GOF patters
- crystalworld – realworld.io back-end API implementation
- exercism-crystal – Exercism exercises
- try.cr – Try monad
Framework Components
- Athena Event Dispatcher – A Mediator and Observer pattern event library
- device_detector – Shard for detect device by user agent string
- Exception Page – An exceptional exception page for Crystal web libraries and frameworks
- graphql – Type-safe GraphQL server implementation
- graphql-crystal – GraphQL implementation
- kemal-session – Session handler for Kemal
- mochi – Authentication shard inspired by Devise supporting: Authenticable, Confirmable, Invitable & more
- motion.cr – Object oriented frontend library for Amber
- multi-auth – Standardized multi-provider OAuth2 authentication (inspired by omniauth)
- praetorian – Minimalist authorization library inspired by Pundit
- Shield – Comprehensive security for Lucky framework
- shrine.cr – File Attachment toolkit for Crystal applications. Heavily inspired by Shrine for Ruby
- tourmaline – Telegram bot framework with an API loosely based on telegraf.js
Game Development
- CrSFML – Bindings to SFML multimedia/game library
- crystal-chipmunk – Bindings to Chipmunk, a fast and lightweight 2D game physics library
- crystal-imgui-sfml – Bindings to integrate Dear ImGui into an SFML project
- entitas.cr – A Entity Component System Framework for Crystal
- glove – A library for gaming development
GUI Development
- crystal-imgui – Bindings to Dear ImGui, an immediate-mode graphical UI library
- Iu – UI framework based on the Fusion/libui.cr library, with custom elements and modified bindings from hedron-crystal/hedron
HTML Builders
- form_builder.cr – Dead simple HTML form builder for Crystal with built-in support for many popular UI libraries such as Bootstrap
HTML/XML Parsing
- docx_cr_converter – parse DOCX Word
- gumbo-crystal – Bindings for Gumbo, an HTML5 parsing library made by Google
- myhtml – Fast HTML5 Parser that includes CSS selectors
HTTP
- Cable – An ActionCable “port” to Crystal, framework agnostic, 100% compatible with the ActionCable JS Client
- cossack – Simple flexible HTTP client
- crest – Simple HTTP and REST client, inspired by the Ruby’s RestClient gem
- crul – Command line HTTP client
- digest-auth – Digest authentication
- halite – Crystal HTTP Requests with a chainable REST API, built-in sessions and loggers
- http-multiserver.cr – Mounting multiple servers via routes (a.k.a. URL mapping)
- http-params-serializable – HTTP params (de)serialization, applicable to URL queries and URL-encoded forms
- http-protection – Protection against typical web attacks
- http2 – HTTP/2 Protocol Implementation
- HTTP::Client – HTTP client (Crystal stdlib)
- HTTP::Server – HTTP server (Crystal stdlib)
- HTTP::WebSocket – HTTP WebSocket client (Crystal stdlib)
- ntlm – NTLM authentication
- proxy-fetcher.cr – Proxy lists fetching & validating library
- sse.cr – Server-Sent Events client
Image processing
- celestine – Create SVG images using a DSL
- stumpy_png – Read and write PNG images
Implementations/Compilers
- charly – Charly Programming Language
- cltk – A crystal port of the Ruby Language Toolkit
- crisp – Lisp dialect implemented with Crystal
- LinCAS-lang – A programming language for scientific computation
- mint-lang – A refreshing programming language for the front-end web
- myst-lang – A practical, dynamic language designed to be written and understood as easily and efficiently as possible
- runic-lang – In-design toy language
Logging and monitoring
- crafana – A Grafana library to help autogenerate dashboards
- Log – logging utility (Crystal stdlib)
- statsd.cr – Statsd client library
Machine Learning
- ai4cr – Artificial Intelligence (based on https://github.com/SergioFierens/ai4r)
- Cadmium – NLP library based heavily on natural
- crystal-fann – FANN (Fast Artifical Neural Network) binding
- mxnet.cr – Bindings for MXNet
- shainet – SHAInet (Neural Network in pure crystal)
Markdown/Text Processors
- markd – Yet another markdown parser built for speed, Compliant to CommonMark specification
Misc
- aasm.cr – Easy to use finite state machine for Crystal classes
- any_hash.cr – Recursive Hash with better JSON::Any included
- atomic_write.cr – Library for writing or apppending files atomically
- burocracia.cr – burocracia.cr the dependecyless shard to validate, generate and format Brazilian burocracias such as CPF, CNPJ and CEP
- callbacks – Expressive callbacks module
- circuit_breaker – Implementation of the circuit breaker pattern
- CrSignals – Signals/slots notification library
- crystal-binary_parser – Binary parser
- crystal-web-framework-stars – Web frameworks for Crystal, most starred on Github
- crz – Functional programming library
- emoji.cr – Emoji library
- gphoto2-web.cr – Web API for libgphoto2
- i18n.cr – Internationalization shard
- immutable – Implementation of thread-safe, persistent, immutable collections
- iterm2 – Display images within the terminal using the ITerm2 Inline Images Protocol
- message_verifier.cr – Verify and generate Rails
ActiveSupport::MessageVerifier
signed tokens - monads – Monad implementation
- pinger – Ping IP addresses and DNS entries without requiring sudo
- port_midi – Crystal C bindings for the PortMIDI cross-platform MIDI I/O library
- retriable.cr – Simple DSL to retry failed code blocks
- simple_retry – Simple tool for retrying failed code blocks
- sslscan.cr – Crystal shard wrapping the rbsec/sslscan utility
- version_tools – Version-dependent behaviour, specified at compile-time
- wafalyzer – Web Application Firewall (WAF) Detector – shard + cli
- zaru_crystal – Filename sanitization
Network Protocols
- amqp-client.cr – AMQP 0-9.1, a messaging protocol, implemented by eg. RabbitMQ
- connect-proxy – Connect method style of HTTP tunnelling / HTTP proxy
- cr-xmpp – XMPP/Jabber Library
- Crirc – IRC protocol implementation (Client, Server, Bots)
- crystal-dns – DNS protocol implementation and resolver
- crystal-json-socket – JSON-socket client & server implementation. Inspired by and compatible with node-json-socket and ruby-json-socket
- crystal-mqtt – A MQTT client
- crystal-snmp – An SNMP implementation with version 1, 2c and 3 support
- fast_irc.cr – Fast IRC parser/generator
- jwt – Implementation of JWT (JSON Web Token)
- mDNS – DNS Service Discovery and multicast DNS
- msgpack-crystal – MessagePack library
- OAuth – OAuth consumer (Crystal stdlib)
- OAuth2 – OAuth2 client (Crystal stdlib)
- OpenSSL – bindings to libssl (Crystal stdlib)
- telnet.cr – Telnet protocol
- transfer_more – Clone of transfer.sh to uploads files
Networking
- ipaddress.cr – Library to handle IPv4 and IPv6 addresses
ORM/ODM Extensions
- avram – A database wrapper for reading, writing, and migrating Postgres databases.
- clear – ORM specialized to PostgreSQL only but with advanced features
- crecto – Database wrapper, based on Ecto
- granite – ORM for Postgres, Mysql, Sqlite
- jennifer.cr – Active Record pattern implementation with flexible query chainable builder and migration system
- onyx-sql – DB-agnostic SQL ORM with beautiful DSL and type-safe Query builder
- rethinkdb-orm – ORM for RethinkDB / RebirthDB
Package Management
- shards – Dependency manager for the Crystal
Processes and Threads
- await_async – Add keywords await & async in Crystal Lang
- neph – A modern command line job processor that can execute jobs concurrently
- promise – A Promise implementation with type inference
- werk – Dead simple task runner with concurrent support, ideal for local CI
Project Generators
- crystal_lib – Automatic binding generator for native libraries
- fez – A Kemal application generator
- libgen – Automatic bindings generator configured using JSON/YAML files
Queues and Messaging
- mosquito – Redis backed periodic and ad hoc job processing
- NATS.io – NATS client
- sidekiq.cr – Simple, efficient job processing
Routing
- orion – A minimal, rails-esque routing library
- router.cr – Minimum but powerful http router for HTTP::Server
Scheduling
- crystime – Advanced time, calendar, schedule, and remind library
- schedule.cr – Run periodic tasks
- tasker – A high precision scheduler including timezone aware cron jobs
Science and Data analysis
- alea – Repeatable sampling, CDF and other utilities to work with probability distributions
- ishi – Graph plotting package with a small API and sensible defaults powered by gnuplot
- linalg – Linear algebra library inspired by MATLAB and SciPy.linalg
- num.cr – Numerical computing library supporting N-Dimensional data
- predict.cr – Satellite prediction library using the sgp4 model
- quartz – Modeling and simulation framework
Search
- hermes – Data Mapper pattern implementation for ElastiSearch
- soegen – Elasticsearch client for Crystal similar to the stretcher gem for ruby
Serverless Computing
- crystal_openfaas – Template to enable crystal as first class citizens in OpenFaaS
- FaaStRuby – Serverless Software Development Platform for Ruby and Crystal.
- secrets-env – Extends ENV module to read values injected by docker / kubernetes secrets and other orchestration tools.
System
- baked_file_system – Virtual file system implementation
- hardware – Get CPU, Memory and Network informations of the running OS and its processes
Task management
- cake – Production-ready Make-like utility tool
- sam – Another one Rake-like task manager with namespacing and arguments system
Template Engine
- crinja – An implementation of the Jinja2 template engine
- crustache – {{Mustache}} for Crystal
- ECR (Embedded Crystal) – compile time template language which uses plain crystal expressions (Crystal stdlib)
- Jbuilder – Generate JSON objects with a Builder-style DSL, inspired by jbuilder
- Kilt – Abstraction layer for template engines
- Slang – Lightweight, terse, templating language inspired by Ruby’s Slim
- teeplate – A library for rendering multiple template files
- Water – A library for writing HTML in plain Crystal
Testing
- crotest – A tiny and simple test framework
- crytic – Mutation testing framework
- LuckyFlow – Automated browser tests similar to Capybara
- mass-spec – Web API testing library
- microtest – Small opinionated testing library focusing on power asserts
- minitest.cr – Library for unit tests and assertions
- mocks.cr – Mocking library for Crystal
- Spec – spec framework (Crystal stdlib)
- spectator – Feature rich spec framework that uses the modern expect syntax
- timecop.cr – Library for mocking with
Time.now
. Inspired by the timecop ruby gem - vcr – A HTTP capture and replay implementation for crystal
- webdriver_pump – Page Object library. Inspired by Ruby’s WatirPump
- webmock.cr – Library for stubbing
HTTP::Client
requests
Third-party APIs
- aws-signer.cr – This library signs your HTTP requests using AWS v4
- awscr-s3 – AWS S3 interface
- awscr-signer – Sign HTTP::Request objects and generate presigned post forms
- crystal-consul – Consul API client
- crystal-darksky – Wrapper for the Dark Sky API
- crystal-swapi – Star Wars API (SWAPI) wrapper
- crystal_slack – A tool that parses Slack slash commands or send incoming web hooks
- GDAX – GDAX REST and WebSocket API Wrapper with request signing
- gitlab.cr – GitLab API wrapper
- google – Google API wrapper
- host_meta – A Web Host Metadata (https://tools.ietf.org/html/rfc6415) client
- kube-client.cr – Kubernetes API Client
- mixpanel-crystal – A library for sending events to Mixpanel
- mollie.cr – Mollie Payments API wrapper (Creditcard, PayPal, Apple Pay, Sofort, Klarna, …)
- office365 – Microsoft Graph API wrapper
- pinboard.cr – Pinboard API
- raven.cr – Raven is a client for Sentry
- stripe.cr – Stripe api wrapper
- twitter-crystal – A library to access the Twitter API
- web_finger – A WebFinger (https://tools.ietf.org/html/rfc7033) client
- ynab.cr – A library to interact with your YNAB data
Validation
- accord – Shareable validation library for Crystal Objects
- Athena Validator – Robust & flexible validation framework
- validations – Validations mixin
- validator – Data check and validation
Web Frameworks
- amber – Open source efficient and cohesive web application framework
- Athena – A web framework comprised of reusable, independent components
- grip – The microframework for writing powerful web applications
- kemal – Lightning Fast, Super Simple web framework. Inspired by Sinatra
- lucky – Catch bugs early, forget about most performance issues, and spend more time on code instead of debugging and writing tests
- runcobo – An api framework with simple, intuitive and consistent DSL, using jbuilder to render json
- Shivneri – Component based MVC web framework for crystal targeting good code structures, modularity & performance
- spider-gazelle – A Rails esque web framework with a focus on speed and extensibility
Community
- Chicago Crystal Podcast
- Chicago Crystal YouTube
- Crystal weekly newsletters
- Gitter
- Google Group
- IRC – #crystal-lang on Freenode
- Metaruby – Crystal Forum on Metaruby
- Stackoverflow
Unofficial
- Chinese-speaking Telegram Group – 来吧!TG 中文圈的朋友们!
- Crystal Programming Discord Server – Unofficial Discord server dedicated to the Crystal Programming Language
- Portuguese-speaking Telegram Group – Bem vindos ao Crystal Brasil!
- Russian-speaking Telegram Group – Добро пожаловать, товарищ!
Resources
- Crystal for Rubyists – Free book to bootstrap your Crystal journey
- Crystal Mastery – Screencasts for learning Crystal
- crystal-koans – Learn Crystal by writing unit tests
- crystal-lang.org – Official language site
- devdocs.io – API Documentation Browser with Crystal support
- getgood.at – Learn Crystal in a Day
- Programming Crystal – PragProg book to start your Crystal journey
Official Documentation Translations
- br.crystal-lang.org – Brazilian
- ja.crystal-lang.org – Japanese
- kr.crystal-lang.org – Korean
- ru.crystal-lang.org – Russian
- tw.crystal-lang.org – Chinese Traditional
Services and Apps
- carc.in – A web service that runs your code and displays the result
- Crank – A Procfile-based application manager (like Foreman)
- cry – Ability to execute crystal code in a fashion similar to Ruby’s pry edit
- Crystal [ANN] – Announce new project, blog post, version update or any other Crystal work
- crystalshards.herokuapp.com, crystalshards.xyz – Web services that list all available Crystal shards
- Crystular – Regular expression tester
- DeBot – IRC bot written in Crystal
- icr – Interactive console for Crystal (like IRB for Ruby)
- Invidious – Invidious is an alternative front-end to YouTube
- mpngin – A URL shortener with simple stats
- quicktype – Generate models and serializers from JSON, JSON Schema, GraphQL, and TypeScript
- shards.info – Web service that lists all repositories on GitHub that have Crystal code in them. The sources are available on GitHub
Tools
- ast_helper – Helper tool to debug parser and formatter
- crystal-base – CentOS base docker image for Crystal development
- crystal-dash-docset – Dash docset generator
- public_suffix – A small library designed to make the Public Suffix List (https://publicsuffix.org/) easier to use
DevOps
- ansible-crystal – Ansible playbook for installing crystal
- DPPM – An easy, universal way to install and manage applications as packages (mostly Linux)
Editor Plugins
- Atom
- crystal-tools – Enables built in tools in Crystal compiler
- language-crystal-actual – Crystal language support in Atom
- Emacs
- emacs-crystal-mode – Crystal language support for Emacs
- scry – Code analysis server for Crystal implementing the Language Server Protocol
- Spacemacs
- crystal-spacemacs-layer – Spacemacs contribution layer for Crystal
- Sublime
- sublime-crystal – Crystal syntax highlighting for sublime Text
- TextMate
- Crystal.tmbundle – Crystal syntax highlighting, compile, format command, snippets
- Vim
- vim-crystal – Vim filetype support for Crystal
- vim-slang – Vim filetype support for Slang Templating Engine
- Visual Studio Code
- vscode-crystal – Crystal language support in VSCode
- vscode-crystal-ide – Crystal IDE powered by Language Server Protocol
- vscode-crystal-lang – Formatter, linter and syntax highlighting for
cr
andecr
files
Shell plugins
- crun – Crystal Run : shebang wrapper for Crystal
- crystal-zsh – .oh-my-zsh plugin
Tags
Crystal Programming