Choose a version:
14% The original file has 1038340 bytes (1,014.0k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 145234 bytes (141.8k, 14%).

After GZIP compression these minified files vary in size:
Boot
  59267 bytes (57.9k)
CDN
cdnjs
  52000 bytes (50.8k)
CDN
gzip -6 (default)
  51668 bytes (50.5k)
local copy
unpkg
  51660 bytes (50.4k)
CDN
Google
  51609 bytes (50.4k)
CDN
gzip -9
  51565 bytes (50.4k)
local copy
jsdelivr
  51551 bytes (50.3k)
CDN
libdeflate -12
  49952 bytes (48.8k)
local copy
7zip -mx=9 -tgzip
  49942 bytes (48.8k)
local copy
kzip -s0 -rn -b1
  49919 bytes (48.7k)
local copy
zultra
  49897 bytes (48.7k)
local copy
pigz -11 -n
  49889 bytes (48.7k)
local copy
Zopfli
  49797 bytes (48.6k)
local copy
Zopfli (defluff)
  49796 bytes (48.6k)
local copy

perma-link to the smallest file on my server:
http://minime.stephan-brumme.com/files/angularjs/angular-1.4.1.min.js (or via HTTPS)

You will automatically get the smallest AngularJS 1.4.1 file, ETag caching is available and
if your browser doesn't support GZIP decompression then the uncompressed version will be sent.

Currently best Zopfli settings

Save 1754 bytes by using my AngularJS 1.4.1 Zopfli version instead of the best available CDN (3.52% smaller than jsdelivr, 49797 vs. 51551 bytes):
You can use my super-compressed files for whatever purpose you like as long as you respect the library's original license agreement.
There are no restrictions from my side - but please avoid hot-linking if you run a high-traffic website.

These command-line settings yielded the best compression ratio so far (Linux version of zopfli-krzymod):
zopfli --i100000 --mb8 --mls4 --bsr15 --lazy --ohh

(found September 28, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 4  --mls4
block splitting recursion 15  --bsr15
lazy matching in LZ77 yes  --lazy
optimized Huffman headers yes  --ohh
initial random W for iterations 1  --rw1
initial random Z for iterations 2  --rz2

Even Smaller Files Thanks To Defluff

Zopfli's output can be further optimized by the defluff tool.
In this particular case, defluff saves 1 more byte (49796 bytes).

Verify file integrity

After decompression, my uncompressed files are identical to the original ones:

MD5:
curl --silent --compressed https://code.angularjs.org/1.4.1/angular.min.js --location | md5sum
adfa9ffc442e637cfc0dc294321968f0  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-1.4.1.min.zopfli.js.gz | md5sum
adfa9ffc442e637cfc0dc294321968f0  -

SHA1:
curl --silent --compressed https://code.angularjs.org/1.4.1/angular.min.js --location | sha1sum
58681a9153bd9f657df542a6e7a97eb0d3648384  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-1.4.1.min.zopfli.js.gz | sha1sum
58681a9153bd9f657df542a6e7a97eb0d3648384  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 59267 bytes adfa9ffc442e637cfc0dc294321968f0 June 18, 2015 @ 13:59
cdnjs 52000 bytes adfa9ffc442e637cfc0dc294321968f0 June 18, 2015 @ 08:15
unpkg 51660 bytes adfa9ffc442e637cfc0dc294321968f0 July 11, 2016 @ 15:53
Google 51609 bytes adfa9ffc442e637cfc0dc294321968f0 June 16, 2015 @ 21:42
jsdelivr 51551 bytes adfa9ffc442e637cfc0dc294321968f0 June 29, 2015 @ 01:24

Note: only the MD5 hashes are shown to keep things simple.

Other Versions

Available AngularJS versions at minime.stephan-brumme.com:

1.8.2, 1.8.1, 1.8.0,
1.7.9, 1.7.8, 1.7.7, 1.7.6, 1.7.5, 1.7.4, 1.7.3, 1.7.2, 1.7.1, 1.7.0,
1.6.10, 1.6.9, 1.6.8, 1.6.7, 1.6.6, 1.6.5, 1.6.4, 1.6.3, 1.6.2, 1.6.1, 1.6.0,
1.5.11, 1.5.10, 1.5.9, 1.5.8, 1.5.7, 1.5.6, 1.5.5, 1.5.4, 1.5.3, 1.5.2, 1.5.1, 1.5.0,
1.4.14, 1.4.13, 1.4.12, 1.4.11, 1.4.10, 1.4.9, 1.4.8, 1.4.7, 1.4.6, 1.4.5, 1.4.4, 1.4.3, 1.4.2, 1.4.1, 1.4.0,
1.3.20, 1.3.19, 1.3.18, 1.3.17, 1.3.16, 1.3.15, 1.3.14, 1.3.13, 1.3.12, 1.3.11, 1.3.10, 1.3.9, 1.3.8, 1.3.7, 1.3.6, 1.3.5, 1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0,
1.2.32, 1.2.31, 1.2.30, 1.2.29, 1.2.28, 1.2.27, 1.2.26, 1.2.25, 1.2.24, 1.2.23, 1.2.22, 1.2.21, 1.2.20, 1.2.19, 1.2.18, 1.2.17, 1.2.16, 1.2.15, 1.2.14, 1.2.13, 1.2.12, 1.2.11, 1.2.10, 1.2.9, 1.2.8, 1.2.7, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0,
1.1.5, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0,
1.0.8, 1.0.7, 1.0.6, 1.0.5, 1.0.4, 1.0.3, 1.0.2, 1.0.1, 1.0.0,
0.10.6, 0.10.5, 0.10.4, 0.10.3, 0.10.2, 0.10.1, 0.10.0,
0.9.19, 0.9.18, 0.9.17, 0.9.16, 0.9.15, 0.9.14, 0.9.13, 0.9.12, 0.9.11, 0.9.10, 0.9.9, 0.9.8, 0.9.7, 0.9.6, 0.9.5, 0.9.4, 0.9.3, 0.9.2, 0.9.1, 0.9.0

The project site contains an overview how well these versions were compressed.
Other interesting projects are BackboneJS, Bootstrap, D3, Dojo, Ember, jQuery, Knockout, lodash, React, Socket.IO, ThreeJS, UnderscoreJS and Vue.

Changelog

Best Zopfli parameters so far:
Size Improvement Parameters Found
49797 bytes -5 bytes zopfli --i100000 --mls4 --bsr15 --lazy --ohh September 28, 2015 @ 06:28
49802 bytes -1 byte zopfli --i10000 --mls4 --bsr14 --lazy --ohh September 27, 2015 @ 07:13
49803 bytes -3 bytes zopfli --i10000 --mls4 --bsr15 --lazy --ohh September 27, 2015 @ 06:31
49806 bytes -4 bytes zopfli --i1000 --mls4 --bsr15 --lazy --ohh September 21, 2015 @ 14:32
49810 bytes -5 bytes zopfli --i10000 --mls16384 --bsr7 --lazy --ohh September 18, 2015 @ 02:11
49815 bytes -8 bytes zopfli --i1000 --mls16384 --bsr7 --lazy --ohh September 11, 2015 @ 18:10
49823 bytes -6 bytes zopfli --i10000 --mls1024 --bsr9 --lazy --ohh September 8, 2015 @ 03:17
49829 bytes -2 bytes zopfli --i10000 --mls512 --bsr9 --lazy --ohh September 8, 2015 @ 03:09
49831 bytes -1 byte zopfli --i1000 --mls4096 --bsr14 --lazy --ohh September 7, 2015 @ 17:31
49832 bytes -1 byte zopfli --i1000 --mls2048 --bsr10 --lazy --ohh September 7, 2015 @ 17:29
49833 bytes -3 bytes zopfli --i1000 --mls2048 --bsr4 --lazy --ohh September 7, 2015 @ 17:29
49836 bytes -1 byte zopfli --i1000 --mls1024 --bsr11 --lazy --ohh September 7, 2015 @ 17:28
49837 bytes -1 byte zopfli --i1000 --mls1024 --bsr10 --lazy --ohh September 7, 2015 @ 17:28
49838 bytes -1 byte zopfli --i1000 --mls512 --bsr13 --lazy --ohh September 7, 2015 @ 17:28
49839 bytes -5 bytes zopfli --i1000 --mls512 --bsr10 --lazy --ohh September 7, 2015 @ 17:28
49844 bytes zopfli --i100 --mls1024 --bsr11 --lazy --ohh September 7, 2015 @ 16:22

If there are multiple parameter sets yielding the same compressed size, only the first one found is shown.

Most recent activity on July 20, 2020 @ 12:43.

Heatmaps

This Zopfli heatmap visualizes how compression changes when modifying the --bsr and --mls parameter.
Cell's contents is the best filesize achieved (in bytes, hover with mouse over cells to see number of iterations).

Good parameters are green, bad are red. The best and worst are bold as well.
The brightness of the blue background color indicates how many iterations were processed:
10,000 or 100,000.
bsr \ mls
2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
bsr \ mls
2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
49861 49860 49859 49857 49860 49859 49862 49861 49862 49859 49861 49859 49857 49845 49851
49825 49839 49839 49844 49846 49838 49843 49837 49839 49825 49829 49829 49845 49828 49840
49839 49841 49836 49838 49843 49842 49841 49839 49844 49838 49829 49833 49843 49844 49838
49834 49816 49818 49821 49841 49843 49843 49838 49838 49835 49842 49846 49830 49810 49841
49833 49817 49836 49817 49838 49840 49843 49838 49843 49836 49843 49842 49845 49824 49841
49819 49827 49840 49840 49849 49842 49836 49838 49829 49823 49834 49832 49845 49834 49840
49841 49846 49840 49842 49840 49842 49843 49837 49836 49830 49830 49829 49844 49832 49837
49833 49823 49824 49821 49839 49842 49843 49838 49843 49826 49833 49833 49832 49825 49841
49841 49835 49817 49845 49845 49843 49833 49837 49836 49825 49829 49846 49843 49832 49839
49839 49843 49819 49843 49844 49841 49841 49833 49834 49825 49833 49832 49830 49812 49840
49816 49799 49821 49838 49839 49838 49841 49838 49843 49828 49833 49828 49831 49824 49838
49834 49797 49818 49836 49840 49844 49841 49838 49843 49827 49833 49835 49832 49814 49845
49835 49818 49811 49823 49843 49843 49844 49829 49843 49830 49833 49845 49832 49813 49840
49833 49816 49818 49838 49840 49842 49842 49837 49844 49829 49834 49842 49830 49810 49839
49815 49815 49838 49822 49836 49838 49843 49838 49843 49829 49830 49836 49843 49810 49839
49835 49800 49817 49821 49844 49841 49842 49839 49836 49829 49829 49846 49830 49813 49841
49832 49817 49817 49820 49818 49842 49844 49833 49843 49826 49829 49829 49830 49824 49838
49822 49798 49818 49836 49844 49833 49843 49837 49840 49825 49829 49845 49830 49814 49838
49823 49835 49806 49820 49838 49844 49843 49838 49835 49824 49830 49832 49832 49825 49841
49835 49815 49838 49825 49839 49842 49843 49837 49843 49829 49829 49833 49832 49824 49837
49840 49815 49818 49840 49834 49838 49839 49839 49834 49823 49834 49846 49832 49812 49841
49841 49818 49843 49839 49844 49841 49834 49837 49836 49842 49834 49846 49830 49809 49839
49835 49797 49820 49822 49842 49842 49843 49837 49843 49829 49834 49829 49832 49814 49839

Due to the Monte Carlo design of my search algorithm, not all parameters have reached the same number of iterations yet:
Iterations Min. Bytes Reduction Coverage
100 49824 bytes 100%
1,000 49806 bytes -18 bytes 100%
10,000 49802 bytes -4 bytes 100%
100,000 49797 bytes -5 bytes 1.45%
1,000,000
10,000,000

KZIP has far less options available for tuning/optimization. I only played around with the number of blocks (parameter -n):
Blocks Min. Bytes Compared To Best Zopfli Compared To Best KZIP
49933 bytes +136 bytes (+0.27%) +14 bytes
49919 bytes +122 bytes (+0.24%)
49937 bytes +140 bytes (+0.28%) +18 bytes
49954 bytes +157 bytes (+0.32%) +35 bytes
49966 bytes +169 bytes (+0.34%) +47 bytes
49966 bytes +169 bytes (+0.34%) +47 bytes
49991 bytes +194 bytes (+0.39%) +72 bytes
49969 bytes +172 bytes (+0.35%) +50 bytes
49961 bytes +164 bytes (+0.33%) +42 bytes

Non-DEFLATE Algorithms

Archivers based on completely different compression algorithms often produce superior results.
Unfortunately, browsers only support gzip compression at the moment.
However, support for Brotli is constantly growing - but your browser doesn't support it.
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 39008 bytes -10789 bytes (-21.67%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41079 bytes -8718 bytes (-17.51%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42199 bytes -7598 bytes (-15.26%)
Brotli (Wikipedia) brotli brotli -q 11 45456 bytes -4341 bytes (-8.72%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46329 bytes -3468 bytes (-6.96%)
LZMA2 (Wikipedia) xz xz -9 46872 bytes -2925 bytes (-5.87%)
Zstandard (Wikipedia) zstd zstd -19 48249 bytes -1548 bytes (-3.11%)

Detailled Analysis

I wrote a DEFLATE decoder in Javascript. Click the button below to start a client-side analysis of the smallest gzipped files (may take a second):


Notes: pigz is a fast open source multi-threaded implementation of gzip written by one of the original authors of gzip.
However, when using compression level 11, pigz actually switches to the slower Zopfli algorithm and isn't multi-threaded anymore.
KrzyMOD's extensions to Zopfli offer the highest level of configuration and is therefore used for my brute-force search.
Ken Silverman wrote the closed-source KZIP compression program and Jonathon Fowler ported it to Linux.
Defluff was created by Joachim Henke; DeflOpt is a tool by Ben Jos Walbeehm.

website made by Stephan Brumme in 2015 and still improving in 2024.
all timestamps are displayed in central european time. see my changelog.
no flash, not even images or external css files - and everything squeezed into a single html file.
which was handsomely compressed before releasing it into the wild internet - obviously.

please visit my homepage and my blog, too.
email: minime (at) stephan-brumme.com

All trademarks are property of their respective owners. You know, the boring legal stuff.