This is a big new Lucky release with lots of improvements and additions to Avram, Lucky's ORM.
A new version of cr-dotenv has been released: https://github.com/gdotdesign/cr-dotenv/releases/tag/v0.3.0
This is a project I've been working on for weeks and I'm very excited to finally have it to a point where I can announce it to the community.
Marionette was inspired by Puppeteer, and actually started as an attempt to port Puppeteer to Crystal. I learned after about a week of struggle that Node is much better adapted to an async workflow than Crystal. The lack of a good event system and promises made working with WebSockets in the way I needed quite difficult. I thought Marionette was doomed to failure until something changed in Crystal or the ecosystem, but then I learned about the actual Marionette protocol from Firefox.
You can check out the project at https://github.com/watzon/marionette. The API is incomplete, but usable!
Defense is a Crystal HTTP handler for throttling, blocking and tracking malicious requests, heavily inspired by rack-attack. It keeps its state inside a Redis database but also comes with a simple in-memory store and the possibility to introduce your own custom store.
In Ruby there are a slew of different options for working with IP addresses, including the built in
IPAddr class, but up till now Crystal has been lacking such functionality.
But no more! Subnet is a shard that makes working with IP addresses in Crystal not only possible, but extremely simple. It allows addresses to be used in Range literals, the creation of subnets and supernets, and many other things.
Sorry for bombarding you with projects ;)
I love Crystal and have been using it for years, but one of the things I've felt like was missing for a long time was a good web scraper. So, because I definitely don't have enough personal projects, I decided to start building one myself.
You can see some examples in the README and more will be coming very soon, as well as full documentation.
Learn about the type-safe query builder, powerful migrations, and how Lucky prevents N+1 queries at the source
Thanks for @jeremywoertink for his work on these guides!
I know what you're thinking, "why another logger?!" I'll tell you why. Nothing out there currently has the features that I'm looking for in a logger. It seems like every logger in the Crystal ecosystem is super opinionated and lacks support for custom formatting and transports, so I created Strange.
Strange is a logger for those who want to do more with logs than just print them to the console. It supports all of the levels outlined in RFC5424, custom transports that allow you to define exactly where your logs go (whether that be the console, a file, or an external service), and custom formatters that let you format the output exactly how you want.
Strange is inspired by Winston, a powerful logger for NodeJS.