Storage

Durable object storage that scales without a migration

S3-compatible storage for files, backups, and media — durable by default, delivered from the edge closest to your users, and priced for however much you actually store.

S3-compatible Global edge delivery Lifecycle rules Versioning Access control
  StatusHealthy
Objects stored1.2M
Storage used340 GB / 1 TB
Requests today89,204
Last upload3 minutes ago
Who it's for

Built for whatever you're storing

Whether it's a handful of files or a growing archive, the setup is the same: create a bucket, set access rules, upload.

Static site & app assets

Serve images, video, and files directly to users without standing up your own CDN.

Backups & archives

Store backups and cold data affordably, with lifecycle rules to age it out automatically.

Data lakes & analytics

Land raw data from any source and query it with the tools your team already uses.

User-generated content

Store uploads from your app's users, durable by default, without capacity planning.

Features

Everything a production bucket needs, on by default

No add-ons to configure and no extra invoices — this is what every bucket comes with.

S3-compatible API

Works with your existing S3 SDKs and tools — most of the time it's just a change of endpoint.

Global edge delivery

Files are cached and served from the edge closest to each request, automatically.

Lifecycle rules

Automatically move old objects to cheaper storage or delete them on a schedule you set.

Versioning

Keep every version of an object and recover from an accidental overwrite or delete.

Fine-grained access control

Bucket and object-level permissions, plus signed URLs for temporary access.

11 nines durability

Data is replicated across multiple drives and zones by default, before you configure anything.

How it works

From nothing to a live bucket in under a minute

No infrastructure to configure first. Create a bucket, decide who can access it, and start uploading.

  • Create a bucket — pick a name and a region, nothing else required to get started.
  • Set access rules — public, private, or signed-URL access, decided per bucket or per object.
  • Upload — via the console, the CLI, or any S3-compatible SDK you already use.
  • Set lifecycle rules — optional, age objects into cheaper storage or expire them automatically.
1  Create a bucketReady
2  Set access rulesPrivate
3  Upload1.2M objects
4  Lifecycle rulesConfigured
For developers

Provision from the CLI, console, or your own code

Typed clients across the languages you already use — same primitives, idiomatic in each one. If you're not the one writing this part, feel free to skip ahead to pricing.

// Create a bucket and upload an object
import { WinixxCloud } from '@winixx/cloud';

const cloud = new WinixxCloud({ apiKey: process.env.WINIXX_API_KEY });

const bucket = await cloud.storage.createBucket({
  name: 'app-uploads',
  region: 'us-east',
});

await cloud.storage.putObject({
  bucket: 'app-uploads',
  key: 'avatars/user-42.png',
  body: fileBuffer,
});
// Create a bucket via the REST API
const res = await fetch('https://api.winixx.net/cloud/v1/storage/buckets', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${WINIXX_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'app-uploads',
    region: 'us-east',
  }),
});

const bucket = await res.json();
// Create a bucket
import { WinixxCloud, BucketSpec } from '@winixx/cloud';

const cloud = new WinixxCloud({ apiKey: process.env.WINIXX_API_KEY! });

const spec: BucketSpec = {
  name: 'app-uploads',
  region: 'us-east',
};

const bucket = await cloud.storage.createBucket(spec);
# Create a bucket
from winixx_cloud import WinixxCloud

cloud = WinixxCloud(api_key=os.environ["WINIXX_API_KEY"])

bucket = cloud.storage.create_bucket(
    name="app-uploads",
    region="us-east",
)
// Create a bucket
use Winixx\Cloud\WinixxCloud;

$cloud = new WinixxCloud(apiKey: getenv('WINIXX_API_KEY'));

$bucket = $cloud->storage->createBucket([
    'name' => 'app-uploads',
    'region' => 'us-east',
]);
// Create a bucket
import net.winixx.cloud.WinixxCloud;
import net.winixx.cloud.model.BucketSpec;

WinixxCloud cloud = new WinixxCloud(System.getenv("WINIXX_API_KEY"));

BucketHandle bucket = cloud.storage().createBucket(
    BucketSpec.builder()
        .name("app-uploads")
        .region("us-east")
        .build()
);
// Create a bucket
#include <winixx/cloud.hpp>

winixx::Cloud cloud(std::getenv("WINIXX_API_KEY"));

winixx::BucketSpec spec;
spec.name = "app-uploads";
spec.region = "us-east";

auto bucket = cloud.storage().createBucket(spec);
// Create a bucket
using Winixx.Cloud;

var cloud = new WinixxCloud(Environment.GetEnvironmentVariable("WINIXX_API_KEY"));

var bucket = await cloud.Storage.CreateBucketAsync(new BucketSpec {
    Name = "app-uploads",
    Region = "us-east"
});
Pricing

Start small, pay for what you store

See full pricing →
Starter
$0/mo

For small projects and side apps just getting started.

  • 5 GB storage included
  • 10 GB bandwidth / month
  • Community support
Get started
Enterprise
Custom

For teams storing at scale, with dedicated bandwidth and SLA needs.

  • Volume pricing at scale
  • Dedicated bandwidth
  • SLA-backed durability
  • Premium support
Talk to sales
Feature Starter Growth Enterprise
Storage included5 GB250 GBCustom
Bandwidth10 GB / mo1 TB / moCustom
Versioning—✓✓
Lifecycle rules—✓✓
Signed URLs✓✓✓
SLA——✓
SupportCommunityStandardPremium
"Our team went from zero to a working backend without touching a separate hosting provider. That alone was worth the switch."
JBJordan Blake Jordan Blake
Founder, independent SaaS studio
FAQ

Common questions

Is this compatible with the S3 API?+−

Yes — Storage works with your existing S3 SDKs and tools. Most of the time switching over is just a change of endpoint, not a rewrite.

How durable is my data?+−

Objects are replicated across multiple drives and availability zones by default, targeting eleven nines of durability.

Can I make files public?+−

Yes, per bucket or per object — or use signed URLs if you want temporary access instead of making something public.

Do you support versioning?+−

Yes, on Growth and Enterprise plans — every version of an object is kept until you delete it, so an accidental overwrite isn't permanent.

What happens if I go over my storage limit?+−

You're billed for the overage per GB, not cut off — there's no surprise interruption to your app while you're over a plan's included amount.

Can I set files to expire automatically?+−

Yes — lifecycle rules can transition objects to cheaper storage or delete them on a schedule you define, no manual cleanup required.

Ready to store your first file?

Create a bucket in under a minute — no credit card required to start.