You can use Ultralight from languages other than C++ and C by adopting a community binding or building your own on the C API. We provide C++ and C directly, while community projects add support for other languages.

## The C Base

Every binding sits on the C API, which mirrors the C++ surface (the JavaScript bridge, the DOM API, and data bindings included), so a binding built on the C headers reaches all of it. To see where the C API fits into the library's module map, see [Architecture](/docs/2.0/architecture).

The `<Ultralight/CAPI.h>` umbrella header pulls in the JavaScript bridge headers automatically— the DOM and data-binding headers under `<Ultralight/CAPI/>` are separate includes.

If you're writing a binding, start with [C API Conventions](/docs/2.0/c-api-conventions) for the ownership, string, and callback rules.

## Community Bindings

Community projects provide bindings for several languages.

| Language | URL |
| :-- | :-- |
| **C#** | [https://github.com/SupinePandora43/UltralightNet](https://github.com/SupinePandora43/UltralightNet) |
| **Java** (archived) | [https://github.com/LabyMod/ultralight-java](https://github.com/LabyMod/ultralight-java) |
| **Rust** (High Level) | [https://github.com/psychonautwiki/rust-ul](https://github.com/psychonautwiki/rust-ul) |
| **Rust** (Low Level) | [https://github.com/psychonautwiki/rust-ul-sys](https://github.com/psychonautwiki/rust-ul-sys) |

These are community projects, so check each one's README for the Ultralight release it targets.

If you've built a new binding, share it with us on [Discord](https://chat.ultralig.ht).
