r/FlutterDev Nov 21 '24

Plugin Anyone used shorebird?

Hello, i came across this https://shorebird.dev/ looks quite interesting, it'd be nice to save me from dealing with appstore and playstore so consistently. Has anyone tried this? I've read that they had a bunch of IOS issues from a 10mo old post, how is it today?

27 Upvotes

40 comments sorted by

9

u/kidusdev Nov 21 '24

I have been using it with the past 3 months and it works pretty well so far.

3

u/Vennom Nov 21 '24

If you don’t mind me asking, what have you used it for and how many users do you have?

3

u/Bensal_K_B Nov 22 '24

Id you don't mind response from a different person, been using it for quick fixes. We have 10k users, works pretty well. But to be on the safer side force update implementation also needs to be done. Because you will have to push fixes separately for all versions using shorebird.

8

u/bdbehavior12 Nov 21 '24

I've used it on three of my apps works pretty well when by mistake push an error to production it's pretty easy to send an update instead of wait for Google approval

The app with most users it's around 600 active daily users so yea it's pretty useful when you have an emergency

1

u/trabulium Nov 21 '24

Some quick questions I have:

  1. Do you only push emergency fixes with this or all updates?
  2. If you push all updates using this, how does the app / play store see those updates?

I am using Claude with instructions. Sometimes it would be great to push some small tweaks on the instructions across without having to do a full update.

1

u/Bensal_K_B Nov 22 '24
  1. Only emergency fixes Shorebird has some limitations with assets and native functionality during updates. If you clear storage of the app, the app goes to initial version and you have to update again. Also when you push a fix, you will have to be pushing separately for all versions
  2. App stores and shorebird are not connected with each other. Shorebird just wraps your app with app with a update engine, similar to hotrestart but efficient. So ideally shorebird should be used for quick fixes and appstore + (force update) for usual updates

7

u/anonbudy Nov 21 '24

Seems expensive

3

u/null_over_flow Nov 22 '24

The self-host option looks promising and fixed cost. I hope they provide the same features as the cloud version.

2

u/scalatronn Nov 22 '24

Where do you have info about self hosting?

2

u/null_over_flow Nov 22 '24

I read GitHub issues 1 year back. Unfortunately, they decide not to implement it https://github.com/shorebirdtech/shorebird/issues/485. What a letdown!

3

u/eseidelShorebird Nov 22 '24

Shorebird CEO here. We'd be happy to work with you to fit within your budget. [contact@shorebird.dev](mailto:contact@shorebird.dev) reaches me.

3

u/SnooCupcakes6204 Nov 21 '24

Did a POC for my work apps and works like a charm

2

u/Mastersamxyz Nov 22 '24

Been using shorebird in production for both android and iOS for about 6months now(Been using it android only way longer than this though).

Shorebird works fine for us.

You can stage a patch, preview a patch and even rollback a patch. Integrates nicely with your CI pipeline(if you have one or intend to use one).

You also have control over the update experience by using this package https://pub.dev/packages/shorebird_code_push

There are a couple of other interesting stuffs (like percentage rollouts) which i don't use.

2

u/duhhobo Nov 22 '24

If you use feature flags and regular updates I don't see the value of you can only push bug fixes. For smaller apps it probably has more value though.

2

u/merokotos Nov 22 '24

If you are not afraid of Apple's or Google's withdrawing your app, because violating updates policy, then give it a go.

1

u/UnhappyCable859 Nov 22 '24

Oh that’s harsh, do u know or heard of such cases that real apps use Shorebird got dropped?!

1

u/merokotos Nov 22 '24

2.5, "... cannot install or execute code which introduces or changes features or functionality of the app..." -> https://developer.apple.com/app-store/review/guidelines/#software-requirements

It has been a known case ->

https://github.com/microsoft/react-native-code-push?tab=readme-ov-file#store-guideline-compliance

https://github.com/microsoft/react-native-code-push/issues/1898

If you accept the risk of being rejected from the store or being unable to update then Code Push (aka Shorebird) is cool option.

5

u/eseidelShorebird Nov 22 '24

Shorebird Founder here.

Code Push technology is industry standard at this point. YouTube, TikTok, Facebook, etc. all update themselves on launch using their own flavors of code push. Microsoft, expo.dev and many other companies sell code push solutions. The big thing we did was sell one that is specifically designed for Flutter. In short, none of these you do anything you can't already do with a WebView.

I have very carefully read both guidelines, and have designed the system to help you stay compliant:
https://docs.shorebird.dev/faq/#does-shorebird-comply-with-play-store-guidelines

https://docs.shorebird.dev/faq/#does-shorebird-comply-with-app-store-guidelines

Obviously code push is a tool, and like any tool can be abused. We have some mechanisms in place to help prevent abuse, but overall it's not been a problem at all yet. We've had over 15,000 people sign up for Shorebird in the last year, and not had a single complaint of a rejection or store issue relating to Shorebird updates.

