Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Code Push / Hot Update / out of band updates #14330

Open
eseidelGoogle opened this issue Jan 29, 2018 · 279 comments
Open

Code Push / Hot Update / out of band updates #14330

eseidelGoogle opened this issue Jan 29, 2018 · 279 comments
Labels
a: production Issues experienced in live production apps c: new feature Nothing broken; request for a new capability customer: crowd Affects or could affect many people, though not necessarily a specific customer. dependency: dart Dart team may need to help us engine flutter/engine repository. See also e: labels. P3 Issues that are less important to the Flutter project team-engine Owned by Engine team triaged-engine Triaged by Engine team

Comments

@eseidelGoogle
Copy link
Contributor

eseidelGoogle commented Jan 29, 2018

This is currently not on Flutter's roadmap, for reasons discussed in these comments: #14330 (comment), #14330 (comment)

This comment also gives a brief overview of the various kinds of "hot update" features that you might be thinking about, and gives terminology for referring to them, which can help if you wish to communicate unambiguously about this topic: #14330 (comment)


Often people ask if Flutter supports "code push" or "hot update" or other similar names for pushing out-of-store updates to apps.

Currently we do not offer such a solution out of the box, but the primary blockers are not technological. Flutter supports just in time (JIT) or interpreter based execution on both Android and iOS devices. Currently we remove these libraries during --release builds, however we could easily include them.

The primary blockers to this feature resolve around current quirks of the iOS ecosystem which may require apps to use JavaScript for this kind of over-the-air-updates functionality. Thankfully Dart supports compiling to JavaScript and so one could imagine several ways in which one compile parts of ones application to JavaScript instead of Dart and thus allows replacement of or augmentation with those parts in deployed binaries.

This bug tracks adding some supported solution like this. I'll dupe all the other reports here.

@aam
Copy link
Member

aam commented Jan 29, 2018

cc @floitschG

@neiljaywarner
Copy link

neiljaywarner commented Feb 14, 2018

also see
https://groups.google.com/forum/#!msg/flutter-dev/YwzItp1pxJo/7bFGDLvxBAAJ
I would be extremely excited about this.

I would think this would be fairly important because this is might be one of the only truly distinctive features of react native, and unfortunately some companies might consider this a dealbreaker.

Use cases

  • critical bugs, especially on iOS, especially for VIPs or urgent, time sensitive situations, business critical, and/or users that can't use the app at all for some reason.
  • More dynamic testing of features than staged rollouts
  • this would be a nice touch preparing for Fuschia, and/or Chromebooks. there could be scenarios where flutter is "competing" with web apps not just pwas/Kotlin/Swift/React/Xamarin/other-junkier-hybrid solutions

@yaronlevi
Copy link

