Code Monkey home page Code Monkey logo

react-image-file-resizer's Introduction

React Image File Resizer

All Contributors

Build Status npm version

react-image-file-resizer is a react module that can rescaled local images.

  • You can change image's width, height, format, rotation and quality.
  • It returns resized image's new base64 URI or Blob. The URI can be used as the source of an <Image> component.

Setup

Install the package:

npm i react-image-file-resizer

or

yarn add react-image-file-resizer

Usage

import Resizer from "react-image-file-resizer";

Resizer.imageFileResizer(
  file, // Is the file of the image which will resized.
  maxWidth, // Is the maxWidth of the resized new image.
  maxHeight, // Is the maxHeight of the resized new image.
  compressFormat, // Is the compressFormat of the resized new image.
  quality, // Is the quality of the resized new image.
  rotation, // Is the degree of clockwise rotation to apply to uploaded image.
  responseUriFunc, // Is the callBack function of the resized new image URI.
  outputType, // Is the output type of the resized new image.
  minWidth, // Is the minWidth of the resized new image.
  minHeight // Is the minHeight of the resized new image.
);

Example 1

First, wrap the resizer:

import Resizer from "react-image-file-resizer";

const resizeFile = (file) =>
  new Promise((resolve) => {
    Resizer.imageFileResizer(
      file,
      300,
      300,
      "JPEG",
      100,
      0,
      (uri) => {
        resolve(uri);
      },
      "base64"
    );
  });

And then use it in your async function:

const onChange = async (event) => {
  try {
    const file = event.target.files[0];
    const image = await resizeFile(file);
    console.log(image);
  } catch (err) {
    console.log(err);
  }
};

Example 2

import React, { Component } from "react";
import Resizer from "react-image-file-resizer";

class App extends Component {
  constructor(props) {
    super(props);
    this.fileChangedHandler = this.fileChangedHandler.bind(this);
    this.state = {
      newImage: "",
    };
  }

  fileChangedHandler(event) {
    var fileInput = false;
    if (event.target.files[0]) {
      fileInput = true;
    }
    if (fileInput) {
      try {
        Resizer.imageFileResizer(
          event.target.files[0],
          300,
          300,
          "JPEG",
          100,
          0,
          (uri) => {
            console.log(uri);
            this.setState({ newImage: uri });
          },
          "base64",
          200,
          200
        );
      } catch (err) {
        console.log(err);
      }
    }
  }

  render() {
    return (
      <div className="App">
        <input type="file" onChange={this.fileChangedHandler} />
        <img src={this.state.newImage} alt="" />
      </div>
    );
  }
}

export default App;
Option Description Type Required
file Path of image file object Yes
maxWidth New image max width (ratio is preserved) number Yes
maxHeight New image max height (ratio is preserved) number Yes
compressFormat Can be either JPEG, PNG or WEBP. string Yes
quality A number between 0 and 100. Used for the JPEG compression.(if no compress is needed, just set it to 100) number Yes
rotation Degree of clockwise rotation to apply to the image. Rotation is limited to multiples of 90 degrees.(if no rotation is needed, just set it to 0) (0, 90, 180, 270, 360) number Yes
responseUriFunc Callback function of URI. Returns URI of resized image's base64 format. ex: uri => {console.log(uri)}); function Yes
outputType Can be either base64, blob or file.(Default type is base64) string No
minWidth New image min width (ratio is preserved, defaults to null) number No
minHeight New image min height (ratio is preserved, defaults to null) number No

License

MIT

Contributors

Thanks goes to these wonderful people (emoji key):

Ahmad Maleki
Ahmad Maleki

πŸ’» 🚧
Martin Vyőňovský
Martin Vyőňovský

πŸ’» 🚧
Nadun Chamikara
Nadun Chamikara

πŸ’» 🚧
Shubham Zanwar
Shubham Zanwar

πŸ“–
Onur Γ–nder
Onur Γ–nder

πŸ’» 🚧
Yunus Emre
Yunus Emre

πŸ’» 🚧
Juan
Juan

