Pairing your pump¶
Before the pump accepts any command, it needs an authenticated Bluetooth connection. You do this once — after that, faBolus reconnects on its own using a securely-stored key, no code needed.
Unpair the official app first
Only one control connection can be active at a time. Remove/close the official Tandem t:connect app's pairing before pairing faBolus, and don't expect them to work at once.
Pair your pump¶
The t:slim X2 uses a secure JPAKE handshake, in one of two forms depending on its firmware: a 6-digit code on v7.7 and later, or an older 16-character code before that. faBolus auto-selects the right handshake from the code you enter, so you never have to choose a "scheme."
Mobi isn't supported yet
This build only pairs a t:slim X2. If faBolus detects a Mobi during pairing, it disconnects and shows "Tandem Mobi isn't supported in this version of faBolus. This build supports the Tandem t:slim X2 only." — support for Mobi is planned for a later release.
t:slim X2 (v7.7+)¶
The t:slim X2 has a screen, so it shows a fresh 6-digit code when you start pairing on the pump.
- On the pump: Options → Device Settings → Bluetooth Settings → Pair Device. The pump screen shows a 6-digit code.
- In faBolus, tap Connect and type those 6 digits.
- Tap Connect. The app scans for the pump, runs the handshake, and derives a signing key.
- When the HUD shows Connected, you're paired. Live data starts filling in.
Older t:slim X2 (pre-v7.7 — 16-character)¶
- On the pump: Options → Device Settings → Bluetooth Settings → Pair Device to show the 16-character code.
- Enter it in faBolus and connect. The app performs the legacy challenge/response handshake.
Success looks like: the top of the app says Connected, and your glucose, insulin, and battery start filling in within a few seconds.
After pairing¶
- The pairing is saved securely in the iOS Keychain, so future connects use Connect (saved pairing) — no code required, even after you rebuild the app.
- If you ever reset the pump or it forgets the app, use Re-pair with new code from the Connect menu to start fresh.
- The signing key authorizes every insulin-affecting command (bolus permission / initiate / cancel). The app tracks the pump's clock so those commands are signed with correct timing.
Nothing connecting?
Make sure the pump is in pairing mode, Bluetooth permission is granted to faBolus, and the official app isn't holding the connection. More in Troubleshooting.
Using faBolus alongside the official t:connect app¶
The pump keeps one paired controller and issues a new code every time you pair — it never stores two, and the code can't be shared between apps (each derives its own key). So faBolus and the official t:connect app can both be installed, but only one is paired/connected at a time, and switching is a full re-pair, not a quick toggle:
- On the pump, Pair Device shows a new code; pair whichever app you want to use.
- That evicts the other app's pairing — to switch back, you re-pair it with another new code.
Day-to-day this is painless if you pick one everyday controller: while faBolus stays paired it reconnects with no code, so the new-code step only appears when you bounce between the two.
faBolus doesn't replace the official app
Some pump settings and configuration can only be changed in t:connect; faBolus doesn't support them yet. When you need one, pair t:connect, make the change, then re-pair faBolus for monitoring and remote bolus.
Under the hood (for the curious)¶
What the handshake actually does
- 6-digit: an EC-JPAKE handshake (secp256r1 / SHA-256, via mbedTLS in TandemKit) —
rounds 1–2 plus derive, then Tandem's session-key / key-confirmation rounds 3–4. The
derived key is
authKey = HKDF(serverNonce, derivedSecret), which signs subsequent commands. - 16-character: the app sends
CentralChallengeRequest, receives the pump's HMAC key, and replies with aPumpChallengeRequestcarryingHMAC-SHA1(pairingCode, hmacKey).