> ## Documentation Index
> Fetch the complete documentation index at: https://levers9.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Storage and secrets

> A file browser for every volume, and API keys that reach containers as environment variables

## Storage

**Storage** lists the workspace's volumes with their size, file and folder counts, and where each one is mounted
(every function, box or notebook whose code references it). Create a volume from the **Create volume** dialog
or with `levers9 volume create NAME`.

Open a volume for a file browser:

* folders, with breadcrumbs;
* upload (a file or a folder) and download;
* previews for text, code, images, audio, video and PDF. A file is served for what it is and never runs as a
  page of the dashboard: pictures, sound, video, PDF and plain text open in the browser, and anything else (HTML,
  SVG, XML, JSON, scripts) is downloaded when opened in its own tab, while the preview still shows it as text or as
  a picture;
* delete from the row menu (`levers9 mv` renames or moves inside a volume);
* a reference list showing which apps mount the volume and at what path.

The same volume is what your code sees at `mount_path`:

```python theme={null}
from levers9 import Volume, job

@job(volumes=[Volume(name="datasets", mount_path="/data")])
def count():
    import os
    return len(os.listdir("/data"))
```

`levers9 ls`, `mv` and `rm` work on `VOLUME/path` from a terminal, with shell wildcards; `levers9 cp ./file levers9://VOLUME/path` uploads and the reverse downloads (see the [CLI reference](https://levers9.mintlify.site/guides/cli.md#files-volumes)). A `CloudBucket`
mounts an S3 or GCS bucket the same way, without copying.

Notebooks keep their files on the `notebooks` volume under `/notebooks/<name>`; datasets live on the `datasets`
volume as TSV files; RL Arena preference snapshots land there too.

## Secrets

**Secrets** stores API keys and other values for the workspace. **Create secret** offers templates for common
integrations (Anthropic, OpenAI, Hugging Face, AWS, Google Cloud, Google Sheets, GitHub, Slack, or custom
variables), each pre-filled with the variable names the integration expects and a link to where to find them. Rotate a value in place; containers pick up the new value on
their next start. Delete when it is no longer needed; functions that read it fail on their next start.

A container sees a secret as an environment variable when it asks for it:

```python theme={null}
@job(secrets=["OPENAI_API_KEY"])
def ask():
    import os
    key = os.environ["OPENAI_API_KEY"]
```

Datasets bind provider credentials through the same secrets, so one client's key never reaches another
client's build. Notebooks attach secrets the same way from their profile panel.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.