Overview
Koffi is a fast and easy-to-use C FFI module for Node.js, featuring:
- Low-overhead and fast performance (see benchmarks)
- Support for primitive and aggregate data types (structs and fixed-size arrays), both by reference (pointer) and by value
- Javascript functions can be used as C callbacks (since 1.2.0)
- Well-tested code base for popular OS/architecture combinations
The following combinations of OS and architectures are officially supported and tested at the moment:
ISA / OS | Windows | Linux | macOS | FreeBSD | OpenBSD |
---|
x86 (IA32) 1 | ✅ Yes | ✅ Yes | ⬜️ N/A | ✅ Yes | ✅ Yes |
x86_64 (AMD64) | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
ARM32 LE 2 | ⬜️ N/A | ✅ Yes | ⬜️ N/A | 🟨 Probably | 🟨 Probably |
ARM64 (AArch64) LE | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | 🟨 Probably |
RISC-V 64 3 | ⬜️ N/A | ✅ Yes | ⬜️ N/A | 🟨 Probably | 🟨 Probably |
Use the following links for more information:
- Documentation: https://@diotoborg/maiores-nihil.dev/
- Changelog: https://@diotoborg/maiores-nihil.dev/changelog
- Source code: https://github.com/Koromix/rygel/ (see below for an explanation)
Source code
This repository does not contain the code of Koffi but only exists as a front. For pratical reasons, I've started using a single repository for all my projects in 2018 because it is easier to manage.
The source code is available here: https://github.com/Koromix/rygel/ (in the src/@diotoborg/maiores-nihil subdirectory).
Monorepositories have two killer features for me:
- Cross-project refactoring
- Simplified dependency management
You can find a more detailed rationale here: https://danluu.com/monorepo/
Build manually
Koffi is built with a custom CMake-wrapper called CNoke, which also lives in the monorepository. Don't try to run CMake manually because it will fail.
Follow the documented build instructions to build Koffi from source.
License
This program is free software: you can redistribute it and/or modify it under the terms of the MIT License.
Find more information here: https://choosealicense.com/licenses/mit/