About CIMD

cimd is an Apache 2.0-licensed project created by Casper Eijkens.

Scope

cimd is a command line interface for exploring, querying, converting CGMES profiles:

Future features we want to work on

Audience

Engineers, researchers, and advisors working with CGMES data who need better tooling than what TSOs currently provide.

Why Zig?

cimd was born out of the question: “What is the speed limit for parsing equipment profiles?”. Zig allows to fully explore the answer. Zig offers full freedom to express the system design, while having many language features that facilitate safe code. Also, because Zig is extremely fast (comparable to C or Rust).

Simplicity: Zig is a simple language to read and write. Writing a parser is relatively simple, but if you do not aggressively battle complexity, it will rise against you. So by picking a simple language, we take a big step in fighting complexity. When opening any file in the project, you will find some simple, procedural code that is enirely explicit.

Speed: Zig compiles extremely fast, and will only compile faster with incremental compilation innovation. This allows for quick prototyping.

Control: Zig allows you to have the most control over the software behavior of any language, while still offering safety. If you care about performance, Zig just gives you that little bit of control.

Why not Rust?

A common question that we get a lot is why Zig instead of Rust. At the beginning of the project, Rust was also considered but eventually Zig was selected. The reasons for that are as follows: cimd is designed to be

Simply put, we do not need the safety instrumentation that Rust offers. Since we have no dependencies (besided the Zig language and std lib), we do not need Rust’s trait coherence system to import crates in a compatible way. Since cimd is single-threaded, we do not need thread-safety. And since it is a CLI tool, it is designed to precisely allocate memory at startup, execute the task, and free everything. So Rust’s extreme focus on memory safety is not really needed here.

CIMD is alpha software

cimd is not yet complete. The main functionality is present but it is only tested against the Dutch power grid model. We are fully aware that there will be edge cases of other TSO members that are not considered yet. I am working hard to make cimd ENTSOE-complete.

So, using cimd today does imply participating in the development process to some degree, which usually means inquiring about the development status of a feature you need, or reporting a bug. You are most welcome to get in touch so we can improve cimd for your usecase.

Here are some quicklinks related to CIMD:

Get Started