
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@profullstack/favicon-generator
Advanced tools
Generate PNG icons from SVG for iOS and PWA compatibility
Generate PNG icons from SVG for iOS and PWA compatibility. A modern, flexible Node.js tool that converts your SVG favicon into all the icon sizes you need for mobile devices and progressive web apps.
# Using pnpm (recommended)
pnpm add @profullstack/favicon-generator
# Using npm
npm install @profullstack/favicon-generator
# Using yarn
yarn add @profullstack/favicon-generator
# Using pnpm
pnpm add -g @profullstack/favicon-generator
# Using npm
npm install -g @profullstack/favicon-generator
Simply run the command without arguments to enter interactive mode:
fav
You'll be prompted for:
# Basic usage
fav -i favicon.svg -o ./icons
# With custom quality and compression
fav -i logo.svg -o ./public/icons -q 90 -c 7
# Silent mode (no output)
fav -i favicon.svg -o ./icons --silent
# Skip favicon generation
fav -i favicon.svg -o ./icons --no-favicon
# Show help
fav --help
# Show version
fav --version
| Option | Alias | Description | Default |
|---|---|---|---|
--input | -i | Path to SVG file | ./favicon.svg |
--output | -o | Output directory | ./icons |
--quality | -q | PNG quality (1-100) | 95 |
--compression | -c | Compression level (0-9) | 9 |
--no-favicon | Skip additional favicon sizes | false | |
--silent | Suppress output messages | false | |
--help | -h | Show help message | |
--version | -v | Show version number |
import { generateIcons } from '@profullstack/favicon-generator';
const results = await generateIcons({
svgPath: './favicon.svg',
outputDir: './icons',
});
console.log(`Generated ${results.icons.length} icons`);
import { generateIcons } from '@profullstack/favicon-generator';
const results = await generateIcons({
svgPath: './logo.svg',
outputDir: './public/icons',
quality: 90,
compressionLevel: 7,
generateFavicon: true,
faviconSizes: [16, 32, 48],
verbose: true,
});
// Access generated files
results.icons.forEach((icon) => {
console.log(`${icon.name}: ${icon.path}`);
});
import { generateCustomIcons } from '@profullstack/favicon-generator';
const customSizes = [
{ size: 48, name: 'icon-48.png' },
{ size: 96, name: 'icon-96.png' },
{ size: 144, name: 'icon-144.png' },
];
const results = await generateCustomIcons('./favicon.svg', './icons', customSizes, { quality: 95 });
import { generateIcons, DEFAULT_ICON_SIZES, BACKGROUNDS } from '@profullstack/favicon-generator';
// Use default icon sizes
const results = await generateIcons({
svgPath: './favicon.svg',
outputDir: './icons',
iconSizes: DEFAULT_ICON_SIZES,
});
// Available background colors
console.log(BACKGROUNDS.transparent); // { r: 255, g: 255, b: 255, alpha: 0 }
console.log(BACKGROUNDS.white); // { r: 255, g: 255, b: 255, alpha: 1 }
console.log(BACKGROUNDS.black); // { r: 0, g: 0, b: 0, alpha: 1 }
generateIcons(options)Generate PNG icons from an SVG file.
Parameters:
options (Object):
svgPath (string, required): Path to the SVG fileoutputDir (string, required): Output directory for generated iconsiconSizes (Array, optional): Array of {size, name} objects. Defaults to DEFAULT_ICON_SIZESquality (number, optional): PNG quality (1-100). Default: 95compressionLevel (number, optional): Compression level (0-9). Default: 9generateFavicon (boolean, optional): Generate additional favicon sizes. Default: truefaviconSizes (Array, optional): Array of favicon sizes. Default: [16, 32]verbose (boolean, optional): Enable verbose logging. Default: trueReturns: Promise
{
icons: [
{ size: 64, name: 'icon-64.png', path: './icons/icon-64.png' },
// ...
],
faviconSizes: [
{ size: 16, path: './icons/favicon-16.png' },
// ...
],
outputDir: './icons'
}
generateCustomIcons(svgPath, outputDir, customSizes, additionalOptions)Generate icons with custom sizes.
Parameters:
svgPath (string): Path to the SVG fileoutputDir (string): Output directorycustomSizes (Array): Array of {size, name} objectsadditionalOptions (Object, optional): Additional options (quality, compressionLevel, etc.)Returns: Promise (same as generateIcons)
The package generates the following icon sizes by default:
After generating your icons, add them to your HTML <head> section. See the complete example in examples/html-head-template.html.
<head>
<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="icon" type="image/png" sizes="32x32" href="/icons/favicon-32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/icons/favicon-16.png" />
<!-- Apple Touch Icons (iOS) -->
<link rel="apple-touch-icon" sizes="180x180" href="/icons/apple-touch-icon-180x180.png" />
<link rel="apple-touch-icon" sizes="152x152" href="/icons/apple-touch-icon-152x152.png" />
<link rel="apple-touch-icon" sizes="144x144" href="/icons/apple-touch-icon-144x144.png" />
<link rel="apple-touch-icon" sizes="120x120" href="/icons/apple-touch-icon-120x120.png" />
<link rel="apple-touch-icon" sizes="114x114" href="/icons/apple-touch-icon-114x114.png" />
<link rel="apple-touch-icon" sizes="76x76" href="/icons/apple-touch-icon-76x76.png" />
<link rel="apple-touch-icon" sizes="72x72" href="/icons/apple-touch-icon-72x72.png" />
<link rel="apple-touch-icon" sizes="60x60" href="/icons/apple-touch-icon-60x60.png" />
<link rel="apple-touch-icon" sizes="57x57" href="/icons/apple-touch-icon-57x57.png" />
<!-- Web App Manifest (PWA) -->
<link rel="manifest" href="/manifest.json" />
<meta name="theme-color" content="#ffffff" />
<!-- iOS Web App -->
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
<meta name="apple-mobile-web-app-title" content="Your App" />
</head>
Create a manifest.json file for Progressive Web App support. See examples/manifest.json for a complete example:
{
"name": "Your App Name",
"short_name": "App",
"icons": [
{
"src": "/icons/icon-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any maskable"
},
{
"src": "/icons/icon-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "any maskable"
}
],
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#ffffff"
}
# Clone the repository
git clone https://github.com/profullstack/favicon-generator.git
cd favicon-generator
# Install dependencies
pnpm install
# Run tests
pnpm test
# Run tests in watch mode
pnpm test:watch
# Run tests with coverage
pnpm test:coverage
# Lint code
pnpm lint
# Fix linting issues
pnpm lint:fix
# Format code
pnpm format
# Check formatting
pnpm format:check
MIT © profullstack
Contributions are welcome! Please feel free to submit a Pull Request.
If you encounter any issues or have questions, please file an issue on the GitHub repository.
See CHANGELOG.md for release history.
FAQs
Generate PNG icons from SVG for iOS and PWA compatibility
We found that @profullstack/favicon-generator demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.