# Upload a ZIP instead of a repository

**Upload a ZIP** builds a Web Agent from an archive of your source code. Use it when you cannot give Faustine access to the repository. An upload is a snapshot: it has no branch to follow, so the agent does not update on its own.

## Before you begin

- You are on the **Connect your code** step of [the wizard](https://docs.faustine.ai/web-agents/create-a-web-agent/).
- You have a `.zip` of the source. Leave out `node_modules`, `.git` and build output.

## Upload the archive

To upload your code:

1. Select **Upload a ZIP**.
2. Drop the `.zip` on the upload area, or select the area and choose the file. The portal reads the archive's file list before it uploads, and stops with the reason if the archive cannot be used.
3. In **Folder to analyze**, select the app's folder if the archive holds more than one project. Leave **/ (the whole archive)** otherwise.
4. Turn on **Keep the code after the analysis** if you want to re-analyze or use the Advanced editor later without uploading again. It is off to begin with.
5. Select **Continue**.

The step closes and shows the file name and whether the code is kept. The next step, **Keep the assistant up to date**, shows **Manual updates only**.

If every file in the archive sits under one top-level folder, Faustine removes that level and treats the folder's content as the root.

## Keep or delete the code

| **Keep the code after the analysis** | What happens to the archive | What you can do afterwards |
| --- | --- | --- |
| Off | Faustine deletes it when the analysis finishes. | Use the agent. To re-analyze or open the Advanced editor, upload the code again. |
| On | Faustine stores it, encrypted at rest. | Re-analyze, open the Advanced editor, and upload a new version. |

To delete stored code later, open the agent's **Overview** tab and select **Delete uploaded code** on the repository card. To bring it back, select **Upload again** on the same card.

## Limits

| Limit | Value |
| --- | --- |
| Archive size | 500 MB |
| Size after extraction | 2 GB |
| Entries in the archive | 200,000 |
| Size of one file | 100 MB |
| `node_modules` inside the archive | 50 MB. Above that the archive is rejected. |

Faustine skips these folders when it extracts the archive: `node_modules`, `.git`, `dist`, `build`, `out`, `vendor`, `.venv`, `venv`, `__pycache__`, `.next`, `.nuxt`, `.turbo`, `.cache`, `coverage`, `.gradle`, `target`, `Pods` and `DerivedData`.

## Troubleshooting

The portal shows the file name followed by **can't be used as is** and one line for each problem.

| Symptom | Cause | Fix |
| --- | --- | --- |
| `The archive carries … of node_modules` | The ZIP includes installed dependencies. | Zip the source without `node_modules`. |
| `The archive is … MB` followed by the limit | The ZIP is larger than 500 MB. | Remove build output and binary assets, or zip the app's folder only. |
| `Encrypted entry: …` | The ZIP is password-protected. | Create it again without a password. |
| `Unsupported compression on …` | The ZIP uses a compression method other than Deflate or Store. | Create it again with your system's standard ZIP tool. |
| `The archive has no files to analyze` | Everything in the ZIP is in a skipped folder, or the ZIP is empty. | Zip the folder that holds the source. |
| `Storing this archive … would exceed your stored-code limit` | Your workspace's stored code is at its limit. The message gives the limit and how much is in use. | Delete uploaded code you no longer need from other agents. |

## Next steps

- [Keep the agent up to date](https://docs.faustine.ai/web-agents/keep-up-to-date/): upload a new version when the code changes.
- [The analysis](https://docs.faustine.ai/web-agents/analysis/): what happens after the upload.
- [Connect your code](https://docs.faustine.ai/web-agents/connect-your-code/): use a repository so that the agent follows your pushes.
