Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ members = [
"livekit-net",
"livekit-runtime",
"livekit-wakeword",
"tools/bindgens",
"libwebrtc",
"soxr-sys",
"yuv-sys",
Expand Down
1 change: 1 addition & 0 deletions livekit-ffi/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ downcast-rs = "1.2"
console-subscriber = { workspace = true, features = ["parking_lot"], optional = true }
bytes = { workspace = true }
from_variants = "1.0.2"
uniffi = { workspace = true, features = ["scaffolding-ffi-buffer-fns"] }

[target.'cfg(target_os = "android")'.dependencies]
jni = "0.21.1"
Expand Down
34 changes: 34 additions & 0 deletions livekit-ffi/src/build_info.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Copyright 2025 LiveKit, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/// Returns the version specified in the crate's Cargo.toml.
///
/// This is the first function exposed over UniFFI from `livekit-ffi`. It carries
/// no server state and touches no handle store, so downstream SDKs can call it to
/// prove the UniFFI bindgen toolchain is wired up end-to-end.
#[uniffi::export]
pub fn build_version() -> String {
env!("CARGO_PKG_VERSION").to_string()
}
Comment on lines +20 to +23

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Release notes entry missing for the version-reporting change

The change adds new functionality to the FFI package without adding the required release-notes file (no new entry alongside the existing ones in /.changeset), so the affected package will not be version-bumped or documented on release.
Impact: The new capability ships without a version bump or changelog entry, so consumers can't tell which release contains it.

Repository rule: every PR must include a changeset listing crates to bump

AGENTS.md ("Documenting changes") states: "Every PR needs a changeset" and "Changeset must list any crates which need to be bumped stemming from the change". This PR adds livekit-ffi/src/build_info.rs (a new public build_version UniFFI export) plus a new tools/bindgens crate, but /.changeset only contains the three pre-existing files (fix-publisher-renegotiation-deadlock.md, fix_nvenc_dynamic_bitrate_updates.md, fix_uniffi_android_package_build.md). A new changeset marking livekit-ffi should be added.

Prompt for agents
AGENTS.md requires every PR to include a knope changeset under /.changeset listing the crates that need bumping. This PR adds a new public UniFFI-exported function (build_version) to livekit-ffi and a new tools/bindgens crate, but no changeset file was added. Create a changeset (e.g. via `knope document-change`) describing the uniffi migration phase 0 change and marking `livekit-ffi` for the appropriate bump level.
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.


#[cfg(test)]
mod tests {
use super::build_version;

#[test]
fn build_version_matches_cargo_pkg_version() {
assert_eq!(build_version(), env!("CARGO_PKG_VERSION"));
assert!(!build_version().is_empty());
}
}
3 changes: 3 additions & 0 deletions livekit-ffi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,13 @@ use thiserror::Error;

mod conversion;

pub mod build_info;
pub mod cabi;
pub mod proto;
pub mod server;

uniffi::setup_scaffolding!();

#[derive(Error, Debug)]
pub enum FfiError {
#[error("the server is not configured")]
Expand Down
15 changes: 15 additions & 0 deletions tools/bindgens/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[package]
name = "bindgens"
version = "0.1.0"
edition.workspace = true
license.workspace = true
repository.workspace = true
description = "Foreign-binding generator CLIs for the LiveKit Rust crates"
publish = false

# Tooling crate: each bin is a code-generation CLI shared across the workspace's
# uniffi-exposing crates (livekit-ffi, livekit-uniffi, ...). It has no library
# target — the bindgens read metadata from an already-compiled cdylib via
# `--library`, so they never depend on the crates they generate for.
[dependencies]
uniffi = { workspace = true, features = ["cli"] }
22 changes: 22 additions & 0 deletions tools/bindgens/src/bin/uniffi-bindgen.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright 2025 LiveKit, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//! The UniFFI bindgen CLI, shared across the workspace.
//!
//! Generate bindings from any compiled uniffi cdylib, e.g.:
//! `cargo run -p bindgens --bin uniffi-bindgen -- generate \
//! --library target/debug/liblivekit_ffi.dylib --language python --out-dir <dir>`
fn main() {
uniffi::uniffi_bindgen_main()
}
Loading