Gravel
A de-googled, hardened fork of the Pebble companion app for de-googled phones
david-cant-code Connectivity Sports & Health
Screenshots
Description
Gravel is a de-googled and hardened fork of the Pebble mobile app by Core Devices, for managing Pebble and Core Devices smartwatches on GrapheneOS, LineageOS, and other phones without google play services or Firebase.
The watch features of the official app are all here: pairing and reconnection, notifications, calendar, music, health, and weather on the watch, watchface and app gallery browsing, firmware updates, and voice dictation. What is gone is the google plumbing and the reporting built around it: no play services, no Firebase, no telemetry, no analytics, no crash reporting. (The one casualty is the official app's battery analytics page, which was rendered by the telemetry server and so has no data source here. The Pebble Index 01 ring and Index AI features do not function for now, because of how heavily they rely on telemetry and Firebase; work on a way to incorporate them is ongoing.)
On top of the de-Googling, Gravel tightens the app's own security posture:
- Per-app permissions for watchapps' companion code: internet and phone location are denied by default and granted per app, and revoking a permission applies to running watchapps immediately
- The app's exported Android interfaces are authorization-gated or removed
- Plain-HTTP (cleartext) traffic is blocked app-wide
- Core watch firmware updates are fetched from the public PebbleOS releases and integrity-verified before install
- On-device voice dictation with the whisper.cpp speech engine, built from source; the speech model is an optional, integrity-pinned download you start yourself
- Manual latitude/longitude entry replaces the play-services place search for weather
- App store searches leave the phone only when you tap search, never while you type, and are sent with Algolia's query analytics and personalization switched off and no user token
Some watchapps and watchfaces need internet or your location to work, and they will not function fully until you grant them access. That is deliberate: Gravel puts the decision in your hands rather than trusting every watchapp by default.
The app talks to the Core Devices and Rebble web services (app store, weather, timeline, notification icons, language packs), to Algolia, which hosts the app store's search index, whenever you search the store, to the PebbleOS release feed on GitHub for firmware, and to the speech model host on first download; there is no google endpoint. An app store source you add yourself is the one host you choose: it is fetched only after you confirm it, with no account token and no search traffic.
Permissions Gravel asks for are the ones the watch features need: Bluetooth and location for finding and staying connected to the watch (background location so location-based watchapps and weather keep working while the app is not open), notification access to forward notifications, contacts, call log, and phone state for caller names and call control on the watch, calendar for timeline pins, Health Connect write access to sync the watch's health data, and the list of installed apps for per-app notification settings. Each is requested when the corresponding feature is first set up.
Gravel is not affiliated with or endorsed by Core Devices. "Pebble" and "Core Devices" are trademarks of their respective owners; Gravel is an independent fork of their GPLv3-licensed source code, under its own name and icon to avoid any confusion with the official app.
What’s new (0.1.6)
Synced with the upstream Pebble app: notification images and album art are sent to the watch when it asks for them, podcasts get seek controls, the weather app shows tomorrow hour by hour, and firmware opened from a file asks before installing. You can add your own app store source; it is fetched only after you confirm it, with no account token and no search traffic. Every one of the synced upstream commits was checked, in the source and in the built app, and none adds telemetry, analytics, cras
Anti-features
Properties of this app that are worth knowing about before installing.
- NonFreeNet
Versions
Permissions
What the app asks the system for. Android only grants sensitive access after you confirm it.
- Internet accessSend and receive data over the internet.
- Foreground serviceKeep running in the background, visible in the status bar.
- FOREGROUND_SERVICE_CONNECTED_DEVICE
- NotificationsShow notifications.
- health.WRITE_STEPS
- health.WRITE_HEART_RATE
- health.WRITE_SLEEP
- health.WRITE_EXERCISE
Show 27 more permissions
- health.WRITE_EXERCISE_ROUTE
- Network stateCheck whether and how the device is connected.
- RUN_USER_INITIATED_JOBS
- BluetoothConnect to Bluetooth devices.
- BLUETOOTH_ADMIN
- Bluetooth connectionConnect to paired Bluetooth devices.
- BLUETOOTH_ADVERTISE
- Bluetooth scanSearch for nearby Bluetooth devices.
- Precise locationDetermine the location via GPS.
- Approximate locationDetermine the location via the network.
- Location in backgroundDetermine the location while the app is not open.
- REQUEST_COMPANION_RUN_IN_BACKGROUND
- REQUEST_COMPANION_USE_DATA_IN_BACKGROUND
- REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND
- REQUEST_COMPANION_PROFILE_WATCH
- REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE
- Installed appsSee which apps are installed.
- Read calendarRead appointments.
- Change calendarCreate and change appointments.
- Phone stateDetect ongoing calls and read device information.
- READ_CALL_LOG
- MANAGE_ONGOING_CALLS
- Read contactsAccess the address book.
- permission.RECEIVE_DATA_FROM_WATCH
- Prevent sleepingKeep the device from going to sleep.
- Run at startupStart automatically after the device is switched on.
- gravel.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
Comments