Migrate from Filestack to Transloadit
Filestack combines picking, uploading, transformations, workflows, and storage. With Transloadit, Uppy handles browser picking and Robots handle file processing. Define a supported workflow in a Template, then use an SDK, Uppy, or the REST API to create Assemblies. Check the tasks your application uses individually; the mapping below does not promise complete feature parity.
Migration map
| Filestack concept | Transloadit equivalent |
|---|---|
| Picker | Uppy with Transloadit |
| Upload | 🤖/upload/handle |
| Transformation task | Robot Step in a Template |
| Image conversion/resizing | 🤖/image/resize |
| Document preview | 🤖/document/thumbs or 🤖/file/preview (beta) |
| Virus scan | 🤖/file/virusscan |
| Workflow | Transloadit Template |
| Storage aliases | Third-party Credentials plus an export Robot |
| Webhook | Assembly Notification |
Build a Template for each workflow
This Template checks the detected MIME type, creates an image thumbnail or a first-page PDF thumbnail,
and stores accepted originals and previews. Other MIME types stop the Assembly with an error. This
is type filtering, not malware scanning; add /file/virusscan if your workflow requires it:
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"accepted_files": {
"use": ":original",
"robot": "/file/filter",
"accepts": [["${file.mime}", "regex", "^(image/[^/]+|application/pdf)$"]],
"error_on_decline": true
},
"images": {
"use": "accepted_files",
"robot": "/file/filter",
"accepts": [["${file.mime}", "regex", "^image/"]]
},
"pdfs": {
"use": "accepted_files",
"robot": "/file/filter",
"accepts": [["${file.mime}", "=", "application/pdf"]]
},
"image_thumb": {
"use": "images",
"robot": "/image/resize",
"width": 600,
"height": 600,
"resize_strategy": "fit",
"format": "webp",
"result": true
},
"document_thumb": {
"use": "pdfs",
"robot": "/document/thumbs",
"format": "jpg",
"page": 1,
"width": 600,
"resize_strategy": "fit",
"result": true
},
"exported": {
"use": ["accepted_files", "image_thumb", "document_thumb"],
"robot": "/s3/store",
"credentials": "YOUR_AWS_CREDENTIALS",
"path": "filestack-import/${unique_prefix}/${file.url_name}",
"url_prefix": "https://cdn.example.com/",
"acl": "bucket-default"
}
}
}
The two routing filters use MIME types to keep images and PDFs on separate preview branches. Declined originals never enter the export Step. An Assembly is not a transaction: already exported accepted files are not rolled back if another file fails. Ignoring errors suppresses failures; it is not a substitute for routing or validation.
Configure your CDN to read the bucket root; url_prefix only changes returned URLs.
acl: "bucket-default" sends no object ACL; configure access through
your bucket policy and CDN origin access. After ASSEMBLY_COMPLETED, read accepted originals from
results.accepted_files and previews from results.image_thumb and results.document_thumb.
Export adds or updates entries under the Steps named in its use parameter, unless that Step
explicitly sets result: false. Persist only entries
with is_temp_url: false. Temporary Transloadit URLs expire after 24 hours; see
saving conversion results.
Replace file picking
For browser integrations, replace the Filestack picker with Uppy. Uppy can
select local files, drag-and-drop uploads, and connect remote sources. The Transloadit Plugin sends
files to an Assembly using your Template. Enable waitForEncoding to receive finished processing
results in the browser, or set notify_url in your signed Assembly request and handle
Assembly Notifications on your backend. Verify notification signatures
and require successful completion before updating your database.
Import existing Filestack URLs
If existing Filestack handles resolve to HTTPS URLs, migrate them with 🤖/http/import:
{
"steps": {
"imported": {
"robot": "/http/import",
"url": "${fields.filestack_url}"
},
"preview": {
"use": "imported",
"robot": "/file/preview",
"result": true
},
"exported": {
"use": ["imported", "preview"],
"robot": "/s3/store",
"credentials": "YOUR_AWS_CREDENTIALS",
"path": "filestack-backfill/${unique_prefix}/${file.url_name}",
"acl": "bucket-default"
}
}
}
Select authorized filestack_url values from your backend’s asset inventory. /file/preview is in
beta and falls back to a generic file-type icon when it cannot generate a content thumbnail. Run
bounded backfill jobs; /http/import also accepts an array of URLs. Keep source handles and URLs
until the completed export’s access and quality are verified. Private S3 objects need an authorized
download or your configured CDN. The import Template returns exported files under results.imported
and results.preview.
Checklist
- Inventory Filestack picker usage and workflow tasks.
- Convert each workflow into a Transloadit Template.
- Move storage credentials into Third-party Credentials.
- Replace picker code with Uppy and the Transloadit Plugin.
- Save exported storage URLs from Assembly Notifications.
- Backfill existing Filestack files with
/http/import.