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

# Connect & storage

> Run Infino against in-memory, local disk, or object storage backends like S3 and Azure Blob, picked at runtime by the connect URI scheme.

Where your data lives is chosen by the `connect` URI:

<CodeGroup>
  ```python Python icon="python" theme={null}
  db = infino.connect("memory://")              # in-process, ephemeral
  db = infino.connect("./data")                 # local disk (durable)
  db = infino.connect("s3://bucket/prefix")     # object storage (durable)
  ```

  ```typescript Node.js icon="node-js" theme={null}
  const db = connect("memory://");              // in-process, ephemeral
  const db = connect("./data");                 // local disk (durable)
  const db = connect("s3://bucket/prefix");     // object storage (durable)
  ```

  ```rust Rust icon="rust" theme={null}
  use infino::connect;

  let db = connect("memory://")?;               // in-process, ephemeral
  let db = connect("./data")?;                  // local disk (durable)
  let db = connect("s3://bucket/prefix")?;      // object storage (durable)
  ```
</CodeGroup>

Data is stored as standard Apache Parquet at that location, so anything that reads Parquet
can read it.

<Warning>
  `memory://` is in-process and ephemeral. `update` and `delete` require **durable**
  storage (a path or `s3://` URI).
</Warning>

## Object-storage configuration

For S3-compatible stores, pass credentials and a local read cache:

<CodeGroup>
  ```python Python icon="python" theme={null}
  db = infino.connect(
      "s3://bucket/prefix",
      endpoint="https://s3.us-east-1.amazonaws.com",
      region="us-east-1",
      access_key="...",
      secret_key="...",
      cache_dir="/var/cache/infino",   # local disk cache for remote-backed tables
      cache_budget_bytes=2_000_000_000,
  )
  ```

  ```typescript Node.js icon="node-js" theme={null}
  const db = connect("s3://bucket/prefix", {
    endpoint: "https://s3.us-east-1.amazonaws.com",
    region: "us-east-1",
    accessKey: "...",
    secretKey: "...",
    cacheDir: "/var/cache/infino",   // local disk cache for remote-backed tables
    cacheBudgetBytes: 2_000_000_000,
  });
  ```

  ```rust Rust icon="rust" theme={null}
  use infino::{connect_with, ConnectOptions};

  let db = connect_with(
      "s3://bucket/prefix",
      ConnectOptions::new()
          .with_s3_endpoint(
              "https://s3.us-east-1.amazonaws.com", "us-east-1", "ACCESS_KEY", "SECRET_KEY",
          )
          .with_cache_dir("/var/cache/infino")     // local disk cache for remote-backed tables
          .with_cache_budget_bytes(2_000_000_000),
  )?;
  ```
</CodeGroup>

<Note>
  Credentials can also come from the standard AWS environment. The cache keeps hot
  superfiles on local disk so warm queries don't re-fetch from object storage.
</Note>

## Connect options

| Option (Python / Node.js / Rust)                                      | Description                                         |
| --------------------------------------------------------------------- | --------------------------------------------------- |
| `endpoint`, `region`, keys / `with_s3_endpoint(...)`                  | S3-compatible endpoint, region, and credentials     |
| `cache_dir` / `cacheDir` / `with_cache_dir`                           | local disk-cache directory for remote-backed tables |
| `cache_budget_bytes` / `cacheBudgetBytes` / `with_cache_budget_bytes` | disk-cache budget, in bytes                         |
| `cold_fetch_mode` / `coldFetchMode` / `with_cold_fetch_mode`          | how cold-cache misses are serviced                  |

## Limitations

* **`memory://` is ephemeral** and can't be mutated. `update`/`delete` need a path or `s3://` URI.
* **Object-storage reads are cached locally.** Cold queries fetch from the store; size the cache (`cache_budget_bytes`) for your working set.

## See also

* [Tables](/guides/tables)
* [Open format](/guides/parquet-interop)
* [FAQ](/faq)
