File storage with delivery built in_
Upload, organize, and serve images, videos, documents, and other assets through Appwrite CDN. Resize, crop, and convert formats on the fly, compress and encrypt at the bucket level, and share with granular permissions.
Original
4.2 MB
Output
186 KB
Format
WEBP
promo.mp4
24 MBEncrypted
Cache hit
fra · 18 ms
- 120+ edge locations
- CDN
- On-the-fly delivery
- Transforms
- Compatible object access
- S3
- gzip and zstd buckets
- Compression
- At-rest protection
- Encryption
On-the-fly image transformations
Use the preview endpoint to resize, crop, convert format, set quality, add borders, and rotate from a single upload. Pass gravity=auto and YuNet looks for a face first. If none is confident enough, U²-Net saliency returns a normalized (x, y) crop focus. Fixed gravity values still work.
OriginalYuNet, then U²-Net. File is not cropped.
gravity=center
gravity=autoNewCDN delivery built in
Every storage file and transformed preview is served through Appwrite CDN with 120+ edge locations worldwide. Transformed images are cached in your project region first, so repeat requests skip re-processing and reach users faster.
Region cache
fra
Repeat transforms stay fast
Cache hitTransform
preview?width=640
Processed once
CDN edge
Nearest PoP
Low latency worldwide
Compression and image format optimization
Lower storage costs, cut bandwidth, and speed up page loads without a separate media pipeline. Enable gzip or zstd per bucket to compress uploads automatically, then serve WebP, AVIF, and other modern formats from the preview endpoint. Keep one original upload and optimize file size every time you deliver it.
Bucket compression
Original
hero.png
842 KB
Granular permissions at bucket and file level
Integrate Storage with Auth users, teams, and roles. Set bucket-wide defaults and per-file rules from the Console Security tab so the right people can read, create, update, or delete files.
avatars
Bucket permissions apply to all files
File security
Enable per-file permissions on individual uploads.
profile-128.webp
File-level rules override bucket defaults for sensitive assets.
Encryption at rest
Turn on bucket encryption from Settings so new uploads are stored encrypted at rest. If files are exposed, encrypted objects stay unreadable without your project keys.
Encryption
Applies to new files in this bucket
Encrypt new uploads at rest so leaked files stay unreadable.
File tokens for expiring public links
Share files with token-based preview, view, and download URLs that work without session cookies. Set an expiry date or keep links open-ended for external viewers.
Expires
Jan 31, 2027
File tokens
Share without session cookies or bucket permissions.
Preview URL
…/files/report-q4/preview?token=8f3a…c21d
Works for external viewers without third-party cookie issues.
Bucket-based file management at scale
Organize uploads in isolated buckets with upload, download, list, and delete APIs. Browse files in the Console with search, pagination, and bulk operations.
marketing-assets
128 files · 2.1 GB
S3-compatible object access
Connect Appwrite Storage to rclone, Terraform, and custom pipelines with a project-scoped HTTPS endpoint and SigV4-compatible signing. Copy credentials from the Console Connect tab and keep your existing S3 workflows.
$ rclone copy ./assets appwrite:marketing-assets
Transferred: 128 / 128, 100%
Elapsed time: 4.2s
$ aws s3 ls s3://marketing-assets
2026-10-03 842 KB hero-banner.webp
2026-10-03 1.2 MB pricing.pdfS3-compatible access
SigV4Project-scoped endpoint with SigV4 signing.
Image transform wizard and presets
Build transforms visually in the Console, preview results live, and save presets for reuse across your team. Ship optimized images without writing transformation code.
thumbnail-256
256 × 256 · webp
og-card
1200 × 630 · jpg
hero-banner
640 × 360 · webp
avatar-square
128 × 128 · avif
Tools built for developers and agents_
API-first by design. Use the Console, Realtime, SDKs, CLI, Terraform, MCP, and agent skills on the same project.
Developer and agent experience
A typical integration in TypeScript.
import { Client, Storage, ID } from 'appwrite';
const client = new Client() .setEndpoint('https://<REGION>.cloud.appwrite.io/v1') .setProject('<PROJECT_ID>');
const storage = new Storage(client);
const file = await storage.createFile({ bucketId: 'avatars', fileId: ID.unique(), file: input.files[0],});
console.log(file.$id);Everything is an API
REST, GraphQL, and SDKs for every service. Automate and integrate without console-only workflows.
Console
Manage every service in your project from a unified Console. Optimized keyboard access and a Command Center keep you moving fast.
Realtime
Subscribe to live events and react to changes as they happen.
buckets.*.files.*
buckets.*.files.*.create
MCP
Connect AI agents to your Appwrite project, APIs, and docs through one remote MCP server.
appwrite
https://mcp.appwrite.ioTerraform
Manage Appwrite infrastructure as code with the official provider.
terraform plan
terraform applyAgent skills
Give AI agents SDK-accurate knowledge of Appwrite services and APIs.
npx skills add appwrite/skillsSDKs
Client and server SDKs for the platforms your team already uses. 15 official SDKs available across client and server runtimes.
CLI
Deploy resources, manage projects, and generate typed SDKs from your terminal.
appwrite login
appwrite deployFAQ_
Storage is for binary files like images, videos, and PDFs. Databases store structured rows and fields. Most apps use both together: Storage for assets and Databases for metadata and relationships.
Start building with Storage_
Create a bucket, upload your first file, and generate a preview URL in minutes.
Explore Appwrite_
Modular backend services that share the same project, permissions model, and console.