Files
shorebird/FAQ.md
T
Eric Seidel 40e2e1f14f Update FAQ.md
Use small headers ### for questions rather than big ones.
2023-03-04 10:38:28 -08:00

4.7 KiB

FAQ

Maintained by @eseidel

If you have questions not answered here, please ask (either by filing an issue or asking on Discord).

What is "code push"?

Code push, also referred to as "over the air updates" (OTA) is a cloud service we are building to enable Flutter developers to deploy updates directly to devices anywhere they have shipped Flutter. We've currently shown demos using Android, but since it's built with Flutter/Dart (and Rust) it will work anywhere Flutter works.

The easiest way to see is to watch the demo video.

Code push is a working title. We'll probably come up with some name to help differentiate it. "Code Push" is a reference to the name of a deploy feature used by the React Native community from Microsoft and Expo, neither of which support Flutter.

What is the status of code push?

As of March 4th, 2023 we've built a demo and have the prototype working on multiple machines and Android phones.

What is the roadmap?

First we're trying to get something working into user's hands. Our current prototype is not ready to support multiple users, but we're working to address that.

Eric intends to send out a survey to the mailing list -- sign-up at shorebird.dev -- and Discord the week of March 6th, 2023 from which we will find users to work with us on a first version.

How does this relate to Firebase Remote Config or Launch Darkly?

Code push allows adding new code / replacing code on the device. Firebase Remote Config and Launch Darkly are both configuration systems. They allow you to change the configuration of your app without having to ship a new version. They are not intended to replace code.

How big of a dependency footprint does this add?

We don't know yet. We expect the code push library to add less than one megabyte to Flutter apps.

How does this relate to Flutter Hot Reload?

Flutter's Hot reload is a development-time-only feature. Code push is for production.

Hot reload is a feature of Flutter that allows you to change code on the device during development. It requires building the Flutter engine with a debug-mode Dart VM which includes a just-in-time (JIT) Dart compiler.

Code push is a feature that allows you to change code on the device in production. We will use a variety of different techniques to make this possible depending on the platform. Current demos execute ahead-of-time compiled Dart code and do not require a JIT Dart compiler.

Does this support Flutter Web?

Code push isn't needed for Flutter web as the web already works this way. When a user opens a web app it downloads the latest version from the server if needed.

If you have a use case for code push with Fluter web, we'd love to know!

Will this work on iOS, Android, Mac, Windows, Linux, etc?

Yes.

So far we've been using Android for our demos, but code push will eventually work everywhere Flutter works. We're focusing on building out the infrastructure needed to provide code push reliably, safely first before targeting any specific platform.

There are different technical restrictions on some platforms (e.g. iOS) relative to Android, but we have several approaches we can use to solve them (Dart is an incredibly flexible language).

How does this relate to the App/Play Store review process or policies?

Developers are bound by their agreements with store providers when they choose to use those stores. Code push is designed to allow developers to update their apps and still comply with store policies on iOS and Android. Similar to the variety of commercial products available to do so with React Native (e.g. Microsoft, Expo).

We will include more instructions and guidelines about how to both use code push and comply with store guidelines as we get closer to a public launch.

Does code push require the internet to work?

Yes. One could imagine running a server to distribute the updates separately from the general internet, but some form of network connectivity is required to transport updates to the devices.

What happens if a user doesn't update for a long time and misses an update?

Our current designs for code push send the current app version & code signature as part of the update request. Thus the update server could be written to respond with either the next incremental version or the latest version depending on your application's needs. The current demo always sends the latest version but this logic would not be hard to add.