UploadKit
SDK@uploadkitdev/react

UploadTimeline

A GitHub/Linear-style vertical timeline where each file gets a status node with inline progress.

A vertical timeline with status dots and inline progress bars for each file. Nodes slide in from the left as files are added. The status dot pulses while uploading, shows a checkmark on success, or an X on error.

Design inspiration: GitHub PR timeline, Linear activity feed, Vercel deployment log.

motion is an optional peerDependency. Without it, transitions use CSS. pnpm add motion for spring slide-in entrances and smooth progress bar fills.

Drop files or click to upload

GitHub · Linear — activity timeline

Basic usage

import { UploadTimeline } from '@uploadkitdev/react';

export default function Page() {
  return (
    <UploadTimeline
      route="documentUploader"
      accept={['application/pdf', 'image/*']}
      maxFiles={10}
      onUploadComplete={(results) => {
        console.log('Uploaded:', results.map((r) => r.url));
      }}
    />
  );
}

Props

PropTypeDefaultDescription
routestringRequired. Route name from your file router.
acceptstring[]Accepted MIME types.
maxSizenumberMaximum file size in bytes.
maxFilesnumberMaximum number of files.
metadataRecord<string, unknown>JSON-serializable metadata forwarded to the server.
onUploadComplete(results: UploadResult[]) => voidCalled after all files upload successfully.
onUploadError(error: Error) => voidCalled on individual file failure.
classNamestringAdditional CSS class(es).
childrenReactNodeOverride the drop zone label.

UploadTimeline accepts a ref forwarded to the outer <div>.

Timeline node anatomy

Each file appears as a node on the timeline:

  ●  mountain-sunrise.jpg          ← status dot + filename
  │  2.4 MB                        ← file size
  │  ████████████░░░░  72%         ← progress bar
  │  uploading...                  ← timestamp/status text

Theming

VariablePurpose
--uk-primaryUploading dot color and progress fill
--uk-borderVertical line and idle dot color
--uk-text, --uk-text-secondaryFilename, size, and timestamp colors
--uk-successSuccess dot and checkmark
--uk-errorError dot and X icon

Accessibility

  • Drop zone node is role="button" — click opens file picker
  • Keyboard accessible via Enter and Space
  • Status dots use aria-label reflecting current state
  • Progress bars have role="progressbar" with aria-valuenow
  • Respects prefers-reduced-motion — dot pulse and slide-in animations disabled

On this page