Need advice about which tool to choose?Ask the StackShare community!
Expo vs NativeScript: What are the differences?
Introduction
Expo and NativeScript are two popular frameworks for building mobile applications. While both frameworks are used to develop cross-platform apps, there are key differences that set them apart in terms of development workflow, performance, and capabilities.
Code Execution: Expo allows developers to build mobile applications using JavaScript and CSS, with a focus on simplicity and ease of use. On the other hand, NativeScript enables developers to write native code using JavaScript, TypeScript, or Angular, providing more control and flexibility over the application's behavior and performance.
Platform Support: Expo is primarily designed for building mobile apps that target iOS and Android platforms, with limited support for web applications. In contrast, NativeScript supports not only iOS and Android but also additional platforms like Windows, macOS, and Linux, providing a wider range of deployment options.
UI Components: Expo offers a set of pre-built UI components that are easy to use and customize, allowing developers to quickly create user interfaces. NativeScript, on the other hand, provides access to the native UI components of each platform, resulting in more visually consistent and integrated app experiences.
Third-party Libraries: Expo offers a curated selection of pre-built JavaScript libraries and integrations, making it easy to include popular functionalities such as maps, push notifications, and authentication. NativeScript, on the other hand, allows developers to directly access and utilize the vast ecosystem of npm packages, enabling more flexibility and customization options.
Development Workflow: Expo provides a seamless development workflow where applications can be easily tested and previewed using the Expo Client app on a physical device or a simulator. In contrast, NativeScript requires a build step to compile the code and deploy the app for testing and previewing, which may introduce additional complexity and time.
Access to Native APIs: Expo abstracts the access to native APIs, providing a set of unified APIs that work across platforms. This approach simplifies the development process but may limit access to certain device-specific features and functionalities. NativeScript, on the other hand, allows direct access to the native APIs of each platform, offering more fine-grained control and the ability to leverage advanced capabilities.
In summary, Expo and NativeScript differ in terms of code execution, platform support, UI components, third-party libraries, development workflow, and access to native APIs, providing developers with various options to choose from based on their specific project requirements.
Hello guys, I am new here. So, if I posted without specific guidelines, please ignore.
Basically, I am an iOS developer and developing native apps for the last three years. Recently, I started learning React Native to develop apps for both platforms. If anyone out there knows any useful resources that will become a better react native developer.
#newbie
Well, the first resource I would recommend you is my upcoming book by Packt Publishing, "Professional React Native", but it's due late January next year :) . Now jokes aside (the book's real by the way :) ), the easiest way to build a iOS/Android/Web app with React Native is to do: npm install -g expo-cli expo init some-project cd some-project expo eject
You might have heard of Expo, but trust me, stay away from it. Expo highest value is that it's an already pre-configured 3 platforms environment, but if you don't eject then you're vendor-locked to what Expo has to offer in iOS and Android, which is very poor compared to going full React Native on these platforms, they can't even handle Google Sign In properly and by the way, even if your app is 10 lines of code your app size will be over 40 MB if you don't eject, yep it's that bad, plus the performance is regular and the loading times slow, not to mention that you're stuck with their build service which the free tier makes you wait for hours for a free build slot. It's important to note that when ejecting you don't lose the Web, you simply do expo start --web to start your dev environment and expo build:web to build a static website that you can serve with any web server. Regarding state management, don't bother with "lifting state up" philosophies mixed with Context API to manage your state, lifting state is a great pattern and helps your codebase, Context is great to avoid prop-drilling, but NEVER mix them to achieve app-wide state management, for that, simply go for Redux or MobX, the hype is all about Redux, but I consider MobX far better in many aspects. However, as you're getting new into this I would recommend you start with Redux AND PLEASE grab yourself npm install @manaflair/redux-batch so that you can batch updates and don't bring your app to a crawl. Forget that "connect HOC" thing with React-Redux, don't bother for a second with it, go with Hooks and useSelector and useDispatch and the likes, it will make your code SO much cleaner and smaller. Adopt clean and new Hooks philosophy, avoid writing class components as much as possible and write function components augmented with Hooks.
Our stack roughly divides into three major components, the front-end, back-end and the data storage.
For the front-end, we have decided to go with React Native via Expo. This allows us to target both Android and iOS with a single codebase. Expo provides "managed workflows" and an SDK that will simplify development and deployment.
For the back-end, we have decided to use Python. Python is the language of choice for machine learning (ML). It has extensive support for traditional ML algorithms (e.g. random forests) via Scikit-Learn and the SciPy ecosystem. On top of this, our industry partner has provided us their current solution written in Python. We decided to expose the back-end as a REST API using FastAPI. This allows us to nicely separate concerns from the rest of the codebase. FastAPIs use of static type hints, validation with Pydantic, and automated documentation allows us to build better APIs faster.
For data storage we decided to use a MongoDB Atlas, a NoSQL database. We decided to use a NoSQL database because we need to store large amounts of data (e.g data from the wearable IMUs). Moreover, due to the ever changing nature of a startup we require flexibility. NoSQL databases are schema-free which enables us to modify our schema as we see fit.
We plan on using GitHub Actions (GA) to orchestrate our CI/CD. Given GAs broad support of languages and workflows, it's hard to go wrong with this decision. We will also be using GitHub for version control and project management, so having everything in one place is convenient.
The major components of our CI/CD for the backend will consist of black for autoformatting, flake8 for linting, pytest for unit-testing, and mypy for static type checking and codecov for coverage reporting. We plan to use separate Docker containers to package the back-end and front-end components and use Docker Compose to launch the app. This allows us to better separate concerns, manage dependencies, and ensure our app is deployable anywhere.
Pros of Expo
- Free15
- Hot Reload13
- Easy to learn9
- Common ios and android app setup9
- Open Source6
- Streamlined6
- Builds into a React Native app5
- PWA supported2
- Plugins for web use with Next.js1
Pros of NativeScript
- Access to the entire native api75
- Support for native ios and android libraries47
- Support for javascript libraries46
- Angular 2.0 support46
- Native ux and performance44
- Typescript support37
- Backed up by google and telerik35
- Css support29
- Cross-platform declarative ui and code27
- Fully open source under apache 2.0 license25
- Vuejs support11
- 60fps performance9
- Powerful data visualization with native UI6
- VS Code integration5
- Angular, typescript and javascript support5
- No need for Mac to build iOS apps in Telerik Platform5
- Extended CLI support4
- Cloud builds as part of Telerik PLatform4
- Truly Object-Oriented with Typescript4
- On-device debugging4
- Extensibility4
- Access to entire native api3
- Live reload3
- Easiest of all other frameworks3
- Easy to learn3
- Backed by google3
- 0 day support for new OS updates3
- Publishing modules to NPM3
- Vue.js support out of the box2
- VueJS support2
- Svelte support2
- Powerfull mobile services as part of Telerik Platform2
- Native ui with angular2
- Vue support2
- Playground1
- Hot Reload1
- HMR via webpack1
- Very small app size1
- Write once, use anywhere1
- Easy to use, support for almost all npm packages1
- Rich ecosystem1
- Compile to Apple/Google Stores via CloudCompiler1
- Has CSS ;-)1
- It works with Angular1
- Code reuse with your website1
- Dart0
Sign up to add or upvote prosMake informed product decisions
Cons of Expo
Cons of NativeScript
- Lack of promotion5
- Slower Performance compared to competitors1