πŸ’» 🚧
Sreang Rathanak
Sreang Rathanak

πŸ’» 🚧
Andres Rivera
Andres Rivera

πŸ’» 🚧
mmmulani
mmmulani

πŸ’» 🚧
Alex-1701
Alex-1701

🚧

This project follows the all-contributors specification. Contributions of any kind welcome!

react-image-file-resizer's People

Contributors

ahmadmaleki avatar allcontributors[bot] avatar andresriveratoro avatar dependabot[bot] avatar iaizawa0623 avatar martinvysnovsky avatar mmmulani avatar nadunc avatar onderonur avatar onurzorluer avatar overstruck avatar rathanaksreang avatar shubhamzanwar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

react-image-file-resizer's Issues

Force resize

Why not make it possible to force a resize?
For example 500x1900 to like 128x128 for example - just stretch the image?

0.3.4 has bug in typescript index.dts

Describe the bug
vars
minWidth, // is the minWidth of the new image
minHeight, // is the minHeight of the new image
);
are not in the index.d.ts and hence cant build

keep metadata

i can't find any way to keep the metadata while resize my photo.

Resize by percentage

I would like to resize the image by N% without knowing the width and height. If that is not currently possible, it seems very basic and useful.

react version 17.0.2

my react version is ^17.0.2 and this package does not seem to be compatible with this version.

FileReader': parameter 1 is not of type 'Blob'.

I was trying to get the local image and tried to resize it, but getting this error..
Unhandled Rejection (TypeError): Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'.

I have imported the file
import sample from './assets/sample.jpg';
and passed it into this method :


const resizeFile = (file) =>
  new Promise((resolve) => {
    Resizer.imageFileResizer(
      file,
      300,
      300,
      'JPEG',
      100,
      0,
      (uri) => {
        // resolve(uri);
      },
      'base64'
    );
  });

0.3.5 hight is not defined : changeHeightWidth() broken

Another typo -

code breaks when run.

index.js:1 Uncaught ReferenceError: hight is not defined
at Function.value (index.js:1)
at Function.value (index.js:1)
at Image.t.onload (index.js:1)

a(e=Math.round(hight

to repro:

                   Resizer.imageFileResizer (
                        myBlob,
                        3000,   // maxWidth,  // is the maxWidth of the  new image
                        3000,   // maxHeight, // is the maxHeight of the  new image
                        'JPEG', // compressFormat, // is the compressFormat of the  new image
                        100,    // quality, // is the quality of the new image
                        90,      // rotation, // is the degree of clockwise rotation to apply to the image.
                        uri => {
                            //aaa
                            debugger;
                            
                            console.log ( uri );

                            myIContentState.dailyContent.url = uri;
                        },
                        'base64',   // outputType,  // is the output type of the new image
                        3000,        // minWidth, // is the minWidth of the  new image
                        3000,        // minHeight, // is the minHeight of the  new image
                    );
                    
                } )

seems issue in in changeHeightWidth()

Image is getting pixeled after resizing it

Describe the bug
For some reason, after resizing an image using a specific aspect ratio, it getting a bit pixeled, it may happen because of the resizing algo.

To Reproduce
Steps to reproduce the behavior:

  1. Get an image from local machine
  2. Use Resizer function to resize it using the following parameters:
    compressFormat: png, quality: 100, rotation: 0, outputType: file
  3. Image is getting resized as expected but a little pixeled.

Expected behavior
Shouldn't reduce the quality of the image after resizing it.

Screenshots
Image before uploading it:
Screen Shot 2022-10-28 at 1 01 54

After:
Screen Shot 2022-10-28 at 1 02 16

Support for GIF and Animated WebP

Can't resize the gif and animated webp
I am tired of searching for react native modules for resizing gif and animated webp files.

libvip
Sharp for NodeJS is quite smooth and fast for manipulating images. It uses libvips for this.

ImageMagick / libwebp / 'cwebp, dwebp, gif2webp'
There is lib called kmagick for kotlin on android and ImageMagick-Android (java) to manipulate images. I have tried ImageMagick windows cli version and it does the work. It uses libwebp to do the job. If you can build any of those libs specially the libvips of sharpjs it would be great.

