---
question: How do Files drives map to object storage prefixes?
kind: overview
---

# Files

Files are bytes in object storage, the kernel service `services.object_storage`. Nexus Files is the workspace view of it: members upload, organise, preview and download files there. Modules read and write the same store from Python, with a prefix and a key.

<!-- matrix -->

## Backends

`services.object_storage` in `config.yaml` picks one adapter:

| Adapter | Storage | Used by |
|---|---|---|
| `fs` | A folder on disk (`base_path`, default `storage/datastore`) | `config.yaml` of a new project (`abi dev up`), and the engine default |
| `s3` | An S3 bucket (`bucket_name`, `base_prefix`, keys, optional `endpoint_url`) | `config.local.yaml`: MinIO on the Docker stack |
| `r2` | A Cloudflare R2 bucket | |
| `naas` | naas.ai storage (`naas_api_key`, `workspace_id`, `storage_name`) | |
| `nats_rpc` | Another engine's object storage, over NATS | Engines that share one store |

The keys of each adapter are in the [Configuration Reference](/user-guide/get-started/configuration#object-storage). On the Docker stack, the MinIO console is at `http://localhost:9001`.

## Key concepts

- **Prefix and key.** Every object is `prefix/key`. `put_object(prefix, key, content)` writes it, `get_object` reads it. There are no real folders: a folder is the prefix its objects share.
- **Drives.** Files shows a drive at a time, each under its own prefix: **Workspace Drive** (`naas_abi/workspace-drive/<workspace_id>/`), **My Drive** (`naas_abi/my-drive/<user_id>/`), **Platform Drive** when the workspace has it, and **System Drive** (the whole store) for admins. The REST API calls them scopes: `workspace`, `my_drive`, `platform_drive`, `system_drive`.
- **Staff folders.** A new workspace drive gets one folder per staff function (`personnel/` to `external/`), each with a `README.md`. A folder you delete is not brought back.
- **System files.** Any path segment that starts with `.` is read-only in Files and hidden unless View › Show system files is on. Empty folders keep a `.nexus_folder` marker so they still list.
- **Limits.** An upload is at most 50 MB. A ZIP download is at most 10,000 files.
- **Events.** `put_object` and `delete_object` publish `ObjectPut` and `ObjectDeleted` when the event service is up, for Files and modules alike. A failed publish never fails the write.
- **Administration.** Super admins see the whole store, module prefixes included, under System › Data › Object storage.
- **Dependency.** A module lists `ObjectStorageService` in `ModuleDependencies.services`. The attribute is `self.engine.services.object_storage`.
