Library / SDK
mosra/corrade avatar
mosra/corrade

Corrade: the utility layer under the Magnum graphics engine

C++11 multiplatform utility library

523 stars114 forksC++NOASSERTION

At a glance

What is it?
Corrade is a C++11 multiplatform utility library that sits underneath Magnum, and its job is unglamorous and essential, bridging filesystem, console and environment differences across platforms, providing containers that compile faster than STL ones, and offering a plugin system with hot code reload.
Who is it for?
Corrade fits a C++ developer building something that has to run on Linux, Windows, macOS, mobile and the web through Emscripten, and who wants one filesystem abstraction, one plugin system and one signal mechanism rather than five conditional code paths.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Corrade is for

Corrade is a multiplatform utility library written in C++11, and the project explains its own scope in five feature bullets. There are low-level utilities to bridge platform differences when accessing OS functionality, filesystem, console and environment. There are lightweight container implementations that complement STL features with a focus on compilation speed, ease of use and performance. There is a test framework emphasizing flexibility, extensibility, minimal use of macros and clarity of diagnostic output. There is a plugin management library with static and dynamic plugins, dependency handling and hot code reload. And there is a signal and slot connection library with full type safety. The name itself is a dictionary entry, corrade meaning to scrape together or to gather together from various sources, which is a fair description of a library that exists to gather platform differences into one place. The homepage is magnum.graphics/corrade, the documentation is at doc.magnum.graphics/corrade, and the library is MIT licensed.

The platforms it covers

The supported platforms list is the reason the library exists in the shape it does. Linux and embedded Linux are supported. Windows is supported with MSVC, clang-cl and MinGW, and Windows RT for Store and Phone. macOS and iOS are supported. Android is supported. And the web is supported through asm.js or WebAssembly via Emscripten. The point of the list is not breadth for its own sake. A utility library that bridges platform differences is only worth having if the platforms actually differ, and the shape of the list tells you the author was targeting shipping software across all of them rather than a server or a single desktop. Detailed per-platform build status is tracked on the Magnum Project build status page rather than in the readme, which is a sensible division because the matrix is long and changes often. The repository topics carry the same list, with simd, cmake, emscripten and the mobile platforms all named.

How it relates to Magnum, and why that matters

Corrade is used as a base for the Magnum graphics engine, among other things, and that relationship defines its scope in a useful way. Magnum is a graphics engine, so the things Magnum needs from a utility library are filesystem access for loading assets, console and environment handling, a container library it can rely on, a plugin system for loading backends, and a signal mechanism for event handling. Corrade provides exactly those five things and describes them in the same order. That is why it is described as a multiplatform utility library rather than a general purpose one. The Magnum Project also publishes feature overview pages that go into further detail on what the individual libraries do, so if you are evaluating Corrade on its own terms, the Magnum pages are the place to see how the pieces fit together in a real consumer. The community chat is shared with the rest of the project on Gitter, and the documentation has a changelog page for what was added or improved recently.

Getting it, and the single-header route

The documented path is to download, build and install Corrade as the building documentation explains, and the project provides packages for many platforms, including Windows, Linux and macOS. After installing, the recommended way to get started is to read some of the examples and tutorials, which the documentation links as an index. The interesting alternative is that various Corrade functionality is available through single-header libraries, so you can just download a file, include it in your project and you are ready to go, with no buildsystem wrangling needed. That is a genuinely useful escape hatch for a small utility you want to drop into an existing project without dragging CMake configuration into it, and the documentation has a dedicated page listing what is available that way. The repository itself is a CMake project with a CMakeLists.txt at the top level, a modules/ directory for the individual modules, a package/ directory for packaging, a conanfile.py for the Conan route, a toolchains/ directory for cross-compilation setups, and doc/ for the documentation sources.

The plugin manager and the signal library, in detail

Two of the five features carry more design weight than their one-line descriptions suggest. The plugin management library handles both static and dynamic plugins, dependency handling and hot code reload, and the hot reload part is what makes it useful beyond a simple loader: a plugin can be swapped in a running process without restarting. That is a feature you cannot build on top of a plain dynamic loading API without considerable effort. The signal and slot connection library is described as having full type safety, which is the whole point of having one rather than using the alternatives. The type safety means the compiler rejects a connection between a signal and a slot whose arguments do not match, which turns a class of runtime bug into a compile error. The test framework, meanwhile, is defined by what it does not do as much as what it does: minimal use of macros and clarity of diagnostic output, so a failing test tells you what went wrong without you having to decode a template error.