Minor issue: maxWidth and maxHeight are flipped

Thanks for this excellent library, using it live here. https://www.nextelection.com/home

I think the param order should be:

Resizer.imageFileResizer(
file, //is the file of the new image that can now be uploaded...
maxHeight, // is the maxHeight of the new image
maxWidth, // is the maxWidth of the new image

I've tested with 800,1000 and got an image which is width = 1000. Then I tested with 1000,800, and correctly got an image which is width = 800.

Why a class?

The source is written to be a class, and then an export is created, which is just a plain function calling a static function inside that class.

The whole source could be a collection of plain functions, and looking at the export, you could export the main resize function as-is. Currently, you're wrapping it in a function with an otherwise identical signature, which is unneccesary overhead.

In short:

  1. No need for it to be a class
  2. No need for a wrapper export function

This will make for a cleaner source, and smaller package size.

I can't get correctly blob file

Blob output is not correct for upload system.

To Reproduce
1-) Upload image file.
2-) I can't get correct blob output.

Expected behavior
Blob output should be like this;

Screenshots
blob output not correct.

Desktop (please complete the following information):

  • OS: Ubuntu
  • Browser : Chrome
  • Version: Version 79.0.3945.130 (Official Build) (64-bit)

imageFileResizer not a function after building with Vite

Describe the bug
Using Vitejs this is the only library that is unable to compile correctly in production. I understand that it is related to the way of compiling the library because if I copy and paste the code in my repository I get the Resizer to compile correctly.
Uncaught (in promise) TypeError: er.imageFileResizer is not a function
It may have related with the construction of the project in CommonJS.

To Reproduce
Steps to reproduce the behavior:
Build project with Vitejs.

Expected behavior
Well, it would be awesome if it would just work. :)

Desktop (please complete the following information):
OS: Ubuntu 20.04
Browser Chrome Edge

This is basically the same problem that this user had in issue #60

TypeScript + API rewrite proposition

Hi @onurzorluer, for starters I would like to thank you for the lovely library πŸ‘

Is your feature request related to a problem? Please describe.
I have two issues that I would like to address and can even create a PR with it πŸ™‚

  1. Currently, imageSizeResizer method has too many parameters, and it's not the best developer experience you can imagine.
  2. Also, any changes in the method API needs to be also manually changed in types definitions.

Describe the solution you'd like

  1. Refactor imageSizeResizer to take one object argument. It would be easier for developers to use it because they wouldn't need to check the order of the arguments that they need to pass. The exported method would look like this:
export default imageFileResizer: ({
    file,
    maxWidth,
    maxHeight,
    compressFormat,
    quality,
    rotation,
    responseUriFunc,
    outputType,
    minWidth,
    minHeight,
  }) {}
  1. Rewrite solution with typescript. Implementation would stay the same, only with added types, which would be automatically generated in build time, so you don't need to worry about changing them only for the exports. Any changes would come naturally because it would be closer to the library logic.

Please let me know what do you think about the solutions and my contribution towards it.

How to preview the inside html tag before sending to the backend?

import React from "react";
import Resizer from "react-image-file-resizer";

const DisplayTest = () => {
const takeFile = React.useRef([]);
const takeBlob = React.useRef([])
const [file, setFile] = React.useState([]);

const upload = e => {
e.preventDefault();
const coll = e.target.files;
if (coll.length < 1) return;
takeFile.current=[];
takeBlob.current =[];
for (let i = 0; i < coll.length; i++) {
Resizer.imageFileResizer(
coll[i],
800,
800,
"JPEG",
100,
0,
uri => {
console.log(uri);
takeBlob.current.push(uri)
},
"blob"
);
takeFile.current.push(coll[i]);
}
setFile(takeBlob.current);
//setFile(takeFile.current)
};
return (






{file.map((file, key) => (

noImage

))}

</div>);

};
export default DisplayTest;

