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 and founder with a background in finance and tech. Currently building aVenture.vc, a platform for researching private companies. 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. It's already powering production apps like v0.dev and storing over 400 million files. A good time to compare it with other popular object storage options like Hetzner Object Storage, DigitalOcean Spaces, and AWS S3.

The Elephant in the Room: S3 Compatibility

Something 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. You're not locked into AWS's ecosystem—just point your S3 client to a different endpoint and use alternative services with minimal code changes.

Feature Comparison

Feature comparison:

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

Pricing comparison:

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

Cost comparison 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

All these services integrate easily with modern 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 has strengths:

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

Bottom Line

Vercel Blob is now a viable option in the object storage market. While its pricing for raw storage matches AWS S3, its data transfer costs are 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 has the most features, but at a premium price, especially for data transfer. Its feature set and global presence suit enterprise applications with complex requirements.

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.

Similar Content

Home
CV
ExperienceEducation
ProjectsBookmarksInvestmentsContactBlog
Welcome! Type "help" for available commands.
$
Loading terminal interface...

Similar Content

Related Bookmarks

station.railway.com
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 providerscloud infrastructurerailwayobject storage+10
LINK
github.com
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 storagedistributed storage systemsai data infrastructurecloud storage management+10
LINK
philschmid.de
July 1, 2025
The New Skill in AI is Not Prompting, It’s Context Engineering

The New Skill in AI is Not Prompting, It’s Context Engineering

Context Engineering is the new skill in AI. It is about providing the right information and tools, in the right format, at the right time.

context engineeringprompt engineeringai agentsllmsartificial intelligencenew+7
LINK

Related Projects

Filey - Flag Deprecated Files Extension

Filey - Flag Deprecated Files Extension

VS Code extension for flagging deprecated files

vs codevisual studio codecursorwindsurftypescriptdeveloper tools+14
PRJ
williamcallahan.com

williamcallahan.com

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

graph indexs3 object storageinteractive appterminal uimdx blogsearch+8
PRJ

Related Books

React in Depth

React in Depth

Morten Barklund

React in Depthteaches the React libraries, tools and techniques that are vital to build amazing apps. You'll put each skill you learn into practice wi...

computersmorten barklundsimon and schusterreactdepthdepthteaches+5
BOOK
Essential TypeScript 5, Third Edition

Essential TypeScript 5, Third Edition

Adam Freeman

"TypeScript is a popular superset of JavaScript that adds support for static typing. TypeScript's typing features, which will be instantly familiar to...

computersadam freemansimon and schustertypescriptessentialthird+5
BOOK
Advanced Algorithms and Data Structures

Advanced Algorithms and Data Structures

Marcello La Rocca

marcello la roccaadvancedalgorithmsdatastructures
BOOK

Related Investments

Vest

Vest

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

investment platformsseedactivevestmarketapplication+5
INV
Upstock

Upstock

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

investment platformsseedactiveupstockequityplatform+5
INV
AngelList

AngelList

aVenture

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

investment platformsotheractiveangellistplatformgrowth+5
INV