---
title: Object storage
description: Create a private S3-compatible bucket for uploads and files, and use it from a service with the AWS SDK.
section: Data
order: 4
---

A Dekka bucket speaks the S3 API, so the AWS SDKs and most S3 libraries work with it. Buckets are private, and only services you connect to a bucket can read or write its objects.

## Create a bucket

On the canvas, choose **Add**, then **Object storage**, give the bucket a name and choose **Create bucket**. Public buckets aren't available yet, so to serve a file to browsers, have a service read it from the bucket and return it.

Object storage in your organisation counts against one allowance: 250 MiB on Free, 2 GiB on Starter and 10 GiB on Growth.

## Use a bucket from a service

Connect the service to the bucket, and it receives `S3_ENDPOINT`, `S3_BUCKET`, `S3_ACCESS_KEY_ID` and `S3_SECRET_ACCESS_KEY`. Use path-style requests.

```ts tab="TypeScript"
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";

const credentials = {
  accessKeyId: process.env.S3_ACCESS_KEY_ID!,
  secretAccessKey: process.env.S3_SECRET_ACCESS_KEY!,
};

const s3 = new S3Client({
  endpoint: process.env.S3_ENDPOINT,
  region: "auto",
  forcePathStyle: true,
  credentials,
});

await s3.send(new PutObjectCommand({ Bucket: process.env.S3_BUCKET, Key: "hello.txt", Body: "Hello from Dekka" }));
```

```python tab="Python"
import os
import boto3
from botocore.config import Config

s3 = boto3.client(
    "s3",
    endpoint_url=os.environ["S3_ENDPOINT"],
    aws_access_key_id=os.environ["S3_ACCESS_KEY_ID"],
    aws_secret_access_key=os.environ["S3_SECRET_ACCESS_KEY"],
    config=Config(s3={"addressing_style": "path"}),
)

s3.put_object(Bucket=os.environ["S3_BUCKET"], Key="hello.txt", Body=b"Hello from Dekka")
```

Each connected service gets keys scoped to this one bucket, so a leaked key can't reach anything else.

## Delete a bucket

Disconnect every service, then choose **Delete bucket** from the bucket's menu and type its name. This deletes every object in it, and objects in buckets aren't backed up.
