Awesome Crystal
A curated list of awesome Crystal code and resources. Inspired by awesome and awesome-awesomeness.
The goal is to have projects mostly stable and useful for the community.
Search shards at shards.info or follow announcements Crystal [ANN] for more.
Contributions are welcome. Please take a quick look at the contribution guidelines first.
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
- csuuid - A Chronologically Sortable UUID
- edits.cr - Collection of edit distance algorithms
- fzy - A Crystal port of awesome Fzy project fuzzy finder algorithm
- Goban - A fast and efficient QR Code implementation
- graphlb - Collection of graph datastructure and algorithms
- haversine - An Implementation of the Haversine formula
- HKDF - HMAC-based Extract-and-Expand Key Derivation Function rfc5869
- 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
- named_information - Naming Things with Hashes rfc6920
- qr-code - QR Code generator
- radix - Radix Tree implementation
- s2_cells - S2 Geometry for spatial indexing
- secure-remote-password - SRP-6a protocol for authentication over an insecure network
- SPAKE2+ - Password Authenticated Key Exchange (PAKE) protocol, comparable to SRP-6a
- splay_tree_map - Splay Tree implementation that conforms to the Hash ducktype
- verhoeff - Implementation of the Verhoeff checksum algorithm
Blockchain
- Axentro - A custom blockchain platform
- Cocol - A minimal blockchain testbed
- secp256k1.cr - Elliptic curve used in the public-private-key cryptography
C bindings
Caching
CLI Builders
- admiral - A robust DSL for writing command line interfaces
- Athena Console - Allows for the creation of CLI based commands
- clicr - A simple declarative command line interface builder
- clim - Slim command line interface builder
- Cling - A modular, non-macro-based command line interface library
- 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
- coin - Command-line application that performs currency conversion via the Fixer API
- cride - A light CLI text editor/IDE
- git-repository - A git cli wrapper querying and cloning remote repositories with minimal data transfer
- hetzner-k3s - A CLI tool to quickly create and manage Kubernetes clusters in Hetzner Cloud
- lff - Simple and straightforward large files finder utility in command line
- meet - Start a jitsi meeting quickly from the comfort of your 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
- crunits - Tool for converting units of measure (miles to kilometers, celsius to fahrenheit etc)
- money - Handling money and currency conversion with ease (almost complete port of RubyMoney)
- sass.cr - Compile SASS/SCSS to CSS (libsass binding)
Cryptography
- cmac - Crystal implementation of Cipher-based Message Authentication Code (CMAC)
- ed25519 - the Ed25519 elliptic curve public-key signature system
described in [RFC 8032]
- monocypher.cr - Crystal wrapper for the Monocypher crypto library
- 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-schema - convert JSON serializable classes into a JSON Schema representation
- 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
Database Tools
- migrate - A simpler database migration tool with transactions
Debugging
- backtracer.cr - Shard aiming to assist with parsing backtraces into a structured form
- debug.cr -
debug!(…)
macro for pp
-style debugging
Dependency Injection
Email
Environment Management
Examples and funny stuff
Framework Components
- Athena Event Dispatcher - A Mediator and Observer pattern event library
- Athena Negotiation - Framework agnostic content negotiation 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
GUI Development
HTML Builders
- blueprint - Write reusable and testable HTML templates in plain Crystal
- form_builder.cr - Dead simple HTML form builder for Crystal with built-in support for many popular UI libraries such as Bootstrap
- to_html - The fastest HTML builder engine for Crystal
- Water - A library for writing HTML in plain Crystal
HTML/XML Parsing
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)
- link-header - HTTP Link Header Parser
- 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
- ffmpeg - FFmpeg bindings that works with StumpyPNG to extract frames
- Pluto - A fast and convenient image processing library
- 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
- novika - A free-form, moldable, interpreted programming language
- runic-lang - In-design toy language
Internationalization
- crystal-i18n - An internationalization library inspired by Ruby-I18n
- i18n.cr - Internationalization shard
- Lens - A multiformat internationalization (i18n) shard for Crystal. Supports Gettext, Ruby YAML, etc.
- Rosetta - A blazing fast internationalization (i18n) library with compile-time key lookup supporting YAML and JSON formats
Logging and monitoring
Machine Learning
Markdown/Text Processors
- cr-cmark-gfm - Crystal C bindings for cmark-gfm to work with Commonmark and Github Flavored Markdown
- 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
- anyolite - Full mruby interpreter with simple bindings, allowing for easy scripting support in projects
- 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
- defined - macros for conditional compilation based on constant definitions, version requirements, or environment variable settings
- emoji.cr - Emoji library
- gphoto2-web.cr - Web API for libgphoto2
- immutable - Implementation of thread-safe, persistent, immutable collections
- iterm2 - Display images within the terminal using the ITerm2 Inline Images Protocol
- monads - Monad implementation
- observable - Implementation of the observer pattern
- 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
- serf-handler.cr - Framework for building Serf handlers, with a suite of useful builtin capabilities
- 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
Networking
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
- 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
- concurrent.cr - Simplified concurrency using streams/pipelines, waitgroups, semaphores, smores and more
- 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
- crafka - Apache Kafka library utilizing
librdkafka
- 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
Serverless Computing
- crystal_openfaas - Template to enable crystal as first class citizens in OpenFaaS
- 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
Testing
- Athena Spec - Common/helpful Spec compliant testing utilities
- crotest - A tiny and simple test framework
- crytic - Mutation testing framework
- hashr - A tiny class makes test on JSON response easier
- 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
- selenium.cr - Selenium client for interacting with web pages for browser automation
- 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
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
- marten - A web framework that makes building web applications easy, productive, and fun
- 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
Unofficial
Resources
Official Documentation Translations
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
- 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
- procodile - Run processes in the background (and foreground) on Mac & Linux from a Procfile (for production and/or development environments)
- 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
DevOps
- ansible-crystal - Ansible playbook for installing crystal
- DPPM - An easy, universal way to install and manage applications as packages (mostly Linux)
Editor Plugins
- Acme:
- Atom
- Emacs
- Geany
- IntelliJ IDEA
- Lite-XL
- Spacemacs
- Sublime
- 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
LSP Language Server Protocol Implementations
- crystalline - Crystalline is an implementation of the Language Server Protocol written in and for the Crystal Language
- scry - Code analysis server for Crystal implementing the Language Server Protocol
Shell plugins
- crun - Crystal Run : shebang wrapper for Crystal
- crystal-zsh - .oh-my-zsh plugin