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.
Whether it's a handful of files or a growing archive, the setup is the same: create a bucket, set access rules, upload.
Serve images, video, and files directly to users without standing up your own CDN.
Store backups and cold data affordably, with lifecycle rules to age it out automatically.
Land raw data from any source and query it with the tools your team already uses.
Store uploads from your app's users, durable by default, without capacity planning.
No add-ons to configure and no extra invoices — this is what every bucket comes with.
Works with your existing S3 SDKs and tools — most of the time it's just a change of endpoint.
Files are cached and served from the edge closest to each request, automatically.
Automatically move old objects to cheaper storage or delete them on a schedule you set.
Keep every version of an object and recover from an accidental overwrite or delete.
Bucket and object-level permissions, plus signed URLs for temporary access.
Data is replicated across multiple drives and zones by default, before you configure anything.
No infrastructure to configure first. Create a bucket, decide who can access it, and start uploading.
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"
});
For small projects and side apps just getting started.
For live apps with real uploads, plus versioning and lifecycle rules.
For teams storing at scale, with dedicated bandwidth and SLA needs.
| Feature | Starter | Growth | Enterprise |
|---|---|---|---|
| Storage included | 5 GB | 250 GB | Custom |
| Bandwidth | 10 GB / mo | 1 TB / mo | Custom |
| Versioning | — | ✓ | ✓ |
| Lifecycle rules | — | ✓ | ✓ |
| Signed URLs | ✓ | ✓ | ✓ |
| SLA | — | — | ✓ |
| Support | Community | Standard | Premium |
"Our team went from zero to a working backend without touching a separate hosting provider. That alone was worth the switch."
Jordan BlakeYes — Storage works with your existing S3 SDKs and tools. Most of the time switching over is just a change of endpoint, not a rewrite.
Objects are replicated across multiple drives and availability zones by default, targeting eleven nines of durability.
Yes, per bucket or per object — or use signed URLs if you want temporary access instead of making something public.
Yes, on Growth and Enterprise plans — every version of an object is kept until you delete it, so an accidental overwrite isn't permanent.
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.
Yes — lifecycle rules can transition objects to cheaper storage or delete them on a schedule you define, no manual cleanup required.