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 Crystal Shards 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
-
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
-
s2_cells -
S2 Geometry
for spatial indexing
-
splay_tree_map
- Splay Tree implementation that conforms to the Hash ducktype
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
-
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
-
coin - Command-line
application that performs currency conversion via the
Fixer API
-
cride - A light CLI text
editor/IDE
-
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)
-
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
-
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::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
-
migrate - A
simpler database migration tool with transactions
-
queryit - A setupless
terminal based SQL query runner
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
-
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
HTTP
Image processing
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
Internationalization
-
crystal-i18n - An
internationalization library inspired by Ruby-I18n
-
i18n.cr -
Internationalization shard
Logging and monitoring
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
-
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
-
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
-
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
-
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
-
Athena Spec -
Common/helpful
Spec compliant
testing utilities
-
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
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
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
-
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
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
-
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