Announcing Marionette: It's like Selenium, but not

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.

The Marionette protocol is a TCP protocol built on top of WebDriver and is similar to what Selenium WebDriver uses. It allows near complete control of Firefox using TCP and JSON; including the ability to navigate, take screenshots, simulate pointer events, open and close dialogs, execute javascript, and more.

You can check out the project at The API is incomplete, but usable!

Subnet: Making working with IP addresses in Crystal easy

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.

You can check out the readme documentation here or check out the api documentation here. And don't forget to give it a star if you like it!

Sorry for bombarding you with projects ;)