Skip to content

Choose a language

All nine packages implement FTMS protocol bytes without owning your Bluetooth connection. Choose the language used by your application; do not choose by tag spelling or assume matching package versions imply identical convenience APIs. Integrate each package through the project-wide consumer adapter seam: native transport conversion, session lifecycle, application policy and control safety remain consumer-owned.

Use the installation directory for latest-selection commands and the verified concrete dependencies required by C, Swift and Kotlin. Repository verification examples remain pinned; they are not a requirement to start new apps on an old version.

Follow your language’s guide for the published dependency, a decoding example, and its actual value/error representation. TypeScript and C also have runnable installed-consumer quickstarts. No equipment connection is required for those examples.

Language Install and start Package guide / API entry point
C Installed-library quickstart C guide; installation options
C# Install and decode API reference
Dart Install and decode Dart guide; Flutter integration
Go Install and decode Go guide
Kotlin/JVM Install and decode Kotlin and Java examples
Python Install and decode Python guide
Rust Install and decode Rust guide
Swift Install and decode Swift guide
TypeScript Installed-package quickstart TypeScript guide
  • Check each guide’s units: raw wire integers are not necessarily display units.
  • Treat missing values, malformed input and unknown fields according to that package’s documented contract, not another language’s return types.
  • A capability report is evidence, not permission to operate equipment.
  • Keep discovery, security, connection lifecycle and control safety in the application.

See current verified releases for exact published versions and prerelease status. The 1.0 milestone is a preparation checklist, not an available package family.

Start with contributing, architecture and the conformance runner contract. Sources, manifests, tests and language-specific tooling remain package-owned; ports consume canonical shared assets rather than other ports or fixture copies. The root pnpm workspace verifies TypeScript and the site, not native packages. SwiftPM’s thin root Package.swift is an ecosystem-required entry point into package-owned Swift sources. See the release process for each port’s independent runbook and gates.