# Upload Source

> Dropping files, folders and archives onto the dashboard for documentation that has no other home, and the limits that apply to it.

- Updated: 2026-09-21
- Source: https://contextator.com/en/docs/upload-source/
- Language: en-US
- Author: Muhammet Şafak

---
Documentation that is not on the server and not in a repository: drop it onto the dashboard. Files,
whole folders with their structure, and archives are unpacked and stored server-side.

This is the right source for a zip someone emailed you, an export from another tool, or a folder on
your laptop that has no other home.

## Adding one

**Add source → Upload files**

| Field | Notes |
|-------|-------|
| **Name** | The mount prefix. Immutable |
| **Content type** | `Plain Markdown / text`, `Notion export` for a Notion *Export → Markdown & CSV* zip, or `OpenAPI / Swagger` for uploaded specifications |
| **File types** | `.md` and `.mdx` by default; `.txt`, `.html`/`.htm`, `.csv`, `.docx` and `.pdf` can be selected too — anything else in the upload is dropped |

Then drop files onto the dropzone, or use **Choose folder** / **Choose files**. Folders keep their
structure. Progress is shown per file, and large folders are split across several requests
automatically.

Finally choose how the upload is applied:

| Mode | Effect |
|------|--------|
| **Add to existing files** | Merges into what the source already holds; same-path files are overwritten |
| **Replace all files** | The source's contents become exactly what you uploaded |

Saving commits the upload and queues an index run.

## Archives

`.zip`, `.tar`, `.tar.gz` / `.tgz` and `.rar` are unpacked on the server. Extraction is deliberately
strict:

- entries that would escape the destination are rejected;
- dot-directories (`.git/`, `.obsidian/`, …) are dropped;
- names that are not portable across platforms are rejected;
- files whose extension the source does not index are skipped;
- the entry count and total size are capped (`ARCHIVE_MAX_ENTRIES`, `ARCHIVE_MAX_TOTAL_BYTES`);
- archives inside the archive are unpacked one level deep — which is what a Notion export needs, since
  it ships `Part-1.zip` inside the zip.

Anything skipped is reported back to you rather than silently dropped, so you can see exactly what was
and was not taken.

## Managing the files

**Files** on an upload source row lists what the source currently holds. Individual files can be deleted
from there, which re-indexes the project.

The files live under `DATA_DIR` inside the container (`/data` by default), in a directory belonging to
that source. They are deleted with the source and with the project — see
[Backup and Data](/en/docs/backup-and-data/) for how to back them up.

> An upload source is the **only copy** of its content. Unlike a git source (re-clonable) or a Notion
> source (re-pullable), a deleted upload source's files are gone. Include the `contextator-data` volume
> in your backups.

## Keeping it up to date

There is nothing to sync — upload again when the content changes, choosing **Add** or **Replace**.

If the same content also lives in a repository or on the server, prefer a
[git source](/en/docs/git-repository-source/) or a [local directory](/en/docs/local-directory-source/)
instead: both update themselves.

## Limits

| Setting | Default |
|---------|---------|
| `UPLOAD_MAX_FILE_BYTES` | 50 MB per file |
| `UPLOAD_MAX_FILES_PER_REQUEST` | 500 files per request (the dashboard splits larger folders) |
| `UPLOAD_MAX_ARCHIVE_BYTES` | 256 MB per archive |
| `ARCHIVE_MAX_ENTRIES` | 20 000 entries |
| `ARCHIVE_MAX_TOTAL_BYTES` | 1 GB extracted |

All of them are configurable — see [Configuration](/en/docs/configuration/).

## Uploading a vault or an export

- **Obsidian vault** — use the dedicated *Obsidian vault* tab; it is an upload source with the right
  content type already selected. See [Obsidian Vaults](/en/docs/obsidian-vaults/).
- **Notion export zip** — use *Upload files* with content type **Notion export**, which strips the
  32-character page ids Notion appends to every file and folder name. See [Content Types](/en/docs/content-types/).