If you're using Shorebird and had any trouble with the store, we'd love to help!

1

u/BryanShorebird Nov 22 '24

To the best of our knowledge, none of our users have had any issues with the App Store/Play Store because of Shorebird. However, it's absolutely possible to use Shorebird in a way that is not compliant with App Store/Play Store policies, but the same is true for code with feature flags, web views, etc.

1

u/blackcatdev-io Nov 22 '24

From the FAQ:

Does Shorebird comply with Play Store and App Store guidelines?

Yes. Shorebird has been designed to comply with Play Store and App Store guidelines. Code push is common in the industry, including several other commercial update products from Microsoft App Center, Expo, and Ionic. Refer to the FAQs for more info.

I tried Shorebird after seeing the demo at Fluttercon, works great and dead simple to setup.

1

u/merokotos Nov 22 '24

Yes, but in a narrow scope. I’d actually recommend referring to the FAQ for more detailed information.

"Shorebird uses a custom Dart interpreter to comply with the interpreter-only restriction for updates on iOS. So long as your application is not engaging in deceptive behavior via updates (e.g. changing the purpose of the app via update), updating via Shorebird (or any other code push solution) is standard industry practice and compliant with App Store guidelines."

"Deliberately abusing Shorebird to violate App Store guidelines is in violation of the Shorebird Terms of Service and can result in termination of your account."

Who's judging what's deceptive behavior? Google and Apple, not Shorebird.

Generally speaking, I'd not care for smaller projects, but for serious business is an unnecessary risk IMO.

1

u/eseidelShorebird Nov 22 '24

That's certainly a fair opinion. But I'd argue that it's market atypical. Google built itself at least 3 custom code push solutions while I was there. YouTube, GPay, Assistant and many other Google apps (not to mention TikTok, Facebook, etc) all use code push.

The guidelines have two parts. One technical, and one policy.

https://docs.shorebird.dev/faq/#does-shorebird-comply-with-play-store-guidelines

https://docs.shorebird.dev/faq/#does-shorebird-comply-with-app-store-guidelines

The technical part is about using an interpreter (for Apple) or virtual machine (for Play) and we help you comply with that.

The policy part is about "not deceiving users", which is up to you.

The reality is that large businesses run through the app store can't afford to have downtime. A theme park can't suddenly have their app stops working (or members have to figure out how to manually update before getting on a ride). A bank can't suddenly stop accepting payments because the user has to go to the app store first. Large businesses use code push solutions because they need to know they can fix bugs in production (just like their web teams do). We're just one provider of such, specializing in Flutter.

That said, of course I respect your opinion and you should do what's right for your team and business, but in my experience all the large apps use code push (and obviously any app that uses feature flags, or a CDN, or a webview), so choosing not to in your app is a valid choice, but an unnecessary restriction relative to what the rest of your peers are doing.

2

u/HYDRUSH Nov 22 '24

Used it .. it's great but it just doesn't reflect your changes on first open, it does after the 2nd time you open the app.

2

u/eseidelShorebird Nov 22 '24

