# Native addons



For code that JavaScript can't naturally express—tight cryptography loops, codec work, hardware access—Bare loads native addons. The [`bare-addon`](https://github.com/holepunchto/bare-addon) template is the starting point: write the addon in C, C++, Rust, or any language with a C-compatible ABI, expose it through Bare's addon API, and call it from JavaScript like any module.

<Callout type="info">
  See [`bare-addon-resolve`](/bare/reference/bare/modules/bare-addon-resolve) for the low-level resolution algorithm, and [`bare-make`](/bare/reference/bare/modules/bare-make) for the build tool addons compile with.
</Callout>

## Building prebuilt binaries [#building-prebuilt-binaries]

Shipping an addon to users means compiling it for every platform and architecture you support, not just your own machine. [Native-addon CI prebuilds](/bare/reference/native-addon-prebuilds) covers the GitHub Actions pipeline—`compile-prebuilds`, `upload-prebuilds`, `download-prebuilds`, `merge-prebuilds`, and the setup actions that go with them—that runs `bare-make` across a CI matrix and collects the results.

## See also [#see-also]

* [Native-addon CI prebuilds](/bare/reference/native-addon-prebuilds)—the GitHub Actions pipeline for cross-platform builds.
* [`bare-make` reference](/bare/reference/bare/modules/bare-make)—the build tool.
* [`bare-addon-resolve` reference](/bare/reference/bare/modules/bare-addon-resolve)—addon resolution.
* [Inside Bare](/bare/explanation/bare-runtime)—the runtime addons load into.
