Modern replacement of file-saver.js.
npm install tinysaveryarn add tinysaverpnpm add tinysaverimport { saveAs, saveText, saveJSON, saveCanvas } from 'tinysaver'
// Save a Blob
saveAs(new Blob(['hello world'], { type: 'text/plain' }), 'hello-world.txt')
// Save text content
saveText('Hello World', 'greeting.txt')
// Save JSON data
saveJSON({ name: 'John', age: 30 }, 'data.json', { space: 2 })
// Save canvas as image
const canvas = document.querySelector('canvas')
saveCanvas(canvas, 'image.png', { quality: 0.95 })import { saveAs } from 'tinysaver'
saveAs(new Blob(['hello world'], { type: 'text/plain' }), 'hello-world.txt', {
autoBom: true, // Add UTF-8 BOM for text files
clickDelay: 100, // Delay before triggering download
openInNewTab: false, // Open in new tab instead of downloading
disableClick: false, // Disable automatic click simulation
onStart() {
console.log('Download started')
},
onComplete() {
console.log('Download completed')
},
onError(err) {
console.error('Download failed', err)
},
onProgress(loaded, total) {
console.log(`${loaded}/${total}`)
},
})All download methods support lifecycle callbacks:
saveText('content', 'file.txt', {
onStart() {
// Called when download process starts
},
onProgress(loaded, total) {
// Called during download progress
console.log(`Downloaded ${loaded}/${total} bytes`)
},
onComplete() {
// Called when download completes
},
onError(error) {
// Called when download fails
console.error(error)
},
})tinysaver supports all modern browsers with automatic fallback for older versions:
- ✅ Chrome/Edge (all versions with download attribute support)
- ✅ Firefox (all versions)
- ✅ Safari (all versions, including iOS)
- ✅ Opera (all versions)
⚠️ IE (fallback via msSaveOrOpenBlob)
Save any Blob or URL as a file. Compatible with FileSaver.js saveAs API.
Parameters:
blob- Blob object or URL stringfilename- Name of the file to save (optional)options- Download options (optional)
Save text content as a file.
Parameters:
text- Text content to savefilename- Name of the text fileoptions- Download options with optionalmimeTypeproperty
Save JSON data as a file.
Parameters:
data- JavaScript object or value to savefilename- Name of the JSON fileoptions- Download options with optionalspaceproperty for formatting
Save HTML canvas as an image file.
Parameters:
canvas- HTMLCanvasElement to savefilename- Name of the image fileoptions- Download options with optionaltypeandqualityproperties
The library includes comprehensive unit tests covering:
- 🔍 BrowserDetector static and instance methods
- 📥 FileDownloader core functionality and error handling
- 🏷️ BOM (Byte Order Mark) insertion for text files
- 📝 Default filename handling
- 💾 saveText, saveJSON, and saveCanvas implementations
⚠️ Canvas conversion error handling- 🔔 Callback invocation during download lifecycle
Run tests with:
pnpm test