The createObjectURL from the blob files does not display the images in the img tag but the normal uncompressed file shows the images. Please how can I preview the images?
Looking forward to hearing from you soon. Thanks in advance

Base64 returning even when blob type is specified

Describe the bug
Base64 is being returned in memory as well as the blob uri, i'm concerned this may cause a memory leak in my application.
chrome_s0ehbGP3gm

To Reproduce
Steps to reproduce the behavior:

My code:

      const file = e.target.files ? e.target.files[0] : e.dataTransfer.files[0];
      Resizer.imageFileResizer(
        file,
        isLogo ? 512 : 1080, // maxHeight
        isLogo ? 512 : 1920, // maxWidth
        'PNG',
        100,
        0,
        blob => {
          // creates new converted PNG file using blob
          const convertedFile = new File([blob], 'convertedImage.png', {
            type: 'image/png',
            lastModified: Date.now()
          });
          const fileSizeMb = (convertedFile.size / 1024 / 1024).toFixed(4);
          if (fileSizeMb > 10) {
            return setFileError({
              hasError: true,
              error: 'Image size must be less than 10MB.'
            });
          }

          // creates blob reference in memory
          setImgPreview(window.URL.createObjectURL(blob));

          setFile(convertedFile);
        },
        'blob'
      );

Expected behavior
A clear and concise description of what you expected to happen.

Should only return blob when blob type is specified

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: Windows 10
  • Browser Chrome
  • Version 76.0.3809.100

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

I cant resize image to the exact target size

Is your feature request related to a problem? Please describe.
Im not sure
Describe the solution you'd like
a snippet on how to get target size say 1136x574

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Resize algorithm

Is your feature request related to a problem? Please describe.
Support bilinear interpolation algorithm to resize image.

Describe the solution you'd like
What is the current algorithm used for resizing? Bilinear interpolation is the most widely used algorithm for resizing. Can you start supporting it?

`/build` directory is not updated on NPM (v0.1.6)

Describe the bug
Version is updated from 0.1.5 to 0.1.6 and the /src directory is updated on npm to include This PR. But I think the project is not built on npm because the /build directory is not updated.

To Reproduce
Steps to reproduce the behavior:

  1. npm i -S react-image-file-resizer
  2. Compare the /src/index.js and /build/index.js files.

Expected behavior
/build directory should include the latest update which involves the exported function to have 8 arguments.

Screenshots
This is the part in /src/index.js: (Note 8 arguments)
src
This is the corresponding part in /build/index.js: (Note 7 arguments)
build

Desktop:

  • OS: Windows
  • Version 0.1.6

Encode base64 via atob or btoa method

Is your feature request related to a problem? Please describe.
If a base64 encoded image using react-image-file-sizer gets sent a REST API then tried to be saved to Firebase Storage then Firebase will throw as it uses atob to decode. This issue is better described here

Describe the solution you'd like
An optional parameter to the api that specifies the encode method (i.e. atob)

Describe alternatives you've considered
I've tried using alternatives but it would mean using multiple apis as I need file conversion and resizing as well.

Additional context
Please check the stackoverflow link mentioned above.

PNG transparency is lost even when using compressFormat PNG

I'm pretty baffled that this is the case, but indeed it seems to be.

My function looks like

resizeFaviconLogo = (file) => new Promise((resolve) => { Resizer.imageFileResizer( file, 256, 256, 'PNG', 100, 0, (uri) => { resolve(uri); }, 'file' ); });

And the output PNG has a white background instead of transparency.

Does this work at all?

I tried it with all default and it doesn't seem to have changed anything. What did I miss?

Here is my code:

    let { width=300, height=300, compressFormat="JPEG", quality=50, rotation=0, outputType='base64' } = {}
    Resizer.imageFileResizer(file, width, height, compressFormat, quality, rotation, result => {
		console.log(result)
    }, outputType)

UI freezes / fails when using minWidth and minHeight properties

Describe the bug
I have a loading indicator that fires when image is being resized. Works fine unless I add minWidth or minHeight properties in which case front end stops rendering. On Safari it failed to render the resulting image entirely.

