Add Steam Controller support to an iPad game built in SwiftUI or SpriteKit.
Use the trackpads and gyro as a custom input device for a creative tvOS app.
Drive rumble and haptic tone patterns from a music or rhythm app.
Build a controller diagnostic tool that mirrors live inputs on screen.
Requires 2026 iOS/iPadOS/tvOS, a physical device since the Simulator has no Bluetooth, and Info.plist Bluetooth permission declared.
SteamControllerKit is a Swift package that lets iPhone, iPad, and Apple TV apps talk to a Steam Controller (the gamepad Valve sells alongside its gaming platform) over Bluetooth Low Energy. Once it is wired into an app, the controller behaves like a normal gamepad: both thumbsticks, both touch trackpads with pressure readings, the analog triggers, all 30 buttons and touch-sensitive surfaces, and the motion sensors all become readable values. The package can also drive the rumble motors and play tone patterns through the controller's haptic system. For developers, the input arrives as a single Swift value called SteamControllerState, with the thumbsticks, trackpads, triggers normalised to a 0 to 1 range, named buttons, and accelerometer plus gyroscope data. The library handles discovery and connection on its own. It is written in pure Swift with no third-party dependencies, and builds for iOS, iPadOS, and tvOS. The README notes that it requires the 2026 versions of those operating systems, a real device because the Simulator has no Bluetooth, and an app that declares Bluetooth permission in its Info.plist. Installation is done through Xcode's Swift Package Manager. The README shows a short example: create a SteamControllerBLE object, set a delegate to receive callbacks, and call start(). Connection state changes and input updates both come back to the delegate on the main thread. There are also a few haptic calls shown, including rumble at a configurable strength, a low-frequency oscillator tone, and a logarithmic frequency sweep. The repository includes an example app called SteamControllerTester, a SwiftUI project for all three platforms that connects to a controller and displays every input live, with buttons to try the haptics. The example project file is generated with a tool called XcodeGen, so contributors run xcodegen generate before opening it in Xcode. The README explains how the protocol was figured out. The Bluetooth LE input and haptic packet formats came from SDL, an open-source library that already supports the Steam Controller, and inspecting the official Steam Link app confirmed it uses SDL too. The button mapping and haptic calibration for the newer 2026 controller were worked out by recording and analysing live Bluetooth traffic. The project is independent of Valve, the trademarks belong to Valve, and the code is released under the MIT license.
Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.