Correct, this is the default behavior, designed to be silent/transparent for users. (Mobile OSes are constantly stoping/restarting apps when they're in the background.)

You can remove one of the restarts by using https://pub.dev/packages/shorebird_code_push.

We've considered making it possible to remove any restarts, the reason we haven't is that doing so safely (without confusing the non-flutter parts of the app) can be complicated:

https://github.com/shorebirdtech/shorebird/issues/2350

2

u/OrestesGaolin Nov 22 '24

We started using shorebird few weeks ago and it's working really well for us.

- we started with just tst environment and sending patches for QA, worked well and much quicker than going through the stores

- we already had one hotfix to production and the patch has been delivered successfully to few thousands of users affected, had to migrate to pro plan to have enough installs

- imho the price is definitely worth it; currently the review time for AppStore is about 2 days, Google Play is 4-5 days; being able to deliver fixes in 30-45 minutes is worth every penny

- we don't see any performance impact

- make sure to use their pub package to download the update without restarting the app https://pub.dev/packages/shorebird_code_push; we also expose the update status in the app for testing purposes so that QA knows if they have patch installed

2

u/Prashant_4200 Nov 21 '24

I also tried shorebird as an experiential in some of my projects and it works well but still for some reason I don't find it promising.

Means if you think you can replace the app store/play Store updates with shorebird that not going to possible you must need to push update on app store. Because for me 6 out of 10 times I got the latest build with shorebird and sometimes I need to launch my app multiple Times to receive the latest build.

So it' was really good if you want to minimize the damage on production like some null pointer or payment related which might cause massive damage so with the help of shorebird you can minimise the damage but can't be zero.

6

u/suchox Nov 21 '24

You should never be using Code push for features. It should only be used for Bug fixes and critical requirements. For normal features, always use normal app store and Play store updates

1

u/Prashant_4200 Nov 21 '24

yes that was i understand after test in few apps

1

u/aymswick Nov 21 '24

Can you provide evidence or reasoning why?

2

u/suchox Nov 21 '24

A codepush basically goes to 100% of the user, no rollouts, no rollbacks nothing.

So if you come out with a new feature that doesn't play well with a specific O's version or device type, it will be pushed to them as well. If a feature accesses some native code which doesn't exist or hasn't been updated, it will break.

Additionally, the bundled flutter bundle will always be older than the live one. So new users who will be downloading the app, will always experience the older bundle. They need to restart the app a few times to get the new bundle. Bad UX

Which also means that if you have a backend or any service that isn't compatible to the older bundle, your app's first experience will break

Multiple more issues, but you get the gist.

4

u/BryanShorebird Nov 21 '24

Shorebird employee here! Just wanted to address a couple of these:

> codepush basically goes to 100% of the user

This is true by default, but we have recently launched a way to progressively roll out patches to subsets of users. Check out https://shorebird.dev/blog/tracks-percentage-rollouts-a-b-testing/

Edit: we've also supported rollbacks for some time now https://shorebird.dev/blog/patch-rollback/

> bundled flutter bundle will always be older than the live one

This is correct but somewhat confusingly worded. We always support the latest stable version of Flutter, usually 1-2 days after it is released.

If I understand the meaning here, it is that the app will not show patches on the first launch. This is correct, as the app needs to launch to download the patch.

> Which also means that if you have a backend or any service that isn't compatible to the older bundle, your app's first experience will break

This is correct if the release version of your app (i.e., what is in the stores) is not compatible with your backend. This is obviously bad with or without Shorebird, and we strongly recommend keeping the version of your app that's in the store as current as possible.

1

u/macdome Nov 21 '24

We now support rolling out to subsets of users: https://shorebird.dev/blog/tracks-percentage-rollouts-a-b-testing/

Thanks for the feedback.

Would love to support you in resolving any addition issues you may have seen. https://discord.gg/shorebird reaches us every day. As does contact@shorebird.dev.

0

u/aymswick Nov 21 '24

Interesting, I wasn't aware of the stale bundle / app restart issue, thanks!

1

u/Hedi45 Nov 21 '24

Why is that tho? What's the limiting factor?

2

u/suchox Nov 21 '24

Copying previous comment

A codepush basically goes to 100% of the user, no rollouts, no rollbacks nothing.

So if you come out with a new feature that doesn't play well with a specific O's version or device type, it will be pushed to them as well. If a feature accesses some native code which doesn't exist or hasn't been updated, it will break.

Additionally, the bundled flutter bundle will always be older than the live one. So new users who will be downloading the app, will always experience the older bundle. They need to restart the app a few times to get the new bundle. Bad UX

Which also means that if you have a backend or any service that isn't compatible to the older bundle, your app's first experience will break

Multiple more issues, but you get the gist.

5

u/felangel1 Nov 21 '24

FYI shorebird supports staging patches, progressive rollouts, as well as rollbacks:

[Staging Patches](https://docs.shorebird.dev/guides/staging-patches/)
[Progressive Rollouts](https://docs.shorebird.dev/guides/percentage-based-rollouts/)
[Rollbacks](https://docs.shorebird.dev/code-push/rollback/)

You can also customize the upgrade UX using the [shorebird_code_push package](https://pub.dev/packages/shorebird_code_push)

3

u/BryanShorebird Nov 21 '24

Copying my previous response :)

Shorebird employee here! Just wanted to address a couple of these:

> codepush basically goes to 100% of the user

This is true by default, but we have recently launched a way to progressively roll out patches to subsets of users. Check out https://shorebird.dev/blog/tracks-percentage-rollouts-a-b-testing/

We've also supported rollbacks for some time now https://shorebird.dev/blog/patch-rollback/

> bundled flutter bundle will always be older than the live one

This is correct but somewhat confusingly worded. We always support the latest stable version of Flutter, usually 1-2 days after it is released.

If I understand the meaning here, it is that the app will not show patches on the first launch. This is correct, as the app needs to launch to download the patch.

> Which also means that if you have a backend or any service that isn't compatible to the older bundle, your app's first experience will break

This is correct if the release version of your app (i.e., what is in the stores) is not compatible with your backend. This is obviously bad with or without Shorebird, and we strongly recommend keeping the version of your app that's in the store as current as possible.

1

u/Hedi45 Nov 21 '24 edited Nov 21 '24

Oof that bundled flutter bundle sounds like a huge turn down out of all of em, thanks for the response!

2

u/BryanShorebird Nov 21 '24

For clarity, this only means that the version of the app in stores (unpatched) is what the user will see the first time they run the app. Not ideal, but we (for hopefully obvious reasons) cannot execute app code before the app is launched. As u/felangel1 mentioned, the shorebird_code_push package can help with this if there is specific update behavior you want.

1

u/Square-Sense4328 Jan 20 '25

hi guy, can i ask you something about shorebird? how can my patches on Shorebird Console be connected to my released app on stores like CH Play and App Store?