...

Add File Uploads to Angular in One Command

The Filestack Angular SDK ingests, processes and delivers files behind one provider call. Standalone components, signal inputs and server rendering.

Runs on Angular 19, 20, 21 and 22.

Terminal · installs both packages and writes the provider
ng add @filestack/angular
app.config.ts · what the schematic writes for you
// app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideFilestack } from '@filestack/angular';

export const appConfig: ApplicationConfig = {
  providers: [provideFilestack({ apikey: 'YOUR_API_KEY' })],
};
Trusted by teams at
SendGrid logo with stylized gray text and overlapping square shapes on the left.
LinkedIn logo followed by the word SlideShare in gray text on a light background.
The word teachable is written in all lowercase, sans-serif letters with a colon between teach and able, in a light purple color on a light background.
A gray Airtable logo featuring a geometric cube design to the left of the word Airtable in bold, modern font.

From Install to First Upload

Four steps. The schematic does the first two, and the Angular file upload SDK is wired into your app config from there.

01
Install
ng add @filestack/angular
02
Provide
provideFilestack in app.config.ts
03
Import
The picker component you need
04
Upload
A handle back on uploadSuccess

Three Pickers, One API Key

Each one is a standalone component with the same inputs and outputs. Import the one your layout calls for.

Overlay

Opens the picker over your page from any trigger you wrap in it. Selector ng-picker-overlay.

Read the Component Reference →

Inline

Renders the picker inside a container you control, so it sits in the page like any other form field. Selector ng-picker-inline.

Read the Component Reference →

Drop pane

A drag and drop target for the whole area you give it. Selector ng-picker-drop-pane.

Read the Component Reference →

What the SDK Does Once It Is In

Four capabilities behind the same provider. Pick the one you came for.

A handle back on uploadSuccess

Wrap your own button in the picker component. The uploadSuccess output emits the stored file, and uploadError emits a typed error.

Explore Filestack Uploads
app.component.html · the overlay picker
<ng-picker-overlay
  [pickerOptions]="pickerOptions"
  (uploadSuccess)="onUploadSuccess($event)"
  (uploadError)="onUploadError($event)">
  <button type="button">Choose files</<span class="c-key">button>
</<span class="c-key">ng-picker-overlay>

Typed progress as an observable

  • Progress ticks carry totalPercent and totalBytes
  • A final complete tick carries the stored file
  • Failures emit an error tick and error the stream
Read the Angular Docs
upload.component.ts · uploadWithProgress
private fs = inject(FilestackService);

this.fs.uploadWithProgress(file).subscribe(e => {
  if (e.status === 'progress') this.percent = e.totalPercent;
  if (e.status === 'complete') this.result = e.file;
});

Transformations as a URL

Inject FilestackFilelink to chain tasks in TypeScript, or use the filestackTransform pipe in a template. The key comes from the active client session.

Explore Transformations
CDNcdn.filestackcontent.com
/
Taskresize=width:200
/
HandleHANDLE
Either surface builds the same URL
// TypeScript
const url = this.filelink.forHandle(handle).resize({ width: 200 }).toString();


<img [src]="handle | filestackTransform: { resize: { width: 200 } }" />

Renders on the server as it is

Every DOM path in the SDK is platform guarded, so an Angular Universal app takes the picker with no guard of its own.

Read the Angular Docs
Behaviour on the server
openPicker() // returns null, loads filestack-js on first click
preview()    // returns null
<ng-picker-inline> // container renders, picker starts after hydration

Angular Versions This Runs On

The peer range has no upper bound, so the next Angular major installs the day it lands.

@filestack/angular Angular Node Status
4.x 19, 20, 21, 22 Set by your Angular major Current
3.x 18 18.19.1, 20.11.1 or 22 and up Maintenance
2.x 14 14.15 or 16 and up End of life

Straight talk: Angular 15, 16 and 17 fall between published peer ranges. An app on one of those upgrades Angular first, and Angular 18 stays on @filestack/angular@3, which is in maintenance and still takes fixes.

The File Code You Would Otherwise Own

Filestack runs every job in both columns. What changes is whether your team writes and maintains the code for it.

6 jobs your team writes and maintains
01 Multipart upload with retry and cancel
02 Progress events wired into change detection
03 A picker for local files and cloud drives
04 Platform guards for server rendering
05 Image and document processing
06 CDN delivery and cache rules

Or write one URL

1 provider call Filestack runs for you
provideFilestack({ apikey: 'YOUR_API_KEY' })

Every job on the left keeps happening. It happens behind the provider, on infrastructure Filestack maintains, reached through FilestackService as observables.

Frequently Asked Questions

Which Angular versions does the SDK support?

Version 4 supports Angular 19, 20, 21 and 22. The peer range has no upper bound, so a new Angular major installs the day it lands. Angular 18 stays on version 3.

Does it work with standalone components?

Yes. provideFilestack() registers the SDK in an ApplicationConfig, and the picker components and the transform pipe are standalone, so a component imports the one it uses.

Does the picker work with server-side rendering?

Yes. Every DOM path is platform guarded. openPicker() and preview() return null on the server, and the client loads through a dynamic import.

How do I add it to an existing Angular app?

Run ng add @filestack/angular. It installs both packages, prompts for your API key, and writes the provider into app.config.ts or app.module.ts.