diff --git a/app.js b/app.js
index eb7ddfde10..8b506dc02a 100644
--- a/app.js
+++ b/app.js
@@ -24,6 +24,7 @@
 	nconf.argv().env();
 
 	var fs = require('fs'),
+		async = require('async'),
 		winston = require('winston'),
 		pkg = require('./package.json'),
 		path = require('path'),
@@ -85,17 +86,44 @@
 			'/src/jquery.form.js',
 			'/src/utils.js'
 		],
-			minified;
+			minified, mtime;
 		toMinify = toMinify.map(function (jsPath) {
 			return path.join(__dirname + '/public', jsPath);
 		});
-		minified = uglifyjs.minify(toMinify);
-		fs.writeFile(path.join(__dirname, '/public/src', 'nodebb.min.js'), minified.code, function (err) {
-			if (!err) {
-				winston.info('Minified client-side libraries');
+		async.parallel({
+			mtime: function (next) {
+				async.map(toMinify, fs.stat, function (err, stats) {
+					async.reduce(stats, 0, function (memo, item, callback) {
+						mtime = +new Date(item.mtime);
+						callback(null, mtime > memo ? mtime : memo);
+					}, next);
+				});
+			},
+			minFile: function (next) {
+				var minFile = path.join(__dirname, 'public/src/nodebb.min.js');
+				if (!fs.existsSync(minFile)) {
+					winston.warn('No minified client-side library found');
+					return next(null, 0);
+				}
+
+				fs.stat(minFile, function (err, stat) {
+					next(err, +new Date(stat.mtime));
+				});
+			}
+		}, function (err, results) {
+			if (results.minFile > results.mtime) {
+				winston.info('No changes to client-side libraries -- skipping minification');
 			} else {
-				winston.error('Problem minifying client-side libraries, exiting.');
-				process.exit();
+				winston.info('Minifying client-side libraries');
+				minified = uglifyjs.minify(toMinify);
+				fs.writeFile(path.join(__dirname, '/public/src', 'nodebb.min.js'), minified.code, function (err) {
+					if (!err) {
+						winston.info('Minified client-side libraries');
+					} else {
+						winston.error('Problem minifying client-side libraries, exiting.');
+						process.exit();
+					}
+				});
 			}
 		});