# OpenTimelineIO for Rust > A pure-Rust OpenTimelineIO: the data model, the time math, the file-format adapters, and an SDK for every language they are generated into. This is a port of OpenTimelineIO to Rust, not a reimplementation: the arithmetic, rounding and timecode behaviour follow upstream exactly, and a file written here opens unchanged in every tool that reads OTIO. Each language SDK is generated from one C ABI, so the same calls exist everywhere, spelled the way each language spells things. Every link below is Markdown. Every page on the site also has a Markdown version at `/index.html.md`. ## Docs in one language The whole documentation with every code sample shown in that language only, plus that language's own page. Load the one you are writing code in. - [Rust](https://otio-rust-docs.vercel.app/llms/rust.txt): The core itself. A document owns its objects; everything else is built on this. - [Python](https://otio-rust-docs.vercel.app/llms/python.txt): A drop-in replacement for upstream OpenTimelineIO, measured against its own test suite. - [TypeScript](https://otio-rust-docs.vercel.app/llms/typescript.txt): The core as WebAssembly, in a browser or in Node. No document to hold. - [Go](https://otio-rust-docs.vercel.app/llms/go.txt): cgo over libotio. Methods, embedded structs for the schema ladder, and an error. - [Swift](https://otio-rust-docs.vercel.app/llms/swift.txt): A SwiftPM package: a class per schema, real enums, and throwing calls. - [C++](https://otio-rust-docs.vercel.app/llms/cpp.txt): Header-only C++17. Objects are small value types over an arena handle. - [Zig](https://otio-rust-docs.vercel.app/llms/zig.txt): The one generated SDK that keeps the document in the open, because an arena is how Zig works. - [C](https://otio-rust-docs.vercel.app/llms/c.txt): The ABI every other SDK is generated from. Out-parameters and status codes. - [C#](https://otio-rust-docs.vercel.app/llms/csharp.txt): A .NET class library over the same library, with exceptions and no unsafe code. - [Objective-C](https://otio-rust-docs.vercel.app/llms/objectivec.txt): Cocoa: a class per schema, values as C structs, and failure as an NSError. ## Start here - [Overview](https://otio-rust-docs.vercel.app/docs/index.html.md): A pure-Rust OpenTimelineIO, and a binding for every language it is generated into. - [Getting started](https://otio-rust-docs.vercel.app/docs/getting-started/index.html.md): Building the core, and reaching it from your language. ## Guides - [Reading and writing files](https://otio-rust-docs.vercel.app/docs/guides/reading-and-writing/index.html.md): The adapters, which formats each language can read and write, and what a round trip preserves. - [Editing a timeline](https://otio-rust-docs.vercel.app/docs/guides/editing/index.html.md): The ten edit operations, what each one does to its neighbours, and which of them change a track's length. - [Media linkers and hooks](https://otio-rust-docs.vercel.app/docs/guides/media-linkers-and-hooks/index.html.md): Pointing every clip a read produces at the right media, and running code of your own at fixed points around a read or a write. ## Formats - [EDL (CMX 3600)](https://otio-rust-docs.vercel.app/docs/formats/edl/index.html.md): Reading and writing Edit Decision Lists: the rate you must supply, the dialects, and what writing refuses. - [ALE (Avid Log Exchange)](https://otio-rust-docs.vercel.app/docs/formats/ale/index.html.md): Reading and writing shot logs, and where each column lands on a clip. - [Final Cut Pro XML](https://otio-rust-docs.vercel.app/docs/formats/final-cut-pro/index.html.md): FCP 7 interchange XML and FCP X XML: what each reads as, and what is kept for the round trip. - [AAF](https://otio-rust-docs.vercel.app/docs/formats/aaf/index.html.md): Reading, writing and changing AAF files, the options each takes, and how a written file relinks in Media Composer. - [Bundles (.otioz and .otiod)](https://otio-rust-docs.vercel.app/docs/formats/bundles/index.html.md): Packaging a timeline with its media, and what happens to media that is not a file. ## Concepts - [The data model](https://otio-rust-docs.vercel.app/docs/concepts/data-model/index.html.md): Timelines, stacks, tracks, clips, gaps, transitions — and the handles that name them. - [Timeline structure](https://otio-rust-docs.vercel.app/docs/concepts/timeline-structure/index.html.md): How stacks, tracks, clips, gaps and transitions nest, and what a flattened timeline looks like. - [Time ranges](https://otio-rust-docs.vercel.app/docs/concepts/time-ranges/index.html.md): The five ranges an item has, which clock each one answers in, and why they differ. - [The .otio file format](https://otio-rust-docs.vercel.app/docs/concepts/otio-file-format/index.html.md): What is in an OTIO JSON file, what this implementation guarantees about it, and where it departs from strict JSON. ## Languages - [Rust](https://otio-rust-docs.vercel.app/docs/languages/rust/index.html.md): Using the core directly, with a Document that owns its objects and one crate per file format. - [Python](https://otio-rust-docs.vercel.app/docs/languages/python/index.html.md): A drop-in replacement for upstream's opentimelineio package, built on the Rust core with PyO3. - [TypeScript](https://otio-rust-docs.vercel.app/docs/languages/typescript/index.html.md): The core compiled to WebAssembly and published to npm, for the browser and for Node, with no document to hold. - [Go](https://otio-rust-docs.vercel.app/docs/languages/go/index.html.md): A cgo package over libotio, with methods, embedded structs for the schema ladder, and an error for every failure. - [Swift](https://otio-rust-docs.vercel.app/docs/languages/swift/index.html.md): A SwiftPM package over libotio, with a class per schema, real enums and throwing calls. - [C++](https://otio-rust-docs.vercel.app/docs/languages/cpp/index.html.md): Header-only C++17 over libotio, shaped like upstream's own C++ API, with objects as small values over an arena handle. - [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 already works. - [C](https://otio-rust-docs.vercel.app/docs/languages/c/index.html.md): libotio and otio.h, the C ABI every generated SDK is built on, with handles, out-parameters and status codes. - [C#](https://otio-rust-docs.vercel.app/docs/languages/csharp/index.html.md): A .NET class library that loads libotio at run time, with a class per schema, exceptions, and nothing to dispose. - [Objective-C](https://otio-rust-docs.vercel.app/docs/languages/objectivec/index.html.md): A Cocoa library over libotio, on Apple's runtime and GNUstep's, with a class per schema, values as C structs and failure as an NSError. ## Extensions - [Extensions](https://otio-rust-docs.vercel.app/docs/extensions/overview/index.html.md): Work built on otio-rust's core that is not OpenTimelineIO, kept apart from it and off until a program turns it on. - [Timeline sync](https://otio-rust-docs.vercel.app/docs/extensions/timeline-sync/index.html.md): Sharing an OpenTimelineIO timeline between programs while it is edited, over Alchemist's Furnace or ORI Sync. - [ORI Annotations](https://otio-rust-docs.vercel.app/docs/extensions/ori-annotations/index.html.md): Reading, writing and editing the ORI project's review annotations on an OpenTimelineIO timeline. ## Internals - [How the SDKs are made](https://otio-rust-docs.vercel.app/docs/internals/how-the-sdks-are-made/index.html.md): One description of the C ABI, read out of its own source, becomes every binding. ## Reference - [The C ABI](https://otio-rust-docs.vercel.app/reference/index.html.md): every group of calls in libotio, generated from `sdk/api.json` - [Adapter](https://otio-rust-docs.vercel.app/reference/adapter/index.html.md): Reading and writing the interchange formats. - [Algorithm](https://otio-rust-docs.vercel.app/reference/algorithm/index.html.md): Operations that build a new object out of existing ones. - [Clip](https://otio-rust-docs.vercel.app/reference/clip/index.html.md): A piece of media, trimmed to the part an edit uses. - [Composable](https://otio-rust-docs.vercel.app/reference/composable/index.html.md): Anything that can sit inside a composition. - [Composition](https://otio-rust-docs.vercel.app/reference/composition/index.html.md): An item that holds other items and says where they sit. - [Document](https://otio-rust-docs.vercel.app/reference/document/index.html.md): The arena that owns every object in a timeline. - [Edit](https://otio-rust-docs.vercel.app/reference/edit/index.html.md): The ten edit operations, as an editor's tools spell them. - [Effect](https://otio-rust-docs.vercel.app/reference/effect/index.html.md): Something applied to an item that changes how it plays. - [Extensions](https://otio-rust-docs.vercel.app/reference/extensions/index.html.md): Turning on extensions: work built in otio-rust that is not part of OpenTimelineIO. - [ExternalReference](https://otio-rust-docs.vercel.app/reference/external-reference/index.html.md): Media at a URL. - [Format](https://otio-rust-docs.vercel.app/reference/format/index.html.md): The file formats this library reads and writes. - [FreezeFrame](https://otio-rust-docs.vercel.app/reference/freeze-frame/index.html.md): A hold on a single frame. - [Gap](https://otio-rust-docs.vercel.app/reference/gap/index.html.md): Time that holds nothing. - [GeneratorReference](https://otio-rust-docs.vercel.app/reference/generator-reference/index.html.md): Media a generator produces, such as colour bars. - [ImageSequenceReference](https://otio-rust-docs.vercel.app/reference/image-sequence-reference/index.html.md): Media held as numbered frames on disk. - [Item](https://otio-rust-docs.vercel.app/reference/item/index.html.md): Anything that occupies time. - [Library](https://otio-rust-docs.vercel.app/reference/library/index.html.md): The library itself: its version, and the defaults it uses. - [LinearTimeWarp](https://otio-rust-docs.vercel.app/reference/linear-time-warp/index.html.md): A constant-rate speed change. - [Marker](https://otio-rust-docs.vercel.app/reference/marker/index.html.md): A note pinned to a span of an item. - [MediaReference](https://otio-rust-docs.vercel.app/reference/media-reference/index.html.md): What a clip draws its pictures from. - [Metadata](https://otio-rust-docs.vercel.app/reference/metadata/index.html.md): The free-form dictionary every named object carries. - [MissingReference](https://otio-rust-docs.vercel.app/reference/missing-reference/index.html.md): Media whose location is not known. - [Node](https://otio-rust-docs.vercel.app/reference/node/index.html.md): What every object in a document can do. - [Ori](https://otio-rust-docs.vercel.app/reference/ori/index.html.md): The ORI project's review annotations, an otio-rust extension and not part of OpenTimelineIO: strokes, text and shapes drawn on a frame, read and written on a timeline. - [Plugins](https://otio-rust-docs.vercel.app/reference/plugins/index.html.md): Media linkers and hook scripts: upstream's two plugin points, registered as functions. - [Rate](https://otio-rust-docs.vercel.app/reference/rate/index.html.md): What the SMPTE timecode rates are, and which of them drop frames. - [RationalTime](https://otio-rust-docs.vercel.app/reference/rational-time/index.html.md): A point in time, or a length of it, as a value over a rate. - [SerializableCollection](https://otio-rust-docs.vercel.app/reference/serializable-collection/index.html.md): A bag of objects, held together for writing to a file. - [Stack](https://otio-rust-docs.vercel.app/reference/stack/index.html.md): A composition that starts all its children together. - [Sync](https://otio-rust-docs.vercel.app/reference/sync/index.html.md): Timeline sync, an otio-rust extension and not part of OpenTimelineIO: sharing a timeline between programs while it is edited. - [TimeEffect](https://otio-rust-docs.vercel.app/reference/time-effect/index.html.md): An effect that alters timing. - [TimeRange](https://otio-rust-docs.vercel.app/reference/time-range/index.html.md): A span of time: where it starts and how long it lasts. - [TimeTransform](https://otio-rust-docs.vercel.app/reference/time-transform/index.html.md): An offset and a scale, applied to a time or a range. - [Timeline](https://otio-rust-docs.vercel.app/reference/timeline/index.html.md): A whole edit: a stack of tracks and where its clock starts. - [Track](https://otio-rust-docs.vercel.app/reference/track/index.html.md): A composition that lays its children end to end. - [Transition](https://otio-rust-docs.vercel.app/reference/transition/index.html.md): A dissolve or a wipe. ## Optional - [Everything](https://otio-rust-docs.vercel.app/llms-full.txt): every docs page with samples in every language, and the whole C ABI reference, in one file - [Source](https://github.com/alchemist-editor/otio-rust): the repository