Welcome! Type "help" for available commands.
$
Loading terminal interface...
Back to Blog

Vercel Blob vs Hetzner vs DigitalOcean vs AWS S3: Object Storage Showdown

May 23, 2025
William Callahan

Software engineer, founder, and leadership background in finance/tech. Based in San Francisco.

vercelawscloudstoragehetznerdigitalocean
Vercel Blob vs Hetzner vs DigitalOcean vs AWS S3: Object Storage Showdown

Vercel just announced that Vercel Blob is now generally available on all plans. This durable storage solution is already powering production apps like v0.dev and storing over 400 million files. With this announcement, it's a good time to compare Vercel Blob with other popular object storage options like Hetzner Object Storage, DigitalOcean Spaces, and the industry standard AWS S3.

The Elephant in the Room: S3 Compatibility

Before diving into the comparison, let's address something that's often overlooked: most modern object storage solutions are S3-compatible, meaning you can use the AWS SDK to interact with them directly from any programming language. This compatibility layer means you're not locked into AWS's ecosystem to use S3-like storage.

Whether you're using JavaScript, Python, Go, or any other modern language, you can typically point your S3 client to a different endpoint and use alternative object storage services with minimal code changes.

Feature Comparison

Let's compare the key features of these four object storage solutions:

FeatureVercel BlobHetzner Object StorageDigitalOcean SpacesAWS S3
Underlying TechnologyAWS S3 backendCeph clustersProprietary (S3-compatible)Native AWS infrastructure
S3 API CompatibilityPartial (proxied to S3)Yes (S3-compatible)Yes (S3-compatible)Native
Durability11 nines (via S3)Not explicitly statedNot explicitly stated11 nines
Global CDNYes (Vercel Edge Network)No built-in CDNYes (built-in, 25+ PoPs)Optional (CloudFront)
Data Center LocationsAWS regions, global cacheGermany, Finland5 regions (US, EU, Asia)Dozens globally
Storage ClassesSingle (standard)Single (standard)Single (standard)Multiple (Standard, IA, Glacier, etc.)
Advanced FeaturesDeep Vercel integration, global caching, simple APIS3 API, Ceph, WORM, public URLsBuilt-in CDN, simple UILifecycle, Object Lock, Replication, Batch Ops, rich IAM

Pricing Comparison

Now let's look at how these services compare in terms of pricing:

ProviderStorage Price (per GB/month)Data Transfer Out (per GB)Minimum Monthly PriceFree Tier
Vercel Blob$0.023$0.05 (regional)$0 (with Hobby plan)1GB storage & 10GB transfer (Hobby), 5GB storage & 100GB transfer (Pro)
Hetzner Object Storage~$0.0064 (1TB for $5.99)$0.0013 ($1.20/TB)$5.991TB storage & 1TB transfer included in base price
DigitalOcean Spaces$0.02$0.01$5250GB storage & 1,024GB transfer included in base price
AWS S3 (Standard)$0.023 (first 50TB)$0.09$0 (pay as you go)5GB storage & 100GB transfer (AWS Free Tier, 12 months)

Cost Comparison for Different Storage Needs

Let's see how these services compare for different storage volumes:

ProviderPrice for 250GBPrice for 1TBPrice for 5TB
Vercel Blob~$5.75 (Hobby + extra)~$23.00 (Hobby + extra)~$115.00 (Hobby + extra)
Hetzner Object Storage$5.99 (for 1TB)$5.99~$29.95 (5TB)
DigitalOcean Spaces$5.00~$20.00~$100.00
AWS S3 (Standard)~$5.75~$23.00~$115.00

Note: These calculations focus on storage costs only and don't include data transfer or API operation costs, which can significantly impact your total bill depending on usage patterns.

Integration with Modern Programming Languages

One of the great things about all these services is how easily they integrate with modern programming languages. Here are some examples:

Toggle dropdownJavaScript/TypeScript Integration

Using AWS SDK v3 with any S3-compatible service:

import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";

