Web file manager for S3 storage and CDNs

Every file.
One balti.

Browse any S3-compatible bucket like a folder, share clean CDN links, and purge the edge in one click. Your whole team, no keys passed around.

بالٹیbalti · Urdu for bucket

01Connect

Point it at any bucket.

Cloudflare R2, AWS S3, or anything that speaks S3. Add the endpoint, bucket and public URL once. After that, nobody on the team handles a storage key.

endpointbucketpublicBaseUrlpurge
02Upload

Drop it in. Big files too.

Drag in files and folders. Large uploads are split into chunks. Edit JSON and HTML in place, move and rename in bulk, and download a selection as one zip.

03Purge

Clear the edge in one click.

Replace a file and purge it from the CDN in the same place. One file, a selection, or everything under a folder. Works with Bunny, Cloudflare or any HTTP purge API.

stale fresh
04Team

One org. Every bucket. The whole team.

Google sign-in and invites. Admin, Editor or Viewer roles, set per connection. Members can request access and admins approve it.

Scroll to fill the balti

Clients

Trusted with the CDNs behind two AI products.

ImagineArt logoIn production

ImagineArt

AI creative platform

The team ships assets for its web app, canvas, workflows, dashboard, mobile and landing pages from one Balti connection.

18products served from one bucket
In production

Chatly

AI chat assistant

Chatly's CDN runs through Balti too, under the same organization, with its own connection and access rules.

1 clickfrom upload to a fresh edge

Cyberduck was built for one person at a desk.

It's a solid desktop client. Balti is a Cyberduck alternative for teams that ship assets to a CDN every day and need to clear the cache when they do.

Where it runsA desktop app installed on each machineIn the browser, nothing to install
Cache purgeCloudFront and a few others, not Cloudflare or BunnyAny CDN with an HTTP purge API, per file or folder
Team setupEach person sets up their own credentialsAdmins add a connection once and invite the team
PermissionsWhatever each person's storage key allowsAdmin, Editor or Viewer per connection

Everything you do in a bucket.

Upload, then purge. Done.

Purge one file, a selection, or every file under a folder. Balti calls your CDN's purge API for you, with the URL filled in.

Clean links

Every file shows its public CDN URL, ready to paste into a PR or a ticket.

Orgs and invites

Sign in with Google, create an org, invite the team.

Roles per bucket

Editor on one connection, Viewer on another. Access requests go to admins.

Chunked uploads

Big files go up in chunks. Small ones go straight from your browser to the bucket.

Edit in place

Open a JSON config or an HTML page, change it, save it back.

Rollbacks

Overwrote the wrong logo? Go back to an earlier version.

A bucket connected in about a minute.

  1. Sign in with GoogleCreate an organization, or join one from an invite.
  2. Add a connectionEndpoint, bucket and public URL. Add a purge template for one-click purge.
  3. Invite your teamChoose who sees each connection and what they can change.
A connection
name:          "Marigold Assets"
endpoint:      "https://<account>.r2.cloudflarestorage.com"
bucket:        "marigold-web"
publicBaseUrl: "https://cdn.marigold.example"

# Purge: any HTTP API. Balti fills in the URL.
purge:
  method:       "POST"
  urlTemplate:  "https://api.cloudflare.com/client/v4/zones/<zone_id>/purge_cache"
  headers:      [ Authorization: "Bearer ••••••••" ]
  bodyTemplate: '{ "files": ["{{url}}"] }'

FAQ

Questions people ask about Balti.

Balti is a web-based file manager for S3-compatible storage such as Cloudflare R2 and AWS S3. Teams use it to upload, organize and share files, and to purge them from the CDN in one click.

What is Balti?

Balti is a browser-based file manager for S3-compatible buckets. It shows a bucket as folders and files, gives every file a public CDN link, and purges files from your CDN cache in one click. Teams share connections through an organization, so nobody has to handle storage keys. "Balti" is Urdu for bucket.

Is Balti a Cyberduck alternative?

Yes, for teams. Cyberduck is a desktop client that each person installs and sets up with their own credentials. Balti runs in the browser, lets an admin add a connection once and invite the team, and can purge any CDN that has an HTTP purge API, including Cloudflare and Bunny.

Which storage providers does Balti work with?

Any storage that speaks the S3 API, including Cloudflare R2 and AWS S3. You add the endpoint, the bucket name and the public base URL your CDN serves files from. Your files stay in your own bucket.

Which CDNs can Balti purge?

Any CDN with an HTTP purge API. You set the request method, URL, headers and body once, and Balti fills in each file's URL when you purge. You can purge a single file, a selection, or everything under a folder.

How does team access work?

You sign in with Google and create or join an organization. Admins add connections and invite people, and each member gets the Admin, Editor or Viewer role per connection. Members can request access to a connection and an admin approves it.

Are my storage credentials safe?

An admin enters the access key and secret once, and they stay on Balti's server. They are never sent to team members' browsers. Everyone else signs in with Google and works through Balti, so nobody on the team needs their own copy of the keys, and removing someone from the organization doesn't mean rotating keys.

What permissions should I give Balti's keys?

Only what it needs. On Cloudflare R2, create an API token with Object Read & Write scoped to the one bucket. On AWS S3, use an IAM user whose policy covers only that bucket. For Cloudflare cache purge, use an API token with just the Cache Purge permission on that zone. You can revoke or rotate any of these at your provider at any time.

Who uses Balti?

Balti manages the production CDNs for ImagineArt and Chatly, including the assets for 18 ImagineArt products. It was built by Abdul Ahad.

Grab your balti.

Sign in with Google, connect your first bucket, and stop waiting on stale caches.