Introducing: Custom Development Clients

TC Davis
Exposition
Published in
5 min readJul 1, 2021

We’ve spent the past year making it possible to customize the native code in your project to include native modules that aren’t included in the Expo SDK without compromising on the development experience.

Now, when you need to customize your project beyond the standard runtime provided in Expo Go, you can create a custom development client for your application, install it on your phone, and continue developing.

What can I do with my custom development client?

Ready to develop with your custom development client

Custom development clients provide you with the most popular features of Expo Go. You’ll continue developing with expo-cli, and launching your app by scanning a QR code or selecting from a list of recently active projects. If you use expo publish to update the JavaScript and assets of your application, you’ll be able to view published updates inside the client. And since your development client is tailor-made for your project, everything will behave identically to “Release” builds of your app.

Debugging in your custom client

Custom clients have been designed to work with anything in the Expo and React Native ecosystem will help your project succeed, including the performance gains of the Hermes engine.

You’ll also get an upgrade to the React Native debug menu. The new menu makes all of the tools you’re used to just a key press away. You can further customize the menu with any other controls that would help your team move faster.

Can I use a custom development client in my project right now?

If you’re already using EAS to build your app, getting started with custom development clients is as easy as installing the expo-dev-client module in your project, configuring your eas.json and generating a new build. Read the full “Getting Started” guide to learn more.

If you’re not yet using EAS Build, you can try it out free for a month or take advantage of the free plan for EAS (coming later this year)! If you’re comfortable building native projects on your own hardware, you can find everything you’ll need to get going in the “Introduction to Development Clients” documentation.

What does Feature Preview mean?

Preview does NOT mean “beta”

The “beta” label is sometimes applied to projects that are early in development, incomplete, or may not receive long term support. expo-dev-client has already been adopted by teams like Brex, Pretty Little Thing, and Valve in their day to day development, and if you like where we’re headed, it will continue to help you build your project for the lifetime of your project.

[Our custom client] lets our devs just install the latest version and hit the ground running.

- Colby Siebert @ Valve

Preview means we are actively seeking your feedback

The Expo config plugin system, expo-dev-clientmodule, and build system have been designed from the ground up to make it possible to develop any project and to raise the ceiling on what’s possible in a pure-JavaScript environment (although things like App Extensions or targeting WatchOS are currently only possible by taking control of the native portion of your project). We’re happy with the core development experience, but need your help to find and polish the rough edges!

If you’re not able to install and build a custom client in your project, or your custom client crashes or otherwise misbehaves, please submit an issue.

If you have an idea of how we could help you and your team move faster, please let us know, or see if you can scratch your own itch with dev menu extensions.

Preview means we expect to need to make breaking changes

Giving you a smooth workflow requires tight integration between your development client, Expo CLI, and EAS CLI. While we continue to polish the workflow, we expect to release regular updates to both the client code and regular workflows. We recommend you stay on top of new releases of expo-dev-client, expo-cli, and eas-clito get the best experience.

While we are in preview, Expo CLI and EAS CLI may not maintain backwards compatibility, and should be upgraded to the latest version whenever a new version is released.

Upgrade whenever you see this message for the best experience

Builds of your custom client will not be required to be updated nearly as often: CLI tools will maintain compatibility with any release of the expo-dev-client module released in the past 30 days. That means you may need to create and distribute new versions of your client as often as once a month.

To get notified of new releases and receive upgrade instructions, you can sign up for our mailing list.

I’m already using Expo in my project. What changes when I use a custom client?

Whether you’re using the Managed or the Bare workflow right now, custom clients let you (and your team) ship more capable applications faster than you could before. Custom clients, like EAS build, config plugins, and everything in our new generation of tools and services, works independently of each other. To reflect the range of choices you now have when building with Expo, we’ll be moving away from talking about the Managed and Bare workflows in favor of referring to each point of customization when it impacts your configuration or usage of our tools.

If you’re using the Managed workflow

In Expo Go, you have access to the three most recent releases of the Expo SDK. Once you begin to customize your native modules, you’ll no longer be restricted to any version of the SDK. If you add or change the version of any modules in your project that includes native code or make most changes to your app.json, you’ll need to generate a new custom client to be able to run your app.

If you’re using the Bare workflow

With the Bare workflow, you could have full control of your project, but you lost some of the benefits of building with Expo. In some cases you could continue to develop in Expo Go, but often every developer on your team would need to keep up to date with Xcode versions and the native build pipeline. If you create custom clients with EAS Build, local build tooling is only needed by the developer making changes to the native side of your project.

With config plugins, even they can forget about Xcode in all but the most unique requirements.

We hope you’ll create a custom development client today and help us perfect the next evolution of Expo development.

--

--

Published in Exposition

Old articles by the Expo team and community. Visit us at https://expo.dev/blog to stay up to date with Expo news and product announcements. Subscribe to our newsletter at https://expo.dev/mailing-list/signup for more updates.

Responses (2)