Skip to content


Repository files navigation


Get the icon of a file or app as a PNG image

Requires macOS 10.10 or later. macOS 10.13 or earlier needs to download the Swift runtime support libraries.


npm install file-icon


import fs from 'node:fs';
import {fileIconToBuffer, fileIconToFile} from 'file-icon';

// An app name can be used
const buffer = await fileIconToBuffer('Safari');
fs.writeFileSync('safari-icon.png', buffer);

// An array of app names
const apps = ['Finder', 'Safari'];
const buffers = await fileIconToBuffer(apps);, index) => fs.writeFileSync(`${apps[index]}-icon.png`, buffer));

// Or a bundle ID
const buffer2 = await fileIconToBuffer('', {size: 64});
fs.writeFileSync('safari-icon.png', buffer2);

// Or a an array of bundle IDs
const bundleIds = ['', ''];
const buffers2 = await fileIconToBuffer(bundleIds);, index) => fs.writeFileSync(`${bundleIds[index]}-icon.png`, buffer));

// Or a process ID
const buffer3 = await fileIconToBuffer(257);
fs.writeFileSync('pid.png', buffer3);

// Or an array of process IDs
const pids = [257, 16];
const buffers3 = await fileIconToBuffer(pids, {size: 128});, index) => fs.writeFileSync(`${pids[index]}-icon.png`, buffer));

// Or a path to an app / file
const buffer4 = await fileIconToBuffer('/Applications/');
fs.writeFileSync('safari-icon.png', buffer4);

// Or an array of filenames
const paths = ['/Applications/', '/Applications/'];
const buffers4 = await fileIconToBuffer(paths);, index) => fs.writeFileSync(`${paths[index].split(/\/|\./)[2]}-icon.png`, buffer));
fs.writeFileSync('jpeg-file-type-icon.png', buffer4);

// Or a mix of all of them!
await fileIconToBuffer(['Finder', 257, '', '/Applications/']);

// You can also use `fileIconToFile` and provide `options.destination` with the path to write to
await fileIconToFile('Safari', {destination: 'safari-icon.png'});

// You can also use same length arrays for `input` and `options.destination`
await fileIconToFile(['Safari', 'Finder'], {destination: ['safari-icon.png', 'finder-icon.png']});



fileIconToBuffer(input, options?)

Returns a Promise<Buffer> for a PNG image if input is of type string or number.

Returns a Promise<Buffer[]> for multiple PNG images if input is of type Array<string | number>.


Type: string | number | Array<string | number>


  • App name (string)
  • App bundle identifier (string)
  • App process ID (number)
  • Path to an app (string)
  • Path to a file (string)


Type: object


Type: number
Default: 1024
Maximum: 1024

Size of the returned icon.

fileIconToFile(input, options)

Returns a Promise that resolves when the files are written to options.destination.


Type: string | number | Array<string | number>


Type: object


Type: number
Default: 1024
Maximum: 1024

Size of the returned icon.


Type: string | string[]

Output file for the icon. If input is a single value, options.destination must be of type string. If input is an Array, options.destination must be of type string[] with the same length as input.