In the epic battle that is Flutter vs React Native, code push is one hell of a tool (:
As an RN dev I can't stress enough the importance of this feature. Many will pass Flutter just because the absence of hot pushes. Once you get accustomed to quickly fix bug and push new features you can't go back.

@badoet
Copy link

badoet commented Mar 14, 2018

compiling to javascript path will diminish the dart advantages right?
i found some native app used to be able to have code reload using Rollout.io but it was blocked by Apple: https://news.ycombinator.com/item?id=13817557
looking at this pattern, seems like flutter will not have a seamless code push feature like what we see on react native.
would love to get more insight to this feature possibilities from core maintainers (:

@zoechi
Copy link
Contributor

zoechi commented Mar 14, 2018

compiling to javascript path will diminish the dart advantages right?

What advantages are you talking about?

@ck-vimaljose
Copy link

Codepush is very much needed. Love to see the over-the-air upgrade release possibility on Flutter.

@neiljaywarner
Copy link

we just had a live use case with a production app where we were getting lots of bad reviews for a feature that appeared to be slightly edge case (related to denying location permission in a use case that not every test account had ) but really wasn't.

a codepush feature could push critical fixes for users immediately rather than waiting for them to upgrade; for some reason it seems users are slow to upgrade sometimes :(

@Hixie Hixie added the engine flutter/engine repository. See also e: labels. label Apr 11, 2018
@rockneverdies55
Copy link

No hot code push support is a NO GO :-(

@yisding
Copy link

yisding commented Apr 25, 2018

Looks like JavascriptCore may no longer be required for interpreted code: https://www.theregister.co.uk/2017/06/07/apple_relaxes_developer_rules/?page=2

@thefuzzyorange
Copy link

If the IOS ecosystem is a hindrance, why not implement on Android only for now? Something better than nothing and its a starting point.

@Hixie Hixie added this to the Goals milestone Jun 19, 2018
@ieatbyte
Copy link

ieatbyte commented Jul 3, 2018

Much appreciated for team to implement this feature ASAP.

@eseidelGoogle
Copy link
Contributor Author

We've built some basic prototypes here, but don't have anything really to share at this time. To do this really well will require some work in Dart's compiler toolchain. I would expect it to be many months before we will have much to share here. The team is currently focused on stabilization for 1.0.

All that said, we hear you. :) This is clearly a feature many people value and we're interested in providing functionality like this eventually.

@yaronlevi
Copy link

yaronlevi commented Jul 23, 2018

"Code Push" support for Flutter could be the final nail in the coffin regarding React Native.

With all my love for RN and the RN community, being the game changer it is, it is no match for Flutter.
Flutter just nails it in any aspect (tooling, performance, language...).

After 1.0 hits and the community grows a little bit more + Code Push support = Can't see any reason to start a new mobile project with anything other the Flutter.

@shakil807g
Copy link

any progress on "Code Push" ??

@fmatosqg
Copy link
Contributor

fmatosqg commented Aug 5, 2018

How feasible would be to have a full .so replaced dynamically? The whole compiler toolchain, code shake etc shouldn't be steered to an arguably edge case that people may or may not benefit, given there will always be tickets at the top of the priority list.

I think there should be room for "sideloading" the full .so file, so the build from dart to machine code can still be exactly the same. A small but completely independent component could be assigned the following "minimum viable features": download .so and replace the originally shipped one with it, and restart app with the main launch intent.

Extra responsibilities: download assets, verify signatures and what not. Update flutter/dart/skia engines and what not.

It sounds to me like it violates iOS guidelines, but I'm really not a fan of anything interpreted anyway, or iOS in general. And I'd rather have it in Android than not having it at all, just because it's cool.

At least the download part seems doable now that we have some isolate work being allowed in the background, but it would be interesting to see how to swap the original .so with the downloaded one. Maybe an extra .so or java code could do that part, but it's going to be sitting at the code folder, not sure the app itself can modify it so probably it would need some tweaks so the flutter engine loads all app's .so from internal data?

@vaibhavthapliyal
Copy link

Starting to revamp my companies app using flutter. However our key demand to have a hot update feature since we are still in beta and keep testing out new UIs and features rapidly. Would live to have this feature.

@yaronlevi
Copy link

Any updates?
(I'll bet the feature is already done and will come as a suprise when 1.0 hits)
😁

@fisheye-123
Copy link

up vote

@chufengma
Copy link

There is only one reason to prevent us from using Flutter: Code push

@minhhung2556
Copy link

If you guys can not support Code Push, is there a way to make a Parser to generate from some dictionaries (like json, xml...) to Flutter Widget? Is this impossible or a good idea?

@neiljaywarner
Copy link

neiljaywarner commented Oct 12, 2018 via email

@alibitek
Copy link
Contributor

I think at least the UI/View written in Dart can be downloaded via the network from the server.
For inspiration see how Qt Quick framework is doing it.

QtDD12 - Serving QML applications over the network - Jeremy Laine:

@genghf
Copy link

genghf commented Oct 23, 2018

expect it can be included in the coming 1.0 release!

@JeffreyMcJeffFace
Copy link

Many of our customers will be using our Flutter app on a kiosk device behind strict firewalls that would prevent Google Store's app-update mechanisms. These customers will not whitelist the Play Store. We will ultimately have 100's of hardware devices with the Flutter app, and having a way to push updates to app while adhering to customer firewall restrictions would be amazing!

@dnfield
Copy link
Contributor

dnfield commented Nov 10, 2022

The other significant problem to solve is around sandboxing and security - whatever approach is used would have to make sense from that perspective, regardless of whether the stores would be ok with it.

@Sunbreak
Copy link
Contributor

That looks interesting (For the bytedance one, at least I cannot find any here: https://github.com/bytedance?q=dart&type=source&language=&sort=. Nor "Bytedance dart" give any result in google.)

Sorry guys, it's only available for internal. And they are going to use JS instead in the future

@dev-hann
Copy link

dev-hann commented Jan 18, 2023

anybody know about this? https://codepush.dev/

@minhhung2556
Copy link

anybody know about this? https://codepush.dev/

They maybe discontinue it, there is no update.

@johnwargo
Copy link

johnwargo commented Jan 18, 2023

CodePush is (was?) a Microsoft product, part of Visual Studio App Center (https://appcenter.ms/); I used to be a PM on that team. Microsoft moved the team to GitHub a couple of years ago and App Center wasn't getting a lot of attention there the last time I checked. Here's the landing page: https://microsoft.github.io/code-push/

Doesn't support Flutter, of course, because Flutter can't support OTA updates.

@Flajt
Copy link

Flajt commented Mar 21, 2023

I've stumbled across this: shorebird.dev. They seem to be working on this, apparently, it's currently in closed access. I haven't used it so I don't know how well it works, but maybe it's interesting to keep an eye on them.

Their Github: Link

@gintominto5329
Copy link

Congratulations to @eseidel @felangel, for releasing shorebird for android, and iOS+others, on the roadmap,

I got to know of this, from twitter

@liusilong

This comment was marked as spam.

@josercc
Copy link

josercc commented May 9, 2023

Can the official team add an identifier when packing to enable dynamic JIT or parser functions? For example, to develop macos applications, you need to develop some functions of dynamically running plug-ins, which can be developed by users. So it cannot be written inside the application in advance.

@sorgfal
Copy link

sorgfal commented May 16, 2023

Congratulations to @eseidel @felangel, for releasing shorebird for android, and iOS+others, on the roadmap,

I got to know of this, from twitter

I think congratulations are too early. Implementation on iOS is very doubtful. Android only implementation calls doesn't seem necessary

@jiangfengwhu
Copy link

Is it possible to provide a set of tools to package Flutter widgets into .so files: bundle1.so, bundle2.so, where each .so corresponds to one or multiple page-level widgets, and then load the .so files at runtime to dynamically load the widgets?

@flutter-triage-bot flutter-triage-bot bot added team-engine Owned by Engine team triaged-engine Triaged by Engine team labels Jul 7, 2023
@GerogeLeon
Copy link

This is one of the most critical factors that I consider turning to RN halfway. I can't believe that this issue has passed four years by a team that claims it pursues user experience.

@rutvik110
Copy link

This is one of the most critical factors that I consider turning to RN halfway. I can't believe that this issue has passed four years by a team that claims it pursues user experience.

Have you checked out shorebird.dev ?

It's led by @eseidelGoogle himself and it seems to be ready for production on Android and iOS. I believe they already have existing customers who've published apps with the code-push support.

Could be worth looking into.

@hoooou
Copy link

hoooou commented Aug 23, 2023

i need it

@Imgkl
Copy link

Imgkl commented Aug 30, 2023

@rutvik110 Have you used this? If yes, how's the experience so far?

@SnowLittleStone
Copy link

CodePush is the more important factor than others When Company chooses development framework. In China development efficiency is the first question

@Macacoazul01

This comment was marked as duplicate.

@Hixie

This comment was marked as duplicate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
a: production Issues experienced in live production apps c: new feature Nothing broken; request for a new capability customer: crowd Affects or could affect many people, though not necessarily a specific customer. dependency: dart Dart team may need to help us engine flutter/engine repository. See also e: labels. P3 Issues that are less important to the Flutter project team-engine Owned by Engine team triaged-engine Triaged by Engine team
Projects
None yet
Development

No branches or pull requests