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.
