transloadit/uppy · warning · Error

All files were canceled after assembly was created

Error message

All files were canceled after assembly was created

What it means

Thrown after Transloadit creates (or recovers) an assembly but the resulting assembly object is null, which happens when every file in the upload batch was canceled before the assembly creation completed. It prevents the plugin from proceeding with no files attached to the assembly.

Source

Thrown at packages/@uppy/transloadit/src/index.ts:874

    const assemblyOptions = (
      typeof this.opts.assemblyOptions === 'function'
        ? await this.opts.assemblyOptions()
        : this.opts.assemblyOptions
    ) as OptionsWithRestructuredFields

    assemblyOptions.fields = {
      ...(assemblyOptions.fields ?? {}),
    }
    validateParams(assemblyOptions.params)

    try {
      const assembly =
        // this.assembly can already be defined if we recovered files with Golden Retriever (this.#onRestored)
        this.assembly ?? (await this.#createAssembly(fileIDs, assemblyOptions))

      if (assembly == null)
        throw new Error('All files were canceled after assembly was created')

      if (this.opts.importFromUploadURLs) {
        await this.#reserveFiles(assembly, fileIDs)
      }
      fileIDs.forEach((fileID) => {
        const file = this.uppy.getFile(fileID)
        this.uppy.emit('preprocess-complete', file)
      })
      this.#createAssemblyWatcher(ensureAssemblyId(assembly.status))
      this.assembly = assembly
      this.#connectAssembly(assembly, fileIDs)
    } catch (err) {
      fileIDs.forEach((fileID) => {
        const file = this.uppy.getFile(fileID)
        // Clear preprocessing state when the Assembly could not be created,
        // otherwise the UI gets confused about the lingering progress keys
        this.uppy.emit('preprocess-complete', file)
        this.uppy.emit('upload-error', file, err)

View on GitHub (pinned to 5d4dedd02a)

Solutions

  1. Treat as benign in cancel flows: ensure your UI cancels via uppy.cancelAll() and swallow this error if it occurs during intentional cancellation
  2. Avoid removing files individually mid-assembly-creation; cancel the whole upload instead
  3. Upgrade @uppy/transloadit — cancellation/assembly races have been improved over versions

Example fix

// before
await uppy.upload() // user cancels mid-flight, error surfaces
// after
try {
  await uppy.upload()
} catch (err) {
  if (err.message === 'All files were canceled after assembly was created') return
  throw err
}
Defensive patterns

Strategy: try-catch

Try / catch

try {
  await uppy.upload()
} catch (err) {
  if (err instanceof Error && err.message.includes('All files were canceled after assembly was created')) {
    // user-initiated cancel, ignore
    return
  }
  throw err
}

Prevention

When it happens

Trigger: All files are removed/canceled while #createAssembly is in flight (e.g. uppy.removeFile or cancelAll during creation), so createAssembly returns null and this.assembly is null.

Common situations: Users hitting cancel while an assembly is being created; Golden Retriever restoration flows where restored files are subsequently canceled; race between cancellation and assembly creation.

Related errors


AI-assisted analysis of transloadit/uppy@5d4dedd02a (2026-08-28). Data as JSON: /api/errors/83cd6d8d2b863d7b. Report an issue: GitHub.