S3 compatibility
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 ...
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.
Supported operations
Section titled “Supported operations”Buckets
Section titled “Buckets”| Operation | Notes |
|---|---|
ListBuckets |
Lists all buckets on the current branch |
CreateBucket |
Creates a bucket on the current branch |
HeadBucket |
Checks if a bucket exists |
DeleteBucket |
Bucket must be empty first |
ListObjectsV2 |
Supports prefix, delimiter, max-keys, continuation-token |
GetBucketLocation |
Returns the configured region |
GetBucketCors / PutBucketCors / DeleteBucketCors |
CORS configuration |
GetBucketAcl |
Read-only; returns the stored ACL |
GetBucketPolicy |
Read-only; returns the stored policy |
GetBucketTagging / PutBucketTagging / DeleteBucketTagging |
Tag management |
GetBucketVersioning |
Returns stored config; versioning is not enforced |
GetBucketLifecycle / PutBucketLifecycle / DeleteBucketLifecycle |
Config is stored but rules are not enforced |
GetObjectLockConfiguration / PutObjectLockConfiguration |
Config is stored; enforcement is limited |
GetPublicAccessBlock / PutPublicAccessBlock / DeletePublicAccessBlock |
Supported |
Objects
Section titled “Objects”| Operation | Notes |
|---|---|
GetObject |
Supports Range header for partial reads |
HeadObject |
Returns object metadata |
PutObject |
Supports Content-Type, Content-Disposition, Cache-Control, custom x-amz-meta-* headers |
DeleteObject |
Soft-deletes the object on the current branch |
DeleteObjects |
Batch delete up to 1,000 keys per request |
GetObjectAcl |
Read-only |
GetObjectTagging / PutObjectTagging / DeleteObjectTagging |
Tag management |
GetObjectAttributes |
Returns ETag, size, and checksum |
Multipart upload
Section titled “Multipart upload”| Operation | Notes |
|---|---|
CreateMultipartUpload |
Initiates a multipart upload |
UploadPart |
Uploads a single part |
UploadPartCopy |
Copies a part from another object |
CompleteMultipartUpload |
Finalises the upload |
AbortMultipartUpload |
Cancels and cleans up |
ListMultipartUploads |
Lists in-progress uploads |
ListParts |
Lists uploaded parts for an in-progress upload |
Presigned requests
Section titled “Presigned requests”| Operation | Notes |
|---|---|
| Presigned GET / PUT | Supported via X-Amz-Algorithm=AWS4-HMAC-SHA256 query parameters |
| Browser form uploads (POST) | Supported |
| Presigned URL expiry | Configurable via X-Amz-Expires |
| Operation | Notes |
|---|---|
OPTIONS preflight |
Handled automatically |
GetBucketCors / PutBucketCors / DeleteBucketCors |
Full CORS rule management |
Not supported
Section titled “Not supported”The following operations return 501 Not Implemented:
| Operation | Category |
|---|---|
PutBucketAcl, PutBucketPolicy, PutObjectAcl |
ACL/policy writes via S3 wire |
GetBucketNotificationConfiguration, PutBucketNotificationConfiguration |
Event notifications |
GetBucketLogging, PutBucketLogging |
Server-side logging |
GetBucketEncryption, PutBucketEncryption |
Encryption configuration |
GetBucketReplication, PutBucketReplication |
Cross-region replication |
GetBucketWebsite, PutBucketWebsite |
Static website hosting |
GetBucketAccelerateConfiguration, PutBucketAccelerateConfiguration |
Transfer acceleration |
SelectObjectContent |
S3 Select queries |
RestoreObject |
Glacier restore |
GetObjectTorrent |
BitTorrent |
Known limitations
Section titled “Known limitations”- Path-style addressing only. Virtual-hosted-style requests (
bucket.host/key) are not supported. Always setforcePathStyle: truein the AWS SDK for JavaScript, or useendpoint_urlin boto3. - SigV4 only. AWS Signature Version 2 (SigV2) is not supported.
- Lifecycle rules stored but not enforced.
PutBucketLifecycleaccepts 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.
GetBucketLocationreturns the configured region string but bucket selection is always branch-based.
Need help?
Section titled “Need help?”Join our Discord Server to ask questions or see what others are doing with Neon. For paid plan support options, see Support.