Skip to content

Technical planning and discussion #4

Open

Description

@acostalima

@cpojer I'm reaching out to follow up on a previous discussion about coming up with a custom Fetch API implementation for React Native at https://github.com/react-native-community/fetch with support for streaming (react/react-native#27741). We, MOXY and Protocol Labs, are planning to start this effort shortly and we'd like to know your thoughts on the matter.

In short, what we currently have in mind is as follows:

  • Rewrite whatwg-fetch in modern JS.
  • Remove XHR out of the equation and implement fetch directly on top of RN's JavaScript Network API exactly for the same reasons outlined at Support for server-sent events (EventSource) discussions-and-proposals#99.
  • Assume ReadableStream is available in RN's environment which can be polyfilled with web-streams-polyfill. If ReadableStream is expected to only be used in the context of Fetch, we can probably bundle them together.
  • Have tests in place running in an actual RN app on GitHub's CI.

Even if Facebook has no plans to add support for streaming to Fetch for the time being, app developers can easily swap out whatwg-fetch for @react-native-community/fetch manually. Even better would be React Native to do this automatically via some sort of extension or plugin API.

Are there any guidelines which React Native Community packages should conform to? e.g. linter and linting config, CI process config, etc.

CC @satazor @hugomrdias

Activity

  1. hugomrdias commented on Oct 27, 2020

    @hugomrdias
  2. cpojer commented on Oct 28, 2020

    @cpojer
    Member

    I think this plan sounds good. If your rewrite does not increase bundle size, we can even consider swapping out whatwg-fetch with the new version.

  3. tex0l commented on Oct 30, 2020

    @tex0l

    I'd be very interested in a stable fetch polyfill that handles streams. By the way, I'm currently considering using https://github.com/joltup/rn-fetch-blob#drop-in-fetch-replacement, I'll debrief you of how it works.

  4. changed the title [-]Planning[/-] [+]Technical planning and discussion[/+] on Oct 30, 2020
  5. acostalima commented on Oct 30, 2020

    @acostalima
    CollaboratorAuthor

    @cpojer Could you please give me permissions to maintain the repo? Thanks!

  6. acostalima commented on Oct 30, 2020

    @acostalima
    CollaboratorAuthor

    @tex0l Thanks! I wasn't aware rn-fetch-blob had a drop-in fetch replacement. That project looks interesting although its complexity is much superior than what we're trying to achieve here considering its has a strong native component. In our case, we're still going to be limited to text streaming as RN's networking layer cannot stream binary.

  7. cpojer commented on Nov 1, 2020

    @cpojer
    Member

    @cpojer Could you please give me permissions to maintain the repo? Thanks!

    Done!

  8. pinned this issue on Nov 9, 2020
  9. acostalima commented on Jan 14, 2021

    @acostalima
    CollaboratorAuthor

    @cpojer I'm not being able to publish the package under react-native-community's organization. Can you give me such permission?

  10. acostalima commented on Jan 20, 2021

    @acostalima
    CollaboratorAuthor

    Ping @cpojer.

  11. acostalima commented on Jan 25, 2021

    @acostalima
    CollaboratorAuthor

    @alloy Can you help? 🙏

  12. alloy commented on Jan 25, 2021

    @alloy
    Member

    Paging @Titozzz re moving packages out of the RNC namespace. What's the goal wrt new packages, can they still publish under the org name or should they publish to their own namespace?

  13. Titozzz commented on Jan 25, 2021

    @Titozzz

    Everyone is moving out of the RNC Scope so yeah it should be published under its own name

  14. acostalima commented on Jan 25, 2021

    @acostalima
    CollaboratorAuthor

    @Titozzz got it, thanks! I assume react-native-fetch or similar is the way to go?

  15. acostalima commented on Jan 25, 2021

    @acostalima
    CollaboratorAuthor

    Published as react-native-fetch-api 🎉

  16. RobertWHurst commented on Apr 12, 2023

    @RobertWHurst

    @acostalima Did you manage to the the time to fix the Android issue? As I understand it your solution does not work on android devices currently. Thank you for the hard work you put into making it.

    I feel like the React team should be supporting this. It is rather important and it seems like a lot of libraries have had to work around this often by having to drop to native code which is extremely painful because it means that rather than allowing users to use already published and maintained libraries they need to make special one off ones for React Native.

    Regardless of what is popular for features this seems like a rather important problem to the platform at a fundamental level. It should be worked on so we don't need to duplicate libraries that do a bit more than simple HTTP requests.

  17. acostalima commented on Sep 16, 2025

    @acostalima
    CollaboratorAuthor

    Hi everyone,

    I haven't touched the React Native ecosystem for a few years now and I don't have the bandwidth to maintain this project anymore. Several (critical) issues have been opened in the meantime.

    I've noticed the Expo team has released expo/fetch module which is WHATWG Fetch API-compliant and has streaming support. Therefore, I wonder about the future of this project and whether it make sense to sunset it in favor of the Expo module? Could it make sense to make the sole goal of this project to become, at some point, a drop in replacement for React Native's Fetch API and a thin layer that adds minimal streaming support using React Native's core networking APIs?

    Is it possible to install expo/fetch in a bare React Native app without bringing expo as whole and not increase the JS and native bundle size significantly as a result, etc.? Is it even a thing nowadays, i.e., starting a brand new app without a framework such as Expo? According to React Native's Getting Started docs, I'm not so sure. 🤔

    cc @cpojer @Titozzz
    cc @brentvatne @EvanBacon @lukmccall and other people from the Expo team you think are worth including in this discussion as well.

    Related issues:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions