Builders

    Expo EAS Build Stuck on Compressing Project Files

    An Expo EAS build hanging on the compressing project files step while a large project archive is prepared for upload.

    An Expo EAS build stuck on "Compressing project files" almost always means the archive being prepared for upload is too large, usually because big assets, node_modules, the .git directory, or build artifacts are being included. Before a build runs, the EAS CLI compresses your project files, excluding what is gitignored and what you list in a .easignore file, and then uploads them, so a large project makes this step slow or seemingly stuck. The fix is to reduce what gets included: add a .easignore to exclude large files not needed for the build, confirm node_modules and .git are ignored, and remove unnecessary bulk from the archive.

    Short answer

    The build hangs because the project archive is too large, so shrink what gets compressed and uploaded. Per Expo's build reference, the EAS CLI archives your project, excluding gitignored files, and uploads it to build. Add a .easignore file to exclude large files that are not needed for the build, and make sure node_modules, the .git directory, and build artifacts are ignored, since EAS installs dependencies itself. Large media assets included in the archive are a common cause, so check your project size and exclude what the build does not require. Then retry the build with the smaller archive.

    What "compressing project files" does

    Before an EAS build starts on Expo's servers, the CLI packages your project into an archive and uploads it, and "Compressing project files" is that packaging step. It gathers the files in your project, excluding anything matched by your .gitignore and, if present, your .easignore, then compresses them for transfer. So the size and time of this step depend directly on how much of your project is included.

    Understanding this tells you why it can appear stuck. If the archive is large, compressing and uploading it takes a long time, which looks like a hang even though the process is working. So a build that sits on this step is usually not broken; it is moving a lot of data. The way to speed it up is to reduce how much data there is, by excluding files the build does not need.

    Are your assets too large?

    Large assets are the most common reason this step drags. If your project contains big media files, high-resolution images, videos, audio, design source files, or large test fixtures, and they are included in the archive, they all get compressed and uploaded, which can make the step slow. Not every large file in your repository is needed for the build, and those that are not should be excluded.

    Check your project size to see what is contributing. Look for large directories and files, and decide which are actually required to build the app versus which are documentation, source assets, or artifacts that do not need to ship to the build servers. If large media is the cause, either exclude it from the archive when it is not needed for the build, or reconsider whether it should live in the project at all. Reducing the asset bulk is often the single most effective fix, because it attacks the largest contributor to the archive size directly.

    How to use .easignore

    The .easignore file is the tool for excluding files from the EAS build archive without changing what git tracks. It works like a .gitignore: you create a file named .easignore in your project root and list the files and directories you want excluded from the build upload, one pattern per line. When present, EAS uses it to decide what to leave out of the archive, in addition to your .gitignore.

    Use it for anything large that the build does not need but that you do not want to remove from your repository, such as documentation, design files, screenshots, local test data, or media that is not part of the built app. Because .easignore is specific to the build, you can exclude these from the upload while keeping them in version control. Adding a well-targeted .easignore is usually what turns a slow compressing step into a fast one.

    What to exclude from the build

    A few things should generally be excluded from the archive. node_modules is the biggest, and it should not be uploaded because EAS installs your dependencies on its own servers from your lockfile, so including it just adds enormous, unnecessary bulk. Confirm node_modules is in your .gitignore, which it normally is. The .git directory and build outputs like compiled artifacts and native build folders are also unnecessary for the upload.

    Beyond those, exclude large files that are not part of building the app: documentation, design sources, sample media, and test fixtures. The goal is to send only what EAS needs to build your app, not your entire working directory. Keeping the archive to the essential source and configuration, with everything large and non-essential excluded through .gitignore or .easignore, is what keeps the compressing and upload step fast.

    Other causes

    Not every slow compressing step is purely about size. A slow or unstable network connection lengthens the upload, so if your project is already lean and the step is still slow, your connection may be the limit, and retrying on a faster or more stable network can help. Very large numbers of small files can also add overhead to compression, separate from total size, since each file carries a little bookkeeping cost to package.

    These are worth checking after you have trimmed the archive, since size is the more common cause. If you have added a .easignore, confirmed node_modules and .git are excluded, and the project is genuinely small but the step is still slow, then the network or a transient issue is the more likely explanation, and a retry is the reasonable next step.

    Causes and fixes

    Matching the cause to a fix keeps you from guessing. The table below pairs the common causes with their fixes.

    CauseWhy it is slow or stuckFix
    Large media assetsBig files included in the archiveExclude them with a .easignore
    node_modules includedA huge directory being uploadedEnsure it is gitignored; EAS reinstalls
    .git or build artifactsExtra unnecessary bulkExclude the .git directory and build outputs
    Nothing excludedThe whole project is compressedAdd a .easignore for non-essential files
    Slow networkUpload is bandwidth-limitedRetry on a faster, stable connection

    Read the table against your project. Most cases are simply too much being included, which a .easignore and confirming node_modules and .git are ignored will fix, and only a genuinely lean project pointing to the network.

    Fix checklist

    A short sequence resolves a stuck compressing step. The checklist below covers it.

    CheckActionDone?
    Add a .easignoreExclude large files the build does not need[ ]
    Ignore node_modulesConfirm it is gitignored, not uploaded[ ]
    Exclude .git and buildsKeep the .git directory and artifacts out[ ]
    Check project sizeFind and address large files and directories[ ]
    Retry the buildRe-run EAS build with the smaller archive[ ]

    The step that resolves most cases is adding a .easignore and confirming node_modules and .git are excluded, since those remove the largest sources of bulk. Trim the archive to what the build needs, then retry.

    What to take away

    • The build hangs on compressing because the project archive is too large; the CLI compresses and uploads your files before building.
    • Large media assets are a common cause, so check your project size and exclude what the build does not need.
    • Use a .easignore file to exclude large, non-essential files from the upload without removing them from version control.
    • Confirm node_modules, the .git directory, and build artifacts are excluded, since EAS installs dependencies itself.
    • Build tooling is separate from app security; after the build succeeds, scan it with PTKD.com before you submit.
    • #eas build
    • #expo
    • #easignore
    • #project size
    • #ci/cd

    Frequently asked questions

    Why is my EAS build stuck on compressing project files?
    Because the archive the CLI prepares for upload is too large. Before building, EAS compresses your project files, excluding gitignored and easignored ones, and uploads them, so a large project makes this step slow, which looks like a hang. It is usually not broken but moving a lot of data, so reducing what gets included is the fix.
    How do I use a .easignore file?
    Create a file named .easignore in your project root and list the files and directories to exclude from the build upload, one pattern per line, like a .gitignore. EAS uses it, in addition to your .gitignore, to decide what to leave out of the archive. Use it for large files the build does not need but that you want to keep in version control.
    Are my assets too large for EAS Build?
    Possibly. Big media files, high-resolution images, videos, audio, design source files, or large test fixtures included in the archive all get compressed and uploaded, which slows the step. Check your project size for large directories and files, and exclude those that are not required to build the app, or reconsider whether they should live in the project at all.
    What should I exclude from the EAS build archive?
    node_modules first, since EAS installs your dependencies on its servers from the lockfile, so uploading it adds enormous unnecessary bulk; confirm it is gitignored. Also exclude the .git directory and build outputs like compiled artifacts and native build folders, plus large non-essential files such as documentation, design sources, sample media, and test fixtures.
    What if the project is small but still slow to compress?
    The cause may be your network, since a slow or unstable connection lengthens the upload, so retrying on a faster, stable connection can help. Very large numbers of small files can also add compression overhead separate from total size. Check these after trimming the archive, since too much being included is the more common cause.
    Does the build tooling affect app security?
    No. The compressing step and project size are build tooling, not the security of the app, which is a separate concern. After the build succeeds, a scanner like PTKD.com (https://ptkd.com) checks the artifact for issues such as unjustified permissions, cleartext traffic, and embedded secrets, mapped to OWASP MASVS, which the build process does not address.

    Keep reading

    Scan your app in minutes

    Upload an APK, AAB, or IPA. PTKD returns an OWASP-aligned report with copy-paste fixes.

    Try PTKD free