Neon is expanding into a backend: Object Storage, Functions, and AI Gateway now in beta
/Object Storage/S3 compatibility

S3 compatibility

Which S3 operations Neon Object Storage supports

Beta

The Neon Object Storage is in Beta. Share your feedback on Discord or via the Neon Console.

Neon Object Storage is compatible with the S3 API for core operations. It works with the AWS SDK for JavaScript (@aws-sdk/client-s3), boto3, the AWS CLI, and other S3-compatible tools. Not all S3 API operations are available.

note

Configure your S3 client with forcePathStyle: true (JavaScript) or endpoint_url (Python/CLI). Neon Object Storage uses path-style addressing only. See Get started for setup details.

Supported operations

Buckets

OperationNotes
ListBucketsLists all buckets on the current branch
CreateBucketCreates a bucket on the current branch
HeadBucketChecks if a bucket exists
DeleteBucketBucket must be empty first
ListObjectsV2Supports prefix, delimiter, max-keys, continuation-token
GetBucketLocationReturns the configured region
GetBucketCors / PutBucketCors / DeleteBucketCorsCORS configuration
GetBucketAclRead-only; returns the stored ACL
GetBucketPolicyRead-only; returns the stored policy
GetBucketTagging / PutBucketTagging / DeleteBucketTaggingTag management
GetBucketVersioningReturns stored config; versioning is not enforced
GetBucketLifecycle / PutBucketLifecycle / DeleteBucketLifecycleConfig is stored but rules are not enforced
GetObjectLockConfiguration / PutObjectLockConfigurationConfig is stored; enforcement is limited
GetPublicAccessBlock / PutPublicAccessBlock / DeletePublicAccessBlockSupported

Objects

OperationNotes
GetObjectSupports Range header for partial reads
HeadObjectReturns object metadata
PutObjectSupports Content-Type, Content-Disposition, Cache-Control, custom x-amz-meta-* headers
DeleteObjectSoft-deletes the object on the current branch
DeleteObjectsBatch delete up to 1,000 keys per request
GetObjectAclRead-only
GetObjectTagging / PutObjectTagging / DeleteObjectTaggingTag management
GetObjectAttributesReturns ETag, size, and checksum

Multipart upload

OperationNotes
CreateMultipartUploadInitiates a multipart upload
UploadPartUploads a single part
UploadPartCopyCopies a part from another object
CompleteMultipartUploadFinalises the upload
AbortMultipartUploadCancels and cleans up
ListMultipartUploadsLists in-progress uploads
ListPartsLists uploaded parts for an in-progress upload

Presigned requests

OperationNotes
Presigned GET / PUTSupported via X-Amz-Algorithm=AWS4-HMAC-SHA256 query parameters
Browser form uploads (POST)Supported
Presigned URL expiryConfigurable via X-Amz-Expires

CORS

OperationNotes
OPTIONS preflightHandled automatically
GetBucketCors / PutBucketCors / DeleteBucketCorsFull CORS rule management

Not supported

The following operations return 501 Not Implemented:

OperationCategory
PutBucketAcl, PutBucketPolicy, PutObjectAclACL/policy writes via S3 wire
GetBucketNotificationConfiguration, PutBucketNotificationConfigurationEvent notifications
GetBucketLogging, PutBucketLoggingServer-side logging
GetBucketEncryption, PutBucketEncryptionEncryption configuration
GetBucketReplication, PutBucketReplicationCross-region replication
GetBucketWebsite, PutBucketWebsiteStatic website hosting
GetBucketAccelerateConfiguration, PutBucketAccelerateConfigurationTransfer acceleration
SelectObjectContentS3 Select queries
RestoreObjectGlacier restore
GetObjectTorrentBitTorrent

note

To set a bucket's access level (private or public_read), use the Neon Console or API instead of PutBucketAcl or PutBucketPolicy.

Known limitations

  • Path-style addressing only. Virtual-hosted-style requests (bucket.host/key) are not supported. Always set forcePathStyle: true in the AWS SDK for JavaScript, or use endpoint_url in boto3.
  • SigV4 only. AWS Signature Version 2 (SigV2) is not supported.
  • Lifecycle rules stored but not enforced. PutBucketLifecycle accepts and stores configuration, but expiration and transition rules do not run.
  • Versioning stored but not enforced. Versioning configuration is stored and echoed. Objects always return x-amz-version-id: null.
  • No bucket notifications. SNS/SQS integration is not available.
  • Branches, not regions. Buckets are scoped to a branch, not an AWS region. GetBucketLocation returns the configured region string but bucket selection is always branch-based.

Need help?

Join our Discord Server to ask questions or see what others are doing with Neon. For paid plan support options, see Support.

Was this page helpful?
Edit on GitHub

On this page

Copy neon init command