scio

scio source

What is it?

scio is an MQTT-based infrastructure management system written in Nim with Lua as its configuration language. It's an ongoing exploration of what lightweight, message-driven infrastructure tooling can look like when you strip away the weight of traditional approaches.

The architecture is split into three components. sciigi is the administrative tool that publishes commands, sciigod is the daemon that runs on managed systems and subscribes to commands addressed to it, and an MQTT broker handles the message transport between them. The naming follows an Esperanto convention I'm fond of; Scio means knowledge, sciigi means to inform, sciigod means to have been informed.

Several Esperantistoj have correctly pointed out that scio and all of it's declensions are utterly miserable to pronounce. I recently tried to explain it to a co-worker who is not an Esperantistoj, and can delightedly agree. I'm also not changing the name.

Why build it?

I use Salt professionally and have for years. I wanted to understand what an infrastructure management system looks like when you build one from scratch, and I wanted to explore whether MQTT's publish-subscribe model could serve as a simpler transport layer than the ZeroMQ-based approach Salt uses. There are lots of projects like Salt, so why not one more?

The choice of Nim for the system and Lua for configuration came from a similar place. I wrote a blog post about embedding Lua in Nim, and about a month later I had a working prototype. Nim gives me compiled binaries with minimal dependencies, and Lua gives me a configuration language that's actually a programming language. Users can write logic in their configs without me inventing a DSL.

And that DSL isn't templated yaml nonsense that DevOps tooling all seems to devolve into..

Where it's going

Scio is actively developed. Recent work has been on concretely defining the API, and adding ACL support to nmqtt so that I can eventually build my own broker instead of using Mosquitto.