Awesome Crystal

Awesome Build Status

A curated list of awesome Crystal code and resources. Inspired by awesome68k 9k and awesome-awesomeness20k 3k . 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

Api Builders

C bindings

Caching

  • bloom_filter - Implementation of Bloom filter
  • bojack51 8 - A non-reliable in-memory key-value store
  • cache-hash - A key/value store where entries expire after a specified interval
  • crystal-memcached25 7 - Implementation of a memcached client
  • Nuummite4 1 - A tiny persistent embedded key-value store

Cli Builders

  • admiral23 5 - A robust DSL for writing command line interfaces
  • cli38 2 - Library for building command-line interface applications
  • clim - Slim command line interface builder
  • commander36 4 - Command-line interface builder
  • completion38 6 - Easy command line completion engine
  • optarg - Yet another library for parsing command-line options and arguments

Cli Utils

  • dl - Simple utility for download files by URLs from list
  • noteesh - Notes and Todo list in command line
  • progress90 8 - [==..] Progress bar
  • progress_bar.cr - A simple and customizable progress bar
  • spinner35 2 - Terminal Spinner
  • terminal_table.cr10 2 - Simple ASCII table generator
  • todo - Todo list working in command line

Configuration

Converters

  • human_file_size.cr - JSON & YAML mapping converter for human file sizes in serialized data
  • moola - Library for dealing with money and conversion (inspired by RubyMoney2k 516 )
  • ms - Library to easily convert various time formats to milliseconds and milliseconds to human readable format
  • sass.cr - Compile SASS/SCSS to CSS (libsass4k 480 binding)
  • time_format.cr - Convert time in human readable format with ease
  • turkish-number - Turn integers into the Turkish words
  • wkhtmltopdf-crystal3 1 - Bindings / wrapper for libwkhtmltox (HTML to PDF / image converter)

Data Generators

  • faker59 2 - A library for generating fake data
  • hashids.cr3 1 - A library to generate YouTube-like ids from one or many numbers

Database Drivers/Clients

Database Tools

  • crecto-admin8 2 - Admin dashboard for Crecto and your database
  • micrate49 5 - Database migration tool
  • migrate - A simpler database migration tool with transactions

Development Tools

  • guardian374 36 - File change watcher for Crystal and Non-Crystal libs
  • kemal-watcher - Kemal plugin to watch files and live-reload the browser
  • sentry57 5 - Watches src files, rebuilds/reruns application on file changes
  • sentry-run - Reload code changes using Sentry.run
  • Warden - Watches files, run command and a git command if succeed on file changes
  • watcher - Watch file changes using File.stat

Email

Environment Management

  • asdf-crystal5 1 - Plugin for asdf version manager
  • crenv56 3 - Crystal version manager
  • rcm.cr7 3 - Redis Cluster Manager

Examples and funny stuff

Feature Flipping

  • flipper - Feature flipping/flags/rollouts. Supports multiple backends

Framework Components

Game Development

  • CrSFML8 1 - Bindings to SFML multimedia/game library
  • crystal-chipmunk - Bindings for Chipmunk, a fast and lightweight 2D game physics library
  • glove19 1 - A library for gaming development
  • inari - A collection of games using Glove as the game engine
  • mos_game - Mini Offline Singleplayer game

GUI library

HTML/XML Parsing

  • crystagiri41 3 - An Html Reader / parser like Nokogiri7k 1k Ruby gem
  • gumbo-crystal - Bindings for Gumbo4k 646 , an HTML5 parsing library made by Google
  • hq.cr - Simple wrapper for crystal-xml
  • modest21 1 - CSS selectors for HTML5 Parser myhtml
  • myhtml17 6 - Fast HTML5 Parser

HTTP

  • cossack - Simple flexible HTTP client
  • crest - Simple HTTP and REST client, inspired by the Ruby's RestClient gem
  • crul87 10 - Command line HTTP client
  • cryload69 5 - HTTP benchmarking tool
  • halite10 1 - Yet another simple HTTP and REST client with a chainable API, built-in sessions and timeouts
  • helmet12 5 - Set security-related HTTP headers
  • http-multiserver.cr - Mounting multiple servers via routes (a.k.a. URL mapping)
  • http-protection - Protection against typical web attacks
  • http2 - HTTP/2 Protocol Implementation
  • http_distributor - HTTP server which allows sneaky http requests
  • http_parser.cr4 1 - Wrapper for Http Parser lib1k 413
  • keyer_cr - Adds HTTP GET/POST parameter parsing as a Hash-like object
  • resp-crystal4 2 - Lightweight RESP client

