---
title: Instant updates
description: Learn how to set up EAS Update to push critical bug fixes and improvements.
---

import { Terminal } from '~/ui/components/Snippet';
import { BoxLink } from '~/ui/components/BoxLink';
import { LayersTwo02Icon } from '@expo/styleguide-icons';

**EAS Update** allows making small bug fixes and pushing quick improvements in a snap. It is a hosted service that uses the [`expo-updates`](/versions/latest/sdk/updates/) library to serve updates. It allows an end user's app to swap out the non-native parts of their app (for example, JS, styling, and image changes) with a new update that contains bug fixes and other updates. In this guide, you will learn how to set up EAS Update for your app.

## Install `expo-updates`

Start by installing the `expo-updates` library in your project. Run the following command:

<Terminal cmd={['$ npx expo install expo-updates']} />

## Configure the project with `eas update`

You need to configure your project to use EAS Update. Run the following commands in the order they are specified:

<Terminal
  cmd={[
    '# Initialize your project with EAS Update',
    '$ eas update:configure',
    '',
    '# Set up the configuration file for builds',
    '$ eas build:configure',
  ]}
  cmdCopy="expo install expo-updates && eas update:configure && eas build:configure"
/>

After running these commands, the **eas.json** file be modified in the root directory of your project. Inside it, you'll find that a `channel` property is added to the `development`, `preview` and `production` build profiles.

{/* prettier-ignore */}
```json eas.json
{
  "build": {
    "development": {
      "channel": "development"
      /* @hide ... */ /* @end */
    },
    "preview": {
      "channel": "preview"
      /* @hide ... */ /* @end */
    },
    "production": {
      "channel": "production"
      /* @hide ... */ /* @end */
    }
  }
}
```

The `channel` allows you to point updates at builds of that profile. For example, if you set up a GitHub Action to publish changes on merge, it will merge code into the `"production"` Git branch. Then, each commit will trigger a GitHub Action that will publish an update which will be available to build with the channel `"production"`.

## Create a build for the project

You need to [create a build](/develop/development-builds/create-a-build/#create-a-development-build-for-emulatorsimulator) for Android or iOS. We recommend creating a build with the `preview` build profile first. This will allow you to test your update before publishing it to the `production` channel.

Once you have a build running on your device or a simulator, you are ready to iterate on the project. Make any desired changes to your project's JavaScript, styling, or image assets.

## Publish an update

To publish an update to the build, run the following command:

<Terminal
  cmd={[
    '$ eas update --branch [branch] --message [message]',
    '',
    '# Example',
    '$ eas update --branch preview --message "Updating the app"',
  ]}
  cmdCopy={null}
/>

Once the update is built and uploaded to EAS and the command completes, force close and reopen your app up to two times to download and view the update.

## Next step

<BoxLink
  title="How EAS Update works"
  description="A conceptual overview of how EAS Update works."
  Icon={LayersTwo02Icon}
  href="/eas-update/how-eas-update-works/"
/>
