Snappy v1.1.9, May 4th 2021:

  * Performance improvements.

  * Google Test and Google Benchmark are now bundled in third_party/.

Snappy v1.1.8, January 15th 2020:

  * Small performance improvements.

  * Removed snappy::string alias for std::string.

  * Improved CMake configuration.

Snappy v1.1.7, August 24th 2017:

  * Improved CMake build support for 64-bit Linux distributions.

  * MSVC builds now use MSVC-specific intrinsics that map to clzll.

  * ARM64 (AArch64) builds use the code paths optimized for 64-bit processors.

Snappy v1.1.6, July 12th 2017:

This is a re-release of v1.1.5 with proper SONAME / SOVERSION values.

Snappy v1.1.5, June 28th 2017:

This release has broken SONAME / SOVERSION values. Users of snappy as a shared
library should avoid 1.1.5 and use 1.1.6 instead. SONAME / SOVERSION errors will
manifest as the dynamic library loader complaining that it cannot find snappy's
shared library file (libsnappy.so / libsnappy.dylib), or that the library it
found does not have the required version. 1.1.6 has the same code as 1.1.5, but
carries build configuration fixes for the issues above.

  * Add CMake build support. The autoconf build support is now deprecated, and
    will be removed in the next release.

  * Add AppVeyor configuration, for Windows CI coverage.

  * Small performance improvement on little-endian PowerPC.

  * Small performance improvement on LLVM with position-independent executables.

  * Fix a few issues with various build environments.

Snappy v1.1.4, January 25th 2017:

  * Fix a 1% performance regression when snappy is used in PIE executables.

  * Improve compression performance by 5%.

  * Improve decompression performance by 20%.

Snappy v1.1.3, July 6th 2015:

This is the first release to be done from GitHub, which means that
some minor things like the ChangeLog format has changed (git log
format instead of svn log).

  * Add support for Uncompress() from a Source to a Sink.

  * Various minor changes to improve MSVC support; in particular,
    the unit tests now compile and run under MSVC.


Snappy v1.1.2, February 28th 2014:

This is a maintenance release with no changes to the actual library
source code.

  * Stop distributing benchmark data files that have unclear
    or unsuitable licensing.

  * Add support for padding chunks in the framing format.


Snappy v1.1.1, October 15th 2013:

  * Add support for uncompressing to iovecs (scatter I/O).
    The bulk of this patch was contributed by Mohit Aron.

  * Speed up decompression by ~2%; much more so (~13-20%) on
    a few benchmarks on given compilers and CPUs.

  * Fix a few issues with MSVC compilation.

  * Support truncated test data in the benchmark.


Snappy v1.1.0, January 18th 2013:

  * Snappy now uses 64 kB block size instead of 32 kB. On average,
    this means it compresses about 3% denser (more so for some
    inputs), at the same or better speeds.

  * libsnappy no longer depends on iostream.

  * Some small performance improvements in compression on x86
    (0.5–1%).

  * Various portability fixes for ARM-based platforms, for MSVC,
    and for GNU/Hurd.


Snappy v1.0.5, February 24th 2012:

  * More speed improvements. Exactly how big will depend on
    the architecture:

    - 3–10% faster decompression for the base case (x86-64).

    - ARMv7 and higher can now use unaligned accesses,
      and will see about 30% faster decompression and
      20–40% faster compression.

    - 32-bit platforms (ARM and 32-bit x86) will see 2–5%
      faster compression.

    These are all cumulative (e.g., ARM gets all three speedups).

  * Fixed an issue where the unit test would crash on system
    with less than 256 MB address space available,
    e.g. some embedded platforms.

  * Added a framing format description, for use over e.g. HTTP,
    or for a command-line compressor. We do not have any
    implementations of this at the current point, but there seems
    to be enough of a general interest in the topic.
    Also make the format description slightly clearer.

  * Remove some compile-time warnings in -Wall
    (mostly signed/unsigned comparisons), for easier embedding
    into projects that use -Wall -Werror.


Snappy v1.0.4, September 15th 2011:

  * Speeded up the decompressor somewhat; typically about 2–8%
    for Core i7, in 64-bit mode (comparable for Opteron).
    Somewhat more for some tests, almost no gain for others.
  
  * Make Snappy compile on certain platforms it didn't before
    (Solaris with SunPro C++, HP-UX, AIX).

  * Correct some minor errors in the format description.


Snappy v1.0.3, June 2nd 2011:

  * Speeded up the decompressor somewhat; about 3-6% for Core 2,
    6-13% for Core i7, and 5-12% for Opteron (all in 64-bit mode).

  * Added compressed format documentation. This text is new,
    but an earlier version from Zeev Tarantov was used as reference.

  * Only link snappy_unittest against -lz and other autodetected
    libraries, not libsnappy.so (which doesn't need any such dependency).

  * Fixed some display issues in the microbenchmarks, one of which would
    frequently make the test crash on GNU/Hurd.


Snappy v1.0.2, April 29th 2011:

  * Relicense to a BSD-type license.

  * Added C bindings, contributed by Martin Gieseking.

  * More Win32 fixes, in particular for MSVC.

  * Replace geo.protodata with a newer version.

  * Fix timing inaccuracies in the unit test when comparing Snappy
    to other algorithms.


Snappy v1.0.1, March 25th 2011:

This is a maintenance release, mostly containing minor fixes.
There is no new functionality. The most important fixes include:

  * The COPYING file and all licensing headers now correctly state that
    Snappy is licensed under the Apache 2.0 license.

  * snappy_unittest should now compile natively under Windows,
    as well as on embedded systems with no mmap().

  * Various autotools nits have been fixed.


Snappy v1.0, March 17th 2011:

  * Initial version.
