# Languages

> One core, many bindings. Everything below the Python bindings is generated from the C ABI rather than written by hand.

- [Rust](https://otio-rust-docs.vercel.app/docs/languages/rust/index.html.md): The core itself. A document owns its objects; everything else is built on this. Lives in `crates/otio-core`.
- [Python](https://otio-rust-docs.vercel.app/docs/languages/python/index.html.md): A drop-in replacement for upstream OpenTimelineIO, measured against its own test suite. Lives in `crates/otio-python`.
- [TypeScript](https://otio-rust-docs.vercel.app/docs/languages/typescript/index.html.md): The core as WebAssembly, in a browser or in Node. No document to hold. Lives in `crates/otio-wasm/ts`.
- [Go](https://otio-rust-docs.vercel.app/docs/languages/go/index.html.md): cgo over libotio. Methods, embedded structs for the schema ladder, and an error. Lives in `sdk/go`.
- [Swift](https://otio-rust-docs.vercel.app/docs/languages/swift/index.html.md): A SwiftPM package: a class per schema, real enums, and throwing calls. Lives in `sdk/swift`.
- [C++](https://otio-rust-docs.vercel.app/docs/languages/cpp/index.html.md): Header-only C++17. Objects are small value types over an arena handle. Lives in `sdk/cpp`.
- [Zig](https://otio-rust-docs.vercel.app/docs/languages/zig/index.html.md): The one generated SDK that keeps the document in the open, because an arena is how Zig works. Lives in `sdk/zig`.
- [C](https://otio-rust-docs.vercel.app/docs/languages/c/index.html.md): The ABI every other SDK is generated from. Out-parameters and status codes. Lives in `crates/otio-capi`.
- [C#](https://otio-rust-docs.vercel.app/docs/languages/csharp/index.html.md): A .NET class library over the same library, with exceptions and no unsafe code. Lives in `sdk/csharp`.
- [Objective-C](https://otio-rust-docs.vercel.app/docs/languages/objectivec/index.html.md): Cocoa: a class per schema, values as C structs, and failure as an NSError. Lives in `sdk/objc`.
