Version 2.6 (in development)
============================

Released XXXX-XX-XX

* New features:

  - `json_pack()` and friends: Add format specifiers ``s%`` and ``+%``
    for a size_t string length.

  - `json_unpack()` and friends: Add format specifier ``s%`` for
    unpacking the string length along with the string itself.

  - Add length-aware string constructors `json_stringn()` and
    `json_stringn_nocheck()`, length-aware string mutators
    `json_string_setn()` and `json_string_setn_nocheck()`, and a
    function for getting string's length `json_string_length()`.

  - Support ``\u0000`` escapes in the decoder. The support can be
    enabled by using the ``JSON_ALLOW_NUL`` decoding flag.

* Bug fixes:

  - Some malformed ``\uNNNN`` escapes could crash the decoder with an
    assertion failure.

* Other changes:

  - ``\uNNNN`` escapes are now encoded in upper case for better
    readability.


Version 2.5
===========

Released 2013-09-19

* New features:

  - `json_pack()` and friends: Add format specifiers ``s#``, ``+`` and
    ``+#``.

  - Add ``JSON_DECODE_INT_AS_REAL`` decoding flag to treat all numbers
    as real in the decoder (#123).

  - Add `json_array_foreach()`, paralleling `json_object_foreach()`
    (#118).

* Bug fixes:

  - `json_dumps()` and friends: Don't crash if json is *NULL* and
    ``JSON_ENCODE_ANY`` is set.

  - Fix a theoretical integer overflow in `jsonp_strdup()`.

  - Fix `l_isxdigit()` macro (#97).

  - Fix an off-by-one error in `json_array_remove()`.

* Build:

  - Support CMake in addition to GNU Autotools (#106, #107, #112,
    #115, #120, #127).

  - Support building for Android (#109).

  - Don't use ``-Werror`` by default.

  - Support building and testing with VPATH (#93).

  - Fix compilation when ``NDEBUG`` is defined (#128)

* Tests:

  - Fix a refleak in ``test/bin/json_process.c``.

* Documentation:

  - Clarify the return value of `json_load_callback_t`.

  - Document how to circumvent problems with separate heaps on Windows.

  - Fix memory leaks and warnings in ``github_commits.c``.

  - Use `json_decref()` properly in tutorial.

* Other:

  - Make it possible to forward declare ``struct json_t``.


Version 2.4
===========

Released 2012-09-23

* New features:

  - Add `json_boolean()` macro that returns the JSON true or false
    value based on its argument (#86).

  - Add `json_load_callback()` that calls a callback function
    repeatedly to read the JSON input (#57).

  - Add JSON_ESCAPE_SLASH encoding flag to escape all occurences of
    ``/`` with ``\/``.

* Bug fixes:

  - Check for and reject NaN and Inf values for reals. Encoding these
    values resulted in invalid JSON.

  - Fix `json_real_set()` to return -1 on error.

* Build:

  - Jansson now builds on Windows with Visual Studio 2010, and
    includes solution and project files in ``win32/vs2010/``
    directory.

  - Fix build warnings (#77, #78).

  - Add ``-no-undefined`` to LDFLAGS (#90).

* Tests:

  - Fix the symbol exports test on Linux/PPC64 (#88).

* Documentation:

  - Fix typos (#73, #84).


Version 2.3.1
=============

Released 2012-04-20

* Build issues:

  - Only use ``long long`` if ``strtoll()`` is also available.

* Documentation:

  - Fix the names of library version constants in documentation. (#52)

  - Change the tutorial to use GitHub API v3. (#65)

* Tests:

  - Make some tests locale independent. (#51)

  - Distribute the library exports test in the tarball.

  - Make test run on shells that don't support the ``export FOO=bar``
    syntax.


Version 2.3
===========

Released 2012-01-27

* New features:

  - `json_unpack()` and friends: Add support for optional object keys
    with the ``{s?o}`` syntax.

  - Add `json_object_update_existing()` and
    `json_object_update_missing()`, for updating only existing keys or
    only adding missing keys to an object. (#37)

  - Add `json_object_foreach()` for more convenient iteration over
    objects. (#45, #46)

  - When decoding JSON, write the number of bytes that were read from
    input to ``error.position`` also on success. This is handy with
    ``JSON_DISABLE_EOF_CHECK``.

  - Add support for decoding any JSON value, not just arrays or
    objects. The support is enabled with the new ``JSON_DECODE_ANY``
    flag. Patch by Andrea Marchesini. (#4)

* Bug fixes

  - Avoid problems with object's serial number growing too big. (#40,
    #41)

  - Decoding functions now return NULL if the first argument is NULL.
    Patch by Andrea Marchesini.

  - Include ``jansson_config.h.win32`` in the distribution tarball.

  - Remove ``+`` and leading zeros from exponents in the encoder.
    (#39)

  - Make Jansson build and work on MinGW. (#39, #38)

* Documentation

  - Note that the same JSON values must not be encoded in parallel by
    separate threads. (#42)

  - Document MinGW support.


Version 2.2.1
=============

Released 2011-10-06

* Bug fixes:

  - Fix real number encoding and decoding under non-C locales. (#32)

  - Fix identifier decoding under non-UTF-8 locales. (#35)

  - `json_load_file()`: Open the input file in binary mode for maximum
    compatiblity.

* Documentation:

  - Clarify the lifecycle of the result of the ``s`` fromat of
    `json_unpack()`. (#31)

  - Add some portability info. (#36)

  - Little clarifications here and there.

* Other:

  - Some style fixes, issues detected by static analyzers.


Version 2.2
===========

Released 2011-09-03

* New features:

  - `json_dump_callback()`: Pass the encoder output to a callback
    function in chunks.

* Bug fixes:

  - `json_string_set()`: Check that target is a string and value is
    not NULL.

* Other:

  - Documentation typo fixes and clarifications.


Version 2.1
===========

Released 2011-06-10

* New features:

  - `json_loadb()`: Decode a string with a given size, useful if the
    string is not null terminated.

  - Add ``JSON_ENCODE_ANY`` encoding flag to allow encoding any JSON
    value. By default, only arrays and objects can be encoded. (#19)

  - Add ``JSON_REJECT_DUPLICATES`` decoding flag to issue a decoding
    error if any JSON object in the input contins duplicate keys. (#3)

  - Add ``JSON_DISABLE_EOF_CHECK`` decoding flag to stop decoding after a
    valid JSON input. This allows other data after the JSON data.

* Bug fixes:

  - Fix an additional memory leak when memory allocation fails in
    `json_object_set()` and friends.

  - Clear errno before calling `strtod()` for better portability. (#27)

* Building:

  - Avoid set-but-not-used warning/error in a test. (#20)

* Other:

  - Minor clarifications to documentation.


Version 2.0.1
=============

Released 2011-03-31

* Bug fixes:

  - Replace a few `malloc()` and `free()` calls with their
    counterparts that support custom memory management.

  - Fix object key hashing in json_unpack() strict checking mode.

  - Fix the parentheses in ``JANSSON_VERSION_HEX`` macro.

  - Fix `json_object_size()` return value.

  - Fix a few compilation issues.

* Portability:

  - Enhance portability of `va_copy()`.

  - Test framework portability enhancements.

* Documentation:

  - Distribute ``doc/upgrading.rst`` with the source tarball.

  - Build documentation in strict mode in ``make distcheck``.


Version 2.0
===========

Released 2011-02-28

This release is backwards incompatible with the 1.x release series.
See the chapter "Upgrading from older versions" in documentation for
details.

* Backwards incompatible changes:

  - Unify unsigned integer usage in the API: All occurences of
    unsigned int and unsigned long have been replaced with size_t.

  - Change JSON integer's underlying type to the widest signed integer
    type available, i.e. long long if it's supported, otherwise long.
    Add a typedef json_int_t that defines the type.

  - Change the maximum indentation depth to 31 spaces in encoder. This
    frees up bits from the flags parameter of encoding functions
    `json_dumpf()`, `json_dumps()` and `json_dump_file()`.

  - For future needs, add a flags parameter to all decoding functions
    `json_loadf()`, `json_loads()` and `json_load_file()`.

* New features

  - `json_pack()`, `json_pack_ex()`, `json_vpack_ex()`: Create JSON
    values based on a format string.

  - `json_unpack()`, `json_unpack_ex()`, `json_vunpack_ex()`: Simple
    value extraction and validation functionality based on a format
    string.

  - Add column, position and source fields to the ``json_error_t``
    struct.

  - Enhance error reporting in the decoder.

  - ``JANSSON_VERSION`` et al.: Preprocessor constants that define the
    library version.

  - `json_set_alloc_funcs()`: Set custom memory allocation functions.

* Fix many portability issues, especially on Windows.

* Configuration

  - Add file ``jansson_config.h`` that contains site specific
    configuration. It's created automatically by the configure script,
    or can be created by hand if the configure script cannot be used.
    The file ``jansson_config.h.win32`` can be used without
    modifications on Windows systems.

  - Add a section to documentation describing how to build Jansson on
    Windows.

  - Documentation now requires Sphinx 1.0 or newer.


Version 1.3
===========

Released 2010-06-13

* New functions:

  - `json_object_iter_set()`, `json_object_iter_set_new()`: Change
    object contents while iterating over it.

  - `json_object_iter_at()`: Return an iterator that points to a
    specific object item.

* New encoding flags:

  - ``JSON_PRESERVE_ORDER``: Preserve the insertion order of object
    keys.

* Bug fixes:

  - Fix an error that occured when an array or object was first
    encoded as empty, then populated with some data, and then
    re-encoded

  - Fix the situation like above, but when the first encoding resulted
    in an error

* Documentation:

  - Clarify the documentation on reference stealing, providing an
    example usage pattern


Version 1.2.1
=============

Released 2010-04-03

* Bug fixes:

  - Fix reference counting on ``true``, ``false`` and ``null``
  - Estimate real number underflows in decoder with 0.0 instead of
    issuing an error

* Portability:

  - Make ``int32_t`` available on all systems
  - Support compilers that don't have the ``inline`` keyword
  - Require Autoconf 2.60 (for ``int32_t``)

* Tests:

  - Print test names correctly when ``VERBOSE=1``
  - ``test/suites/api``: Fail when a test fails
  - Enhance tests for iterators
  - Enhance tests for decoding texts that contain null bytes

* Documentation:

  - Don't remove ``changes.rst`` in ``make clean``
  - Add a chapter on RFC conformance


Version 1.2
===========

Released 2010-01-21

* New functions:

  - `json_equal()`: Test whether two JSON values are equal
  - `json_copy()` and `json_deep_copy()`: Make shallow and deep copies
    of JSON values
  - Add a version of all functions taking a string argument that
    doesn't check for valid UTF-8: `json_string_nocheck()`,
    `json_string_set_nocheck()`, `json_object_set_nocheck()`,
    `json_object_set_new_nocheck()`

* New encoding flags:

  - ``JSON_SORT_KEYS``: Sort objects by key
  - ``JSON_ENSURE_ASCII``: Escape all non-ASCII Unicode characters
  - ``JSON_COMPACT``: Use a compact representation with all unneeded
    whitespace stripped

* Bug fixes:

  - Revise and unify whitespace usage in encoder: Add spaces between
    array and object items, never append newline to output.
  - Remove const qualifier from the ``json_t`` parameter in
    `json_string_set()`, `json_integer_set()` and `json_real_set`.
  - Use ``int32_t`` internally for representing Unicode code points
    (int is not enough on all platforms)

* Other changes:

  - Convert ``CHANGES`` (this file) to reStructured text and add it to
    HTML documentation
  - The test system has been refactored. Python is no longer required
    to run the tests.
  - Documentation can now be built by invoking ``make html``
  - Support for pkg-config


Version 1.1.3
=============

Released 2009-12-18

* Encode reals correctly, so that first encoding and then decoding a
  real always produces the same value
* Don't export private symbols in ``libjansson.so``


Version 1.1.2
=============

Released 2009-11-08

* Fix a bug where an error message was not produced if the input file
  could not be opened in `json_load_file()`
* Fix an assertion failure in decoder caused by a minus sign without a
  digit after it
* Remove an unneeded include of ``stdint.h`` in ``jansson.h``


Version 1.1.1
=============

Released 2009-10-26

* All documentation files were not distributed with v1.1; build
  documentation in make distcheck to prevent this in the future
* Fix v1.1 release date in ``CHANGES``


Version 1.1
===========

Released 2009-10-20

* API additions and improvements:

  - Extend array and object APIs
  - Add functions to modify integer, real and string values
  - Improve argument validation
  - Use unsigned int instead of ``uint32_t`` for encoding flags

* Enhance documentation

  - Add getting started guide and tutorial
  - Fix some typos
  - General clarifications and cleanup

* Check for integer and real overflows and underflows in decoder
* Make singleton values thread-safe (``true``, ``false`` and ``null``)
* Enhance circular reference handling
* Don't define ``-std=c99`` in ``AM_CFLAGS``
* Add C++ guards to ``jansson.h``
* Minor performance and portability improvements
* Expand test coverage


Version 1.0.4
=============

Released 2009-10-11

* Relax Autoconf version requirement to 2.59
* Make Jansson compile on platforms where plain ``char`` is unsigned
* Fix API tests for object


Version 1.0.3
=============

Released 2009-09-14

* Check for integer and real overflows and underflows in decoder
* Use the Python json module for tests, or simplejson if the json
  module is not found
* Distribute changelog (this file)


Version 1.0.2
=============

Released 2009-09-08

* Handle EOF correctly in decoder


Version 1.0.1
=============

Released 2009-09-04

* Fixed broken `json_is_boolean()`


Version 1.0
===========

Released 2009-08-25

* Initial release