To Reproduce
Steps to reproduce the behavior:

  1. add minHeight and minWidth.
  2. Set loading indicator while resizing.
  3. Resize file that is smaller than minWidth.

Expected behavior
Expect to function same as without minWidth and minHeight.

Screenshots

Desktop (please complete the following information):

  • OS: macOS Catalina 10.15.4
  • Browser Chrome / Safari

Smartphone (please complete the following information):

Quality not affecting PNG format

When setting the compressed format to PNG no matter what quality value you are writing it's just not changing the URI compressed file size result.
Have anyone faced that issue?

const resizeFile = (file) =>
  new Promise((resolve) => {
    Resizer.imageFileResizer(
      file,
      300,
      300,
      "PNG",
      1,
      0,
      (uri) => {
        resolve(uri);
      },
      "file"
    );
  });

No response (success nor error) with HEIC format.

Hello, I am running into problems with compressing a .heic image. It seems that all other image formats work perfectly, but when I use a .heic image, I do not get a response - neither a success or error in my catch.

I guess my question is, I don't seem to find anywhere how to specifically reject the returned promise from the 'resizeFile' method from the Resizer.imageFileResizer() method, how can I do that? Does this package even support heic (I cant find anything online about .heic files relating to this package at all -- curious).

This is my resizeFile method:

const resizeFile = (file: File) => {
return new Promise((resolve) => {
Resizer.imageFileResizer(
file,
1080,
1080,
'JPEG',
80,
0,
(uri) => {
resolve(uri);
},
'base64',
);
});
};

And this is my try catch which I am calling it from:

files.forEach(async (file, i) => {
try {
const image = await resizeFile(file);
const newFile = dataURIToBlob(image);
formData.append(file.name, newFile);
} catch (err) {
console.log(err);
}
});

Expected behavior
I expect a response, either an error or success from passing any type of image.

Desktop (please complete the following information):

  • OS: [e.g. iOS]: Catalina 10.15.5
  • Browser [e.g. chrome, safari]: Chrome
  • Version [e.g. 22]: 91.0.4472.114

Data Uri to blob

Hi, i think react-image-file-resizer need to data uri to blob. We can use this to upload image files and so it will be easier.

add support for array or similar for outputType

Hello,

currently following outputType type is => File, base64 & blob, can you add the output type for an array or something similar to when we upload Image/Files using input (input type='file') the reason being for this is that if we resize the image and we take the output type as an File, then it's quite difficult to rename the file name, and uploading to AWS S3 or similar places.

Multiple problems with quality param

The quality parameter seems to have no predictable pattern to its behavior.

Looking at the description, one is led to believe that setting to 100 will bypass compression, and no compression will be applied for PNG images. To test this, I tried various experiments with the following settings:

A. maxWidth = 800
B. maxHeight = 1000
C. quality = 90, and compressFormat is same as source image

  1. png image of 512x512, size 9.6 KB => results in 18.6 KB, with no resize. Why did the file size double?
  2. jpeg image of 582x864, size 62KB => results in 94.5KB, with no resize. Why did the file size increase?

A. maxWidth = 800
B. maxHeight = 1000
C. quality = 100, and compressFormat is same as source image

  1. png image of 800x800, size 67 KB => results in 170 KB, with no resize. Why did the file size double?
  2. jpeg image of 862x282, size 31KB => results in 73 KB, with resize to 800px. Why did the file size more than double?

Name of new file has old extension

When I try to upload jpg file and to change the extension to png, file name in uri callback still has old name: filename.jpg instead of filename.png.

Lib version: ^0.4.2

imageFileResizer is not a function after build

Describe the bug
Works fine in development. I just built the project and am getting "imageFileResizer is not a function". Built with Vite, if that makes any difference.

To Reproduce
Steps to reproduce the behavior:
Build project with Vitejs.

Expected behavior
Well, it would be awesome if it would just work. :)

Desktop (please complete the following information):

  • OS: Windows 10
  • Browser Edge
  • Version of what? Edge? Whatever is newest, always up to date.

File extensions concatenated

