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://koffi.dev/
- Changelog: https://koffi.dev/changes
- Source code: https://github.com/Koromix/rygel/ (see below for an explanation)
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/koffi 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/
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/
Footnotes
-
The following call conventions are supported: cdecl, stdcall, MS fastcall, thiscall. ↩
-
The prebuilt binary uses the hard float ABI and expects a VFP coprocessor. Build from source to use Koffi with a different ABI (softfp, soft). ↩
-
The prebuilt binary uses the LP64D (double-precision float) ABI. The LP64 ABI is supported in theory if you build Koffi from source but this is untested. The LP64F ABI is not supported. ↩