// Configure for AWS S3
const s3Client = new S3Client({
  region: "us-east-1",
  credentials: {
    accessKeyId: "YOUR_ACCESS_KEY",
    secretAccessKey: "YOUR_SECRET_KEY"
  }
});

// For Hetzner or DigitalOcean, just change the endpoint
const hetznerClient = new S3Client({
  region: "eu-central-1",
  endpoint: "https://s3.eu-central-1.hetzner.com",
  credentials: {
    accessKeyId: "YOUR_ACCESS_KEY",
    secretAccessKey: "YOUR_SECRET_KEY"
  }
});

// Upload example
async function uploadFile(client, bucket, key, body) {
  const command = new PutObjectCommand({
    Bucket: bucket,
    Key: key,
    Body: body
  });

  return client.send(command);
}

For Vercel Blob, you can use their dedicated SDK:

import { put } from '@vercel/blob';

export async function uploadToVercelBlob(file) {
  const blob = await put(file.name, file, {
    access: 'public',
  });

  return blob.url;
}
Toggle dropdownPython Integration

Using boto3 with any S3-compatible service:

import boto3

# Configure for AWS S3
s3_client = boto3.client(
    's3',
    region_name='us-east-1',
    aws_access_key_id='YOUR_ACCESS_KEY',
    aws_secret_access_key='YOUR_SECRET_KEY'
)

# For Hetzner or DigitalOcean, just change the endpoint
do_client = boto3.client(
    's3',
    region_name='nyc3',
    endpoint_url='https://nyc3.digitaloceanspaces.com',
    aws_access_key_id='YOUR_ACCESS_KEY',
    aws_secret_access_key='YOUR_SECRET_KEY'
)

# Upload example
def upload_file(client, bucket, key, file_path):
    return client.upload_file(file_path, bucket, key)
Toggle dropdownGo Integration

Using the AWS SDK for Go with any S3-compatible service:

package main

import (
    "context"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/credentials"
    "github.com/aws/aws-sdk-go-v2/service/s3"
)

func main() {
    // Configure for AWS S3
    cfg, _ := config.LoadDefaultConfig(context.TODO(),
        config.WithRegion("us-east-1"),
        config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(
            "YOUR_ACCESS_KEY", "YOUR_SECRET_KEY", "",
        )),
    )
    s3Client := s3.NewFromConfig(cfg)

    // For Hetzner or DigitalOcean, add custom endpoint resolver
    customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
        return aws.Endpoint{
            URL: "https://s3.eu-central-1.hetzner.com",
        }, nil
    })

    hetznerCfg, _ := config.LoadDefaultConfig(context.TODO(),
        config.WithRegion("eu-central-1"),
        config.WithEndpointResolverWithOptions(customResolver),
        config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(
            "YOUR_ACCESS_KEY", "YOUR_SECRET_KEY", "",
        )),
    )
    hetznerClient := s3.NewFromConfig(hetznerCfg)

    // Upload example
    // s3Client.PutObject(...)
}

When to Choose Each Service

Each of these object storage solutions has its strengths and ideal use cases:

Vercel Blob

Best for:

  • Vercel-hosted applications
  • Projects needing tight integration with Vercel's platform
  • Applications benefiting from global CDN caching
  • Developers who value simplicity and ease of use

Hetzner Object Storage

Best for:

  • Budget-conscious projects with large storage needs
  • European-based workloads (GDPR compliance)
  • Bulk storage with low egress requirements
  • Developers looking for the lowest cost option

DigitalOcean Spaces

Best for:

  • DigitalOcean customers
  • Projects needing built-in CDN capabilities
  • Developers who prefer a simple UI and predictable pricing
  • Applications with moderate storage and bandwidth needs

AWS S3

Best for:

  • Enterprise applications requiring advanced features
  • Workloads needing global distribution
  • Projects requiring multiple storage tiers
  • Applications with complex access control requirements
  • Existing AWS customers

Conclusion

Vercel Blob's general availability brings another strong contender to the object storage market. While its pricing for raw storage matches AWS S3, its data transfer costs are significantly lower thanks to Vercel's global caching network.

