Gravel
A de-googled, hardened fork of the Pebble companion app for de-googled phones
david-cant-code Connectivity Speech Recognizer Sports & Health
Screenshots
Description
Gravel is a de-Googled, hardened fork of the Pebble mobile app by Core Devices, for Pebble and Core Devices watches on GrapheneOS, LineageOS and other phones without Google Play services or Firebase.
The watch features are here: pairing, notifications and replies, calendar, music, health, weather, watchfaces and apps, firmware updates, and voice dictation. What is gone: Play services, Firebase, telemetry, analytics and crash reporting. The battery analytics page depended on that telemetry and has no data here, and the Pebble Index 01 ring and Index AI features do not work for now.
Hardening:
- Code that watchapps run inside Gravel gets no internet or location access until you grant it, per app, so some watchfaces and apps need a grant before they work fully. On phones where Gravel's UDP filter can't be turned on, such as LineageOS and CalyxOS, watchapps without internet access still run their code by default if Android System WebView is up to date. Their real-time connections (the kind video calls use) then depend on a single layer instead of two. You can turn that code off under Watch App Permissions. With an older WebView, that code does not run
- Classic PebbleKit, which broadcasts watch data to apps on your phone, is off by default; turn it on under Watch App Permissions if a companion app stops receiving watch data
- The speech engine runs in an isolated Android process
- Other exported Android interfaces are authorization-gated or removed, and plain-HTTP traffic is blocked
- Core watch firmware comes from the public PebbleOS releases and is verified before install
- App store searches are sent when you tap search, not while you type, with the search provider's analytics switched off
Dictation runs on the phone with whisper.cpp, built from source; the speech model is an optional, integrity-pinned download. You can also send dictation to your own transcription server over https. Weather locations can also be entered by latitude and longitude.
Gravel contacts the Core Devices and Rebble web services, Algolia when you search the app store, GitHub for firmware, and the model host when you download a speech model, as well as an app store source or transcription server you add yourself and any host a watchapp you grant internet access connects to. Where Gravel's UDP filter can't be turned on and a watchapp without that grant still runs its code (see Hardening above), that code's real-time connections depend on one layer instead of two.
Background location is used so location-based watchapps and weather work while the app is closed.
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 source code.
What’s new (0.3.4)
Fixes steps and heart rate not syncing from watches on PebbleOS 4.39.0 and 4.40.0. Steps and heart rate missed before this update are not able to be recovered.
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