image/svg+xml Rebble · blog

A peek into the future: microPebble on iOS

In my previous blog post about Rebble’s finances this year, I alluded to the idea of Rebble commissioning a port of Matej Drobnič (matejdro)’s microPebble to iOS. I promised I’d write more about that soon – and luckily for you, soon is now! The most important piece of information is, of course, “yes! we’re doing it!”, but I have a fair bit more to say about it, including: why we think microPebble is important; what we’re doing to make microPebble possible on other platforms; and where we want to go with microPebble in the future. I think it’s very exciting, and I hope you will too!

What is microPebble, and why is it important?

For those of you who haven’t heard of it, microPebble is an alternative, open source, Pebble companion app that Matej Drobnič started work on back in September. In Matej’s words, it’s a “small scrappy app […] with the functional UI and features [he] cares about.” microPebble is built on Core’s libpebble3, which in turn, is built on the libpebblecommon that we sponsored the development of many years ago.

Matej started this work before Core Devices open sourced their CoreApp; even though CoreApp is now open source, though, we don’t think that microPebble is irrelevant! CoreApp has a focus on all of Core Devices’s products, not just their PebbleOS family of watches, and it exists to support their ecosystem (and it should!). We think that the Pebble world also deserves to have a vendor-neutral app for all sorts of PebbleOS devices past, present, and future.

We think that the Pebble world should have an app that supports many different players in the Pebble ecosystem with many different goals. For instance, obviously, we shouldn’t expect Core Devices to have to support other manufacturers’ watches in their app! But the Pebble world should definitely have an app that allows other people to make their own watches, after all.

And, of course, we’d love to have an app with first-party-quality support for Rebble Web Services. We’d like to continue to add features, without having to depend on anyone else to implement them – for instance, we recently rebuilt support for shared pins in the Timeline, and, of course, we’d like to continue to extend how Bobby (Rebble’s voice assistant) can be useful.

There are many other things that we’d love to have in an app of our own – things that don’t need to be in scope for CoreApp. We’d like to be able to publish to F-Droid, for instance – and it could be exciting to try to use microPebble’s Kotlin MP base to try to build a Pebble desktop app.

More than anything, we’d like for microPebble to be the start of a community-owned platform that’s designed to last far into the future – and we’ve been thinking about how to make that happen.

Joining forces with Intent

Back in September, the Rebble Board reached out to the team at Intent. We saw the work that was happening on microPebble, but for the time being, Matej only had development access to Android – and since it was his own personal project, of course it made sense that he’d prioritize devices that he had! We explained why we thought it was important to have our own mobile app, and we asked the Intent team to evaluate the state of microPebble, and how it could help us meet our goal.

The Intent team helped us flesh out what we were looking for – we were hoping to come up with a spiritual successor to the original Rebble mobile app, Cobble. They came up with a few avenues to explore:

We decided to work together for a few weeks to have them do some research, and come up with some conclusions on each of these paths. They looked at each of the options, and found that microPebble was most likely to meet our requirements – and then, to our surprise, in the remaining time, the Intent team did not just estimate the effort, but even better than that, they brought microPebble to life on iOS by rewriting the UI with Compose MP!

This was obviously very exciting. I solidly had a big smile on my face when I paired a watch to my daily driver iPhone using microPebble!

What’s next to do?

Of course, this is still just the beginning, and there is a lot of work to do before microPebble-on-iOS becomes the Cobble dream. We’re still working on coming up with a roadmap for what we’d like to prioritize in terms of next features! We expect that we’ll be posting some in the Rebble itself! category on the Rebble Dev Forum. For now, here are a handful of things that we’re thinking about, in the short term and in the long term:

We’d like to continue to work with the Intent team, and from the Rebble side, we’ll continue to fund work on microPebble (by Intent, and by others who are capable!). My thought was that the Intent team can be active participants in the community, as peers to other developers – and that they can use their experience in building modern mobile applications to set us up for success by building scaffolding that the community can develop on top of. For instance, we’d like to have Intent start to build out a visual component library and prepare some best-practice examples for how to implement some of the Cobble UI designs – and then other people in the community who might have less experience (maybe even hardware engineers like me??) can continue to implement more screens on top of the framework that they’ll build for us.

There’s a lot to do, and it’ll be fun to see how it shakes out! But it is very exciting to see the initial progress, and one of the fun parts about this project is that we can do all of the planning and coordination work in the open. I’m looking forward to seeing it come to life!

You can start playing with it today

Originally, I had planned to wait to write this blog post until we got the initial proof of concept merged back into Matej’s upstream. I still need to spend some time sifting through diffs! But the more I became busy with other tasks, the more I realized that you all deserved to see it sooner :-)

So, if you want, you can start playing with microPebble-on-iOS today, and you can build it yourself! The Intent team provided us with a proof-of-concept repo, with iOS build instructions in the README – to get started, just take a look at github/pebble-dev/micropebble-ios-poc. Clone it with submodules, follow the build instructions, and you, too can have your iPhone talking to your watch!

And one of the cool things about doing all our work in the open is that we can show you how the sausage is made. The Intent team put together a great summary report on the work they did for us, and if you’re curious, I’ve uploaded it here so you can read it.

Obviously this is very early stages, and I can’t imagine this is going to remain in this repository in the long term; we’d like to unify it back with the microPebble repository, and probably these changes will get rebased as individual PRs on top of microPebble (and we have work to do, given that there’s been work recently on the non-Compose UI for microPebble!). So don’t count on that particular repo being terribly long-lived.

As always, we’d love to hear your input on what we should do next. Feel free to post about it in the Rebble forum, or come chat with us on Discord!