Home

Awesome

<p align="center"> <img alt="Haul" src="https://cloud.githubusercontent.com/assets/1174278/24502391/25619f98-156b-11e7-994c-a8495b4735d5.png" width="512"> </p> <p align="center"> A command line tool for developing React Native apps </p>

Build Status MIT License

PRs Welcome Code of Conduct

Chat tweet


Notice

We're actively working on a Haul successor, which would provide long awaited features like Hot Module Replacement + React Refresh and better feature-parity with Metro. The version 1.0.0 is already released!

If you're investigating using Haul, we highly recommend giving a Re.pack a go.

If you're already using Haul, we recommend migrating to Re.pack for better developer experience and feature set. The migration process is fairly straighforward, since you now have full access to webpack.config.js.


Haul is a drop-in replacement for react-native CLI built on open tools like Webpack. It can act as a development server or bundle your React Native app for production.

@haul-bundler/cli and other packages under @haul-bundler scope are a overhaul of haul package and support only React Native 0.59.0 and above. If you need to support older versions, please check legacy branch.

@haul-bundler/cli and other packages requires Node 10 to be installed. If you're running older version, please upgrade to Node 10 LTS or newer.

Features

Packages

NameVersionDescriptionRequired
@haul-bundler/clicli versionCLI and commands implementation.Yes
@haul-bundler/corecore versionCore logic and functionality.Yes (installed with cli)
@haul-bundler/core-legacycore-legacy versionLegacy logic from haul packageYes (installed with cli)
@haul-bundler/babel-preset-react-nativebabel-preset-react-native versionBabel preset tweaked for RN 0.59+, which can decrease the bundle size by using only the necessary transforms.Yes (installed by init command)
@haul-bundler/basic-bundle-webpack-pluginbasic-bundle-webpack-plugin versionWebpack plugin with tweaks for plain JS bundle.Yes (installed with cli)
@haul-bundler/ram-bundle-webpack-pluginram-bundle-webpack-plugin versionWebpack plugin for RAM bundle support.Yes (installed with cli)
@haul-bundler/preset-0.59preset-0.59 versionPreset with configuration tweaked for RN 0.59.Yes (installed by init command when using RN 0.59)
@haul-bundler/preset-0.60preset-0.60 versionPreset with configuration tweaked for RN 0.60.Yes (installed by init command when using RN 0.60)
@haul-bundler/exploreexplore versionExplore and analyse generated bundleNo (optional)

Getting started

Start by adding Haul as a dependency to your React Native project (use react-native init MyProject to create one if you don't have a project):

yarn add --dev @haul-bundler/cli

# Traditionalist? No problem:
npm install --save-dev @haul-bundler/cli

To configure your project to use haul, run the following:

yarn haul init
# npm >= 5.2.0 :
npx haul init
# npm < 5.2.0 :
npm install -g npx
npx haul init

This will automatically add the configuration needed to make Haul work with your app, e.g. add haul.config.js to your project, which you can customize to add more functionality.

Next, you're ready to start the development server:

yarn haul start
# Or:
npx haul start

Finally, reload your app to update the bundle or run your app just like you normally would:

react-native run-ios
<p align="center"> <img width="635" src="./docs/img/packager_server.gif" /> </p>

Documentation

Check out the docs to learn more about available commands and tips on customizing the webpack configuration.

  1. CLI Commands
  2. Configuration
  3. Recipes
  4. Migration guide
<!-- ### Hot Module Replacement __Hot Module Replacement is an experimental feature and it's disabled by default.__ Please refer to the [Setup guide](./docs/HMR_Setup.md). -->

Limitations

Haul uses a completely different architecture from React Native packager, which means there are some things which don't work quite the same.

The following features are unlikely to be supported in the future:

Made with ❤️ at Callstack

Haul is an open source project and will always remain free to use. If you think it's cool, please star it 🌟. Callstack is a group of React and React Native geeks, contact us at hello@callstack.com if you need any help with these or just want to say hi!

Like the project? ⚛️ Join the team who does amazing stuff for clients and drives React Native Open Source! 🔥

<!-- badges -->