For pure cost efficiency, Hetzner Object Storage is hard to beat, especially for large storage volumes. DigitalOcean Spaces offers a good middle ground with its built-in CDN and simple pricing structure.

AWS S3 remains the most feature-rich option, but at a premium price, especially for data transfer. Its extensive feature set and global presence make it ideal for enterprise applications with complex requirements.

The good news is that with S3-compatible APIs across all these services, you're not locked into any single provider. You can start with one service and migrate to another as your needs change, often with minimal code changes.

Which object storage solution are you using for your projects? Have you tried Vercel Blob yet? Let me know in the comments!

Similar Content

HomeExperienceEducationCVProjectsBookmarksInvestmentsContactBlog
Welcome! Type "help" for available commands.
$
Loading terminal interface...

Similar Content

Related Bookmarks

LINK
September 14, 2025
Code Search | Grep by Vercel

Code Search | Grep by Vercel

Effortlessly search for code, files, and paths across a million GitHub repositories.

developer toolsvercelgithub repositories+8 more
grep.app
LINK
October 3, 2025
Railway Object Storage: S3 Buckets Now Available

Railway Object Storage: S3 Buckets Now Available

We’ve heard you: many of you have asked for Object Storage on Railway.We’re now exploring adding object storage, and we’d love your input before we bu...

aws s3distributed object storages3 hosting providers+13 more
station.railway.com
LINK
December 3, 2025
GitHub - NVIDIA/aistore: AIStore: scalable storage for AI applications

GitHub - NVIDIA/aistore: AIStore: scalable storage for AI applications

AIStore: scalable storage for AI applications. Contribute to NVIDIA/aistore development by creating an account on GitHub.

s3 object storageself hosted s3object storage+13 more
github.com

Related Investments

INV
December 31, 2020
Vest

Vest

Vest is an application that allows investing in the US stock market in Latin America.

investment platformsseedactive+8 more
INV
December 31, 2022
Upstock

Upstock

Equity management platform helping companies create and manage employee equity plans.

investment platformsseedactive+8 more
INV
December 31, 2022
AngelList

AngelList

Platform connecting startups with investors, talent, and resources for fundraising and growth.

investment platformsotheractive+8 more
aVenture

Related Articles

BLOG
September 25, 2025
How to Secure Environment Variables for LLMs, MCPs, and AI Tools Using 1Password or Doppler

How to Secure Environment Variables for LLMs, MCPs, and AI Tools Using 1Password or Doppler

Stop hardcoding API keys in MCP configs and AI tool settings. Learn how to use 1Password CLI or Doppler to inject secrets just-in-time for Claude, Cur...

security1passworddoppler+13 more
William CallahanWilliam Callahan
BLOG
November 9, 2025
Attempting to Design a Back-end with Cleaner Architecture Rules and Boundaries

Attempting to Design a Back-end with Cleaner Architecture Rules and Boundaries

How I'm learning to build with better software architecture design principles (while 'moving fast and breaking things').

backendarchitecturespring boot+13 more
William CallahanWilliam Callahan
BLOG
July 20, 2025
How I Finally Got a DigitalOcean Spaces Bucket to Default Public (Spoiler: Ditch Per-Bucket Keys)

How I Finally Got a DigitalOcean Spaces Bucket to Default Public (Spoiler: Ditch Per-Bucket Keys)

Still hitting 403 errors trying to make a DigitalOcean Spaces bucket public? Turn off Per-Bucket Access Keys, lean on simple ACLs, and skip the old su...

digitaloceans3object storage+16 more
William CallahanWilliam Callahan

Related Projects

PRJ
Filey - Flag Deprecated Files Extension

Filey - Flag Deprecated Files Extension

VS Code extension for flagging deprecated files

vs codevisual studio codecursor+17 more
PRJ
williamcallahan.com

williamcallahan.com

Interactive personal site with beautiful terminal/code components & other dynamic content

graph indexs3 object storageinteractive app+11 more
PRJ
repo-tokens-calculator

repo-tokens-calculator

CLI token counter (Python + tiktoken + uv) with pretty summary

clipythontiktoken+11 more