Describe the bug
Resizing a bmp image called xxx.bmp and choosing JPEG as output yields a jpg image named xxx.bmpJPEG

It seems like the input and output file extensions are concatenated, whilst the name should only be xxx.JPEG .

Blank black images returned

This package is having a similar error as browser-image-compression in that blank black images are returned.

Can reproduce on iPhone 6S running Safari. Attach and compress 20 high-res images at a time (as part of my project's "create post" flow). Some come out as blank black boxes.

See Donaldcwl/browser-image-compression#84

Typescript implementation??

Is your feature request related to a problem? Please describe.
I want to use it with typescript react.

Describe the solution you'd like
type definition @types/react-image-file-resizer

Describe alternatives you've considered
I just want to create 150 x 150 thumbnail. I will have to do that on server.

Target file size

Hello, may I make a feature request - take a target file size as a prop, and allow fixing 1 or more levers to achieve roughly that file size.

I.e. file size is a result of 2 levers - resolution and compression in case of JPG. So we could set resolution as fixed, while the compression can be auto varied to hit (around) target file size. Or vice versa - i.e. compression is fixed, while the resolution can be auto changed. Or both can be varied, etc etc.

A small iterative algo could loop through some trials and provide the best fit within say 5 trials or some such. Obviously this can be implemented outside this component, and just iteratively call the component with different params till the size is achieved, but why not bake this inside your component?

I would imagine this is a rather standard usecase for uploading images, and a robust solution would be quite beneficial.

why is the rotation is not "set"

i used a very simple resize:

const resizedFile = await new Promise<File>(( resolve ) => {
    resizer.imageFileResizer(
      file,
      maxWidth,
      maxHeight,
      'jpeg',
      100,
      0,
      ( file ) => resolve( file as File ),
      'file'
    );
  });

and here u can see I'm setting the rotation to 0, but what if I'm actually meaning is to "SET", like override, not adding, like how it is done currently.
according to docs if I'm setting 0 nothing is happening, i get that, but what if i want to "SET" 0, by doing that basically I'm "correcting rotation", is that possible to do?

How to get result base64 string?

I find example of this

let filesToStore = []
  Resizer.imageFileResizer(
                  file,
                  331,
                  700,
                  'JPEG',
                  100,
                  0,
                  blob => {
                    filesToStore.push(blob)
                  },
                  'base64'
              )

And if I make console.log(filesToStore) it works.
But I thinks there a some promise or what, because I cant get result when page loaded. Only after few seconds.

So, how can I get result string?
Example:

let filesToStore = 'string'
  Resizer.imageFileResizer(
                  file,
                  331,
                  700,
                  'JPEG',
                  100,
                  0,
                  blob => {
                    filesToStore = blob
                  },
                  'base64'
              )
console.log(filesToStore)

filesToStore returns 'string', not blob result.

Indeterminate result

Describe the bug
When passing a file that isn't an image, AND doesn't have a type, the function never produces a usable result. The responseUriFunc is never called, and an error is never thrown.

To Reproduce
Steps to reproduce the behavior:

  1. Either:
    1. Select a file that your OS or your browser doesn't recognize. For me it's a 7z file, for you it might be something else.
    2. Pass it a bogus file: new File([ /* presumably any data will do */ ], 'foo', { type: '' })
  2. Observe the responseUriFunc and any thrown errors by wrapping the Resizer.imageFileResizer in a try-catch.

Expected behavior
Either of these options:

  • The function returns a promise, like it probably should anyway, that is rejected.
  • The function throws an error.
  • The responseUriFunc callback is called with an empty/undefined parameter. Not recommended, but it might be the last option if the above two can't work.

I noticed in the source code that if the filetype is empty, you just carry on trying to resize the image, which isn't an image. Filetype could never be empty in practice. Any file that is resizable, must also be recognized by the browser, and therefor must also have a valid filetype. Letting empty filetypes through seems like a bad idea.

Desktop (please complete the following information):

  • OS: Windows 10
  • Browser: Firefox
  • Version 95

Expo?

Does this work with the Expo managed workflow?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.