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

# Get started

<Tip>
  Read [the Notte skill](https://notte.cc/skill.md) and follow its setup instructions when setting up Notte or building browser automation. This is the shared source for CLI setup, authentication, and the browser-to-code workflow.
</Tip>

[Source: node-sdk/src/files.ts](https://github.com/nottelabs/notte/blob/main/node-sdk/src/files.ts)

File storage bound to a session, the counterpart of Python's
`RemoteFileStorage`. Create it unbound and pass it to `client.Session({ storage })`
so the session binds it on start, or bind it yourself with a session ID.

```ts theme={null}
const storage = client.FileStorage(sessionId);
const uploaded = await storage.upload('./resume.pdf');
const localPath = await storage.download(uploaded.id, './downloads');
const blob = await storage.downloadBlob(uploaded.id);
```

`download()` saves to disk; `downloadBlob()` returns bytes in memory, and
`stream()` returns a readable stream. For lower-level session file access,
see [NotteClient.Files](/typescript-sdk-reference/client/files).

## Create RemoteFileStorage

Use [NotteClient.FileStorage](/typescript-sdk-reference/client/filestorage) to create this object from your configured client.

```typescript theme={null}
client.FileStorage(sessionId?: string): RemoteFileStorage;
```

<ParamField body="sessionId" type={"string"} />

## Usage

* [download](/typescript-sdk-reference/remotefilestorage/download): Download a file to `<localDir>/<filename>` and return the local path. The file is written atomically (temporary file + rename). Rejects with `FileExistsError` when the destination exists unless `force` is set.
* [downloadBlob](/typescript-sdk-reference/remotefilestorage/downloadblob): Download a file's bytes as a `Blob` without touching the local filesystem.
* [upload](/typescript-sdk-reference/remotefilestorage/upload): Upload a file to the session. A string is read as a local path and its basename becomes the uploaded filename unless `uploadFileName` is set.
* [list](/typescript-sdk-reference/remotefilestorage/list): List the session's files.
* [metadata](/typescript-sdk-reference/remotefilestorage/metadata): Metadata of a file by ID. Rejects with `FileNotFoundError` when unknown.
* [stream](/typescript-sdk-reference/remotefilestorage/stream): Stream a file's bytes without buffering the whole file in memory.
* [delete](/typescript-sdk-reference/remotefilestorage/delete): Delete a session file.

<Accordion title="Direct constructor reference">
  ```typescript theme={null}
  new RemoteFileStorage(client: NotteClient, sessionId?: string): RemoteFileStorage;
  ```

  <ParamField body="client" type={"NotteClient"} required />

  <ParamField body="sessionId" type={"string"} />
</Accordion>

<Accordion title="Properties">
  ### sessionId

  ```typescript theme={null}
  sessionId: string
  ```

  ID of the bound session. Throws `InvalidRequestError` while the storage is unbound.

  ### isBound

  ```typescript theme={null}
  isBound: boolean
  ```

  Whether the storage has been bound to a session yet.
</Accordion>


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