Contributing, and the coding style guide

The project is explicit about how outside contributions should arrive. If you want to contribute, spotted a bug, need a feature or have an idea, you can get a copy of the sources from GitHub and start right away. The readme points at the guide about how to download and build Corrade, and at the guide about coding style and best practices, which you should follow to keep the library as consistent and maintainable as possible. The word should is doing work there, since a utility library that is a base for other projects lives or dies on internal consistency, and a style guide is cheaper than a rewrite. The repository has a CONTRIBUTING.md at the top level and an .editorconfig, both of which reinforce that idea. Credits are maintained in the documentation, with a detailed contributor list and, separately, a list of third party components that affect public use of the project, which is the sort of thing that matters when you are about to vendor a library into a product.

The licence, and the example code

Corrade itself and its documentation are licensed under the MIT/Expat licence, with the details in the COPYING file. The example code is treated differently and more permissively. All example code in src/examples is put into public domain, or UNLICENSE, to free you from any legal obstacles when reusing the code in your apps, with the details in the COPYING-examples file. That is a small decision with a real effect, because example code is the part people copy most often, and it means the examples are yours to use without a licence question. The project also carries a CREDITS.md file at the top level, and the readme closes by thanking everyone involved. The main repository sits on GitHub and GitLab, the contact e-mail is [email protected], there is a Google Groups mailing list with an archive, and the author is on Bluesky.

Where Corrade is the wrong choice

Two boundaries are worth stating plainly. The first is that Corrade is not a replacement for the standard library, and its containers do not claim to be faster than STL. The claim is about compilation speed, ease of use and performance as a secondary concern, and the description says they complement STL features rather than replace them. If your project already has a container and signal library it is happy with, adding Corrade gives you a second opinion on those choices rather than removing the first, which is a cost rather than a benefit. The second boundary is the platform story. If you are building for one platform, the bridging layer is mostly overhead, and if you are building for the web through Emscripten the C++11 baseline and the toolchain setup are real considerations rather than details. The release history also shows a deliberate pace, with tagged releases in January 2019, October 2019 and June 2020, and the last push to the repository on 2026-10-20, so the tree is actively worked on even where the version tags are infrequent.

Editorial conclusion

Corrade fits a C++ developer building something that has to run on Linux, Windows, macOS, mobile and the web through Emscripten, and who wants one filesystem abstraction, one plugin system and one signal mechanism rather than five conditional code paths. It does not fit a developer who wants a general purpose standard library replacement, because it is a utility layer that complements STL rather than displaces it, and its containers are justified by compilation speed and ease of use rather than by performance. It also does not fit a Windows-only project, since the library's value is in the platform bridging and a single-platform project has little to bridge. Before you build it, read the building guide for the platform packages, and read the coding style guide before contributing, since the project asks contributors to follow it to keep the library consistent.

Frequently asked questions

What is Corrade used for?

It is a multiplatform utility library written in C++11 providing low-level utilities to bridge platform differences in OS functionality, filesystem, console and environment access, lightweight containers complementing STL, a test framework, a plugin management library with static and dynamic plugins plus hot code reload, and a signal and slot library with full type safety.

Which platforms does Corrade support?

Linux and embedded Linux, Windows with MSVC, clang-cl and MinGW, Windows RT for Store and Phone, macOS, iOS, Android, and the web through asm.js or WebAssembly via Emscripten. Detailed per-platform build status is tracked on the Magnum Project build status page.

How do I use Corrade without building it into my project?

Various parts of Corrade are available as single-header libraries. You download the file, include it in your project and you are ready to go, with no buildsystem wrangling needed. The full documentation for the library and the list of what is available this way are on the project site.

What licence does Corrade use?

Corrade itself and its documentation are under the MIT/Expat licence, with details in the COPYING file. All example code in src/examples is additionally put into public domain, or UNLICENSE, so you can reuse it in your apps without legal obstacles, with details in the COPYING-examples file.

Official sources

  1. Issues
  2. mosra/corrade on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/mosra-corrade.svg)](https://hysenlabs.com/projects/mosra-corrade)

Was this useful?