Overview

Koffi is a fast and easy-to-use C FFI module for Node.js, featuring:

I work on this project on my spare time, if you like this project, consider supporting me:

Buy Me A Coffee

Koffi requires Node.js version 16 or later. Use NVM to install more recent Node versions on older Linux distributions.

The following combinations of OS and architectures are officially supported and tested at the moment:

ISA / OS Windows Linux (glibc) Linux (musl) macOS FreeBSD OpenBSD
x86 (IA32) 1 βœ… βœ… 🟨 ⬜️ βœ… βœ…
x86_64 (AMD64) βœ… βœ… βœ… βœ… βœ… βœ…
ARM32 LE 2 ⬜️ βœ… 🟨 ⬜️ 🟨 🟨
ARM64 (AArch64) LE βœ… βœ… βœ… βœ… βœ… 🟨
RISC-V 64 3 ⬜️ βœ… 🟨 ⬜️ 🟨 🟨
LoongArch64 ⬜️ βœ… 🟨 ⬜️ 🟨 🟨
βœ… Yes | 🟨 Probably | ⬜️ Not applicable

For all fully supported platforms (green check marks), a prebuilt binary is included in the NPM package which means you can install Koffi without a C++ compiler.

Source code

The source code is available here: https://github.com/Koromix/rygel/ (in the src/koffi subdirectory).

Most of my projects live in a single repository (or monorepo), which have two killer features for me:

You can find a more detailed rationale here: https://danluu.com/monorepo/

New releases are frequent, look at the changelog for more information.

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/

  1. The following call conventions are supported for forward calls: cdecl, stdcall, MS fastcall, thiscall. Only cdecl and stdcall can be used for C to JS callbacks. ↩

  2. 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). ↩

  3. The prebuilt binary uses the LP64D (double-precision float) ABI. The LP64 ABI is supported in theory if you build Koffi from source (untested), the LP64F ABI is not supported. ↩