Image processing

Implementations/Compilers

  • charly - Charly Programming Language
  • cltk - A crystal port of the Ruby Language Toolkit
  • cppize12 1 - Crystal-to-C++ transpiler
  • crisp22 4 - Lisp dialect implemented with Crystal
  • crow35 2 - Transpile/compile Crystal to Flow
  • myst-lang - A practical, dynamic language designed to be written and understood as easily and efficiently as possible
  • NuummiteOS32 3 - An OS written in Crystal as a Proof of Concept
  • zir - Realizes to write macros in any scripts into any languages

Logging and monitoring

Machine Learning

Markdown/Text Processors

  • html-pipeline - HTML processing filters and utilities
  • markd4 1 - Yet another markdown parser built for speed, Compliant to CommonMark specification
  • remarkdown3 1 - GFM for Crystal

Misc

  • aasm.cr17 3 - Easy to use finite state machine for Crystal classes
  • accord - Sharable validations for Crystal objects
  • any_hash.cr4 1 - Recursive Hash with better JSON::Any included
  • circuit_breaker - Implementation of the circuit breaker pattern
  • crystal-binary_parser - Binary parser
  • crystal-futures40 4 - Future type implementation
  • crz22 2 - Functional programming library
  • denetmen22 1 - Useful micro validator / check library
  • emoji.cr13 2 - Emoji library
  • hoop50 2 - Building native OSX apps
  • html_builder20 8 - DSL for creating HTML
  • i18n.cr - Internationalization shard
  • immutable107 5 - Implementation of thread-safe, persistent, immutable collections
  • inflector.cr - Singularize, pluralize, camelize, etc (port from ActiveSupport)
  • lirith - Graphics engine
  • m3u8 - Generate and parse m3u8 playlists for HTTP Live Streaming
  • manual-generator - Tool to generate PDF manuals from documentation sites
  • raytracer - CPU Raytracer with examples
  • syscall.cr - Raw syscall interface
  • tren61 2 - Give your SQL some love
  • ulid2 1 - Universally Unique Lexicographically Sortable Identifier (ULID)
  • wikicr - Wiki using git to manage revisions

Networking

  • amqp.cr21 2 - AMQP 0.9.1 client with RabbitMQ extensions
  • bson.cr13 4 - Native BSON implementation
  • Crirc - IRC protocol implementation (Client, Server, Bots)
  • fast_irc.cr5 1 - Fast IRC parser/generator
  • ipaddress.cr - Library to handle IPv4 and IPv6 addresses
  • jwt7 2 - Implementation of JWT (JSON Web Token)
  • msgpack-crystal - MessagePack library
  • transfer_more - Clone of transfer.sh to uploads files

ORM/ODM Extensions

  • active_record.cr159 28 - Active Record pattern implementation
  • clear - ORM specialized to PostgreSQL only but with advanced features
  • core7 2 - Pure, transparent and efficient ORM
  • crecto81 14 - Database wrapper, based on Ecto
  • granite-orm30 7 - ORM for Postgres, Mysql, Sqlite
  • jennifer.cr110 21 - Active Record pattern implementation with flexible query chainable builder and migration system
  • ohm-crystal37 4 - Object-hash mapping library for Redis
  • record12 12 - Type safe querying, saving and updating
  • redis-tsv.cr4 1 - Import and export data from Redis in TSV format
  • stal-crystal - Set algebra solver for Redis
  • topaz34 7 - A simple and useful db wrapper

Package Management

  • CRelease - Version and git tag manager that makes shard releases easy
  • shards199 24 - Dependency manager for the Crystal

Processes and Threads

  • neph11 2 - A modern command line job processor that can execute jobs concurrently
  • promise - A Promise Implementation

Project Generators

  • bindgencr - Generator of bindings based on castxml output
  • crystal_lib - Automatic binding generator for native libraries
  • fez29 4 - A Kemal application generator
  • kgen - Kemalyst command line tool for console, init, generate (scaffolding), and watch.
  • libgen - Automatic bindings generator configured using JSON/YAML files
  • wasp4 1 - Static Site Generator

Queues and Messaging

  • dispatch - In memory asynchronous job processing
  • mosquito - Redis backed periodic and ad hoc job processing
  • sidekiq.cr354 25 - Simple, efficient job processing

Routing

  • crouter23 7 - A standalone router
  • orion5 1 - A minimal, rails-esque routing library
  • router.cr35 3 - Minimum but powerful http router for HTTP::Server
  • toro59 10 - Tree Oriented Routing

Scheduling

Science and Data analysis

  • linalg - Linear algebra library inspired by MATLAB and SciPy.linalg
  • predict.cr - Satellite prediction library using the sgp4 model
  • scorystal - Scoring API for PMML - supports RF and GBM
  • stats - An expressive implementation of statistical distributions

Search

  • hermes - Data Mapper pattern implementation for ElastiSearch
  • query-builder39 4 - Sql Query Builder library
  • query.cr8 1 - Query abstraction
  • soegen12 3 - Elasticsearch client for Crystal similar to the stretcher gem for ruby

Task management

  • cake - Production-ready Make-like utility tool
  • sam - Another one Rake-like task manager with namespacing and arguments system

Template Engine

  • crikey - Templating engine inspired by Hiccup2k 145
  • crinja1 1 - An implementation of the Jinja2 template engine
  • crustache32 3 - {{Mustache}} for Crystal
  • Kilt49 11 - Abstraction layer for template engines
  • Slang86 21 - Lightweight, terse, templating language inspired by Ruby's Slim
  • teeplate2 1 - A library for rendering multiple template files
  • temel35 2 - Extensible HTML::Builder alternative for Crystal, supports custom tag definitions

Testing

  • crotest16 2 - A tiny and simple test framework
  • microtest5 1 - Small opinionated testing library focusing on power asserts
  • minitest.cr47 6 - Library for unit tests and assertions
  • mocks.cr19 8 - Mocking library for Crystal
  • spec2-mocks5 1 - An adapter of mocks.cr for spec2.cr
  • spec2.cr63 16 - Enhanced testing library
  • timecop.cr - Library for mocking with Time.now. Inspired by timecop ruby gem3k 172
  • webmock.cr33 16 - Library for stubbing HTTP::Client requests

Third-party APIs

Virtualization

  • baked_file_system41 5 - Virtual file system implementation
  • rcpu31 3 - A virtual machine emulator and assembler

Web Frameworks

  • amber560 68 - Open source efficient and cohesive web application framework
  • kemal884 81 - Lightning Fast, Super Simple web framework. Inspired by Sinatra
  • lattice-core37 1 - A WebSocket-first object-oriented framework (based on Kemal)
  • lucky199 15 - Catch bugs early, forget about most performance issues, and spend more time on code instead of debugging and writing tests
  • prism - Light, modular web framework
  • raze54 6 - Modular, light web framework
  • spider-gazelle - A Rails esque web framework with a focus on speed and extensibility

Web Servers

  • fast-http-server98 12 - Super fast, zero configuration command line HTTP Server
  • prax.cr92 16 - Rack proxy server for development
  • serve - Command line static HTTP server

Community

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)
  • cry2 4 - 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
  • DeBot32 22 - IRC bot written in Crystal
  • Ficha - A super secret chat app, for any body who needs privacy
  • Firegrid - Click anywhere with only a few key strokes
  • icr75 16 - Interactive console for Crystal (like IRB for Ruby)
  • JSON to Crystal - Paste in a JSON object and get Crystal mappings in response
  • nes27 4 - A NES emulator
  • shards.rocks - Service that manages dependencies inspired by Gemnasium and David
  • soundmemes.cr - Telegram Bot built on top of tele.cr
  • torrent20 3 - A BitTorrent client

Tools

DevOps

Editor Plugins

Shell plugins