Home » Javascript » How to set custom favicon in Express?

How to set custom favicon in Express?

Posted by: admin November 29, 2017 Leave a comment


I recently started working in Node.js and in the app.js file there is this line:


Now, how do I set up my own custom favicon.ico?


In Express 4

Install the favicon middleware and then do:

var favicon = require('serve-favicon');

app.use(favicon(__dirname + '/public/images/favicon.ico'));

Or better, using the path module:


(note that this solution will work in express 3 apps as well)

In Express 3

According to the API, .favicon accepts a location parameter:


Most of the time, you might want this (as vsync suggested):

app.use(express.favicon(__dirname + '/public/images/favicon.ico'));

Or better yet, use the path module (as Druska suggested):

app.use(express.favicon(path.join(__dirname, 'public','images','favicon.ico'))); 


smiley favicon to prevent error:

 //const fs = require('fs'); 
 //const favicon = fs.readFileSync(__dirname+'/public/favicon.ico'); // read file
 app.get("/favicon.ico", function(req, res) {
  res.statusCode = 200;
  res.setHeader('Content-Length', favicon.length);
  res.setHeader('Content-Type', 'image/x-icon');
  res.setHeader("Cache-Control", "public, max-age=2592000");                // expiers after a month
  res.setHeader("Expires", new Date(Date.now() + 2592000000).toUTCString());

to change icon in code above

make an icon maybe here: http://www.favicon.cc/ or here :http://favicon-generator.org

convert it to base64 maybe here: http://base64converter.com/

then replace the icon base 64 value

general information how to create a personalized fav icon

icons are made using photoshop or inkscape, maybe inkscape then photoshop for vibrance and color correction (in image->adjustments menu).

for quick icon goto http://www.clker.com/ and pick some Vector Clip Arts, and download as svg.
then bring it to inkscape (https://inkscape.org/) and change colors or delete parts, maybe add something from another vector clipart image, then to export select the parts to export and click file>export, pick size like 16×16 for favicon or 32×32. for further edit 128×128 or 256×256. ico package can have several icon sizes inside. it can have along with 16×16 pixel favicon a high quality icons for link for the website.

then maybe enhance the image in photoshop. like vibrance, bevel effect, round mask, anything.

then upload this image to one of the websites that generate favicons.
there are also programs for windows for editing icons like https://sourceforge.net/projects/variicons/ .

to add the favicon to website. just put the favicon.ico as a file in the root folder of the domain. for example in node.js in public folder that contains the static files. it doesn’t have to be anything special like code above just a simple file.


No extra middlewares required. Just use:

app.use('/favicon.ico', express.static('images/favicon.ico'));

app.use(express.favicon(__dirname + '/public/images/favicon.ico'));

I had it working locally without the __dirname + but couldn’t get it working on my deployed server.


If you are using Express > 4.0, you could go for serve-favicon


No need for custom middleware?! In express:

 //you probably have something like this already    
app.use("/public", express.static('public')); 

Then put your favicon in public and add the following line in your html’s head:

<link rel="icon" href="/public/favicon.ico">


Install modules serve-favicon and path from npm, update index.js accordingly.

//import packages
var favicon = require('serve-favicon'), path = require("path");
//use favicon icon path to access in application.


The code listed below works:

var favicon = require('serve-favicon');

app.use(favicon(__dirname + '/public/images/favicon.ico'));

Just make sure to refresh your browser or clear your cache.