diff --git a/.gitignore b/.gitignore
index 2c3dee5..cad89e8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/jansson-2.13.1.tar.bz2
+SOURCES/jansson-2.14.tar.bz2
diff --git a/.jansson.metadata b/.jansson.metadata
index 6b96d4b..81e487d 100644
--- a/.jansson.metadata
+++ b/.jansson.metadata
@@ -1 +1 @@
-e8316ffe9c603efb9c52a61ed3c82ccd5b0b93a7 SOURCES/jansson-2.13.1.tar.bz2
+a85a87d4cd9a14a081e8e49cb6a2b54bde4fd6b9 SOURCES/jansson-2.14.tar.bz2
diff --git a/SOURCES/Fix-the-check-exports-tests-for-versioned-symbols.patch b/SOURCES/Fix-the-check-exports-tests-for-versioned-symbols.patch
new file mode 100644
index 0000000..717daa9
--- /dev/null
+++ b/SOURCES/Fix-the-check-exports-tests-for-versioned-symbols.patch
@@ -0,0 +1,25 @@
+From 0677666f65b988b2dd44d02966a08fea490d5883 Mon Sep 17 00:00:00 2001
+From: Petri Lehtinen <petri@digip.org>
+Date: Thu, 9 Sep 2021 21:53:11 +0300
+Subject: [PATCH] Fix the check-exports tests for versioned symbols
+
+---
+ test/suites/api/check-exports | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/test/suites/api/check-exports b/test/suites/api/check-exports
+index 2b6b3c7..5c82064 100755
+--- a/test/suites/api/check-exports
++++ b/test/suites/api/check-exports
+@@ -15,7 +15,7 @@ grep 'json_\|jansson_' $top_srcdir/src/jansson.def \
+ nm -D $SOFILE >/dev/null >$test_log/symbols 2>/dev/null \
+     || exit 77  # Skip if "nm -D" doesn't seem to work
+ 
+-grep ' [DT] ' $test_log/symbols | cut -d' ' -f3 | grep -v '^_' | sort >$test_log/output
++grep ' [DT] ' $test_log/symbols | cut -d' ' -f3 | grep -v '^_' | sed 's/@@libjansson.*//' | sort >$test_log/output
+ 
+ if ! cmp -s $test_log/exports $test_log/output; then
+     diff -u $test_log/exports $test_log/output >&2
+-- 
+2.27.0
+
diff --git a/SOURCES/fix-docs-build-with-sphinx-3.patch b/SOURCES/fix-docs-build-with-sphinx-3.patch
deleted file mode 100644
index 1d64ab3..0000000
--- a/SOURCES/fix-docs-build-with-sphinx-3.patch
+++ /dev/null
@@ -1,240 +0,0 @@
-diff --git a/CHANGES b/CHANGES
-index a374a86..256fde1 100644
---- a/CHANGES
-+++ b/CHANGES
-@@ -8,7 +8,7 @@ Released 2020-05-07
-   - Include `jansson_version_str()` and `jansson_version_cmp()` in
-     shared library. (#534)
- 
--  - Include `scripts/` in tarball. (#535)
-+  - Include ``scripts/`` in tarball. (#535)
- 
- 
- Version 2.13
-@@ -127,7 +127,7 @@ Released 2018-02-09
- 
-   - Work around gcc's -Wimplicit-fallthrough.
- 
--  - Fix CMake detection of `sys/types.h` header (#375).
-+  - Fix CMake detection of ``sys/types.h`` header (#375).
- 
-   - Fix `jansson.pc` generated by CMake to be more consistent with the one
-     generated using GNU Autotools (#368).
-diff --git a/doc/apiref.rst b/doc/apiref.rst
-index c3a814f..94c5726 100644
---- a/doc/apiref.rst
-+++ b/doc/apiref.rst
-@@ -145,33 +145,33 @@ Type
- .. function:: int json_typeof(const json_t *json)
- 
-    Return the type of the JSON value (a :type:`json_type` cast to
--   :type:`int`). *json* MUST NOT be *NULL*. This function is actually
-+   ``int``). *json* MUST NOT be *NULL*. This function is actually
-    implemented as a macro for speed.
- 
--.. function:: json_is_object(const json_t *json)
--               json_is_array(const json_t *json)
--               json_is_string(const json_t *json)
--               json_is_integer(const json_t *json)
--               json_is_real(const json_t *json)
--               json_is_true(const json_t *json)
--               json_is_false(const json_t *json)
--               json_is_null(const json_t *json)
-+.. function:: int json_is_object(const json_t *json)
-+              int json_is_array(const json_t *json)
-+              int json_is_string(const json_t *json)
-+              int json_is_integer(const json_t *json)
-+              int json_is_real(const json_t *json)
-+              int json_is_true(const json_t *json)
-+              int json_is_false(const json_t *json)
-+              int json_is_null(const json_t *json)
- 
-    These functions (actually macros) return true (non-zero) for values
-    of the given type, and false (zero) for values of other types and
-    for *NULL*.
- 
--.. function:: json_is_number(const json_t *json)
-+.. function:: int json_is_number(const json_t *json)
- 
-    Returns true for values of types ``JSON_INTEGER`` and
-    ``JSON_REAL``, and false for other types and for *NULL*.
- 
--.. function:: json_is_boolean(const json_t *json)
-+.. function:: int json_is_boolean(const json_t *json)
- 
-    Returns true for types ``JSON_TRUE`` and ``JSON_FALSE``, and false
-    for values of other types and for *NULL*.
- 
--.. function:: json_boolean_value(const json_t *json)
-+.. function:: int json_boolean_value(const json_t *json)
- 
-    Alias of :func:`json_is_true()`, i.e. returns 1 for ``JSON_TRUE``
-    and 0 otherwise.
-@@ -594,7 +594,7 @@ A JSON array is an ordered collection of other JSON values.
-    Appends all elements in *other_array* to the end of *array*.
-    Returns 0 on success and -1 on error.
- 
--.. function:: json_array_foreach(array, index, value)
-+.. function:: void json_array_foreach(array, index, value)
- 
-    Iterate over every element of ``array``, running the block
-    of code that follows each time with the proper values set to
-@@ -732,11 +732,11 @@ allowed in object keys.
-    recursively merged with the corresponding values in *object* if they are also
-    objects, instead of overwriting them. Returns 0 on success or -1 on error.
- 
--.. function:: json_object_foreach(object, key, value)
-+.. function:: void json_object_foreach(object, key, value)
- 
-    Iterate over every key-value pair of ``object``, running the block
-    of code that follows each time with the proper values set to
--   variables ``key`` and ``value``, of types :type:`const char *` and
-+   variables ``key`` and ``value``, of types ``const char *`` and
-    :type:`json_t *` respectively. Example::
- 
-        /* obj is a JSON object */
-@@ -764,7 +764,7 @@ allowed in object keys.
-    .. versionadded:: 2.3
- 
- 
--.. function:: json_object_foreach_safe(object, tmp, key, value)
-+.. function:: void json_object_foreach_safe(object, tmp, key, value)
- 
-    Like :func:`json_object_foreach()`, but it's safe to call
-    ``json_object_del(object, key)`` during iteration. You need to pass
-@@ -1488,17 +1488,17 @@ arguments.
-     Output a JSON null value. No argument is consumed.
- 
- ``b`` (boolean) [int]
--    Convert a C :type:`int` to JSON boolean value. Zero is converted
-+    Convert a C ``int`` to JSON boolean value. Zero is converted
-     to ``false`` and non-zero to ``true``.
- 
- ``i`` (integer) [int]
--    Convert a C :type:`int` to JSON integer.
-+    Convert a C ``int`` to JSON integer.
- 
- ``I`` (integer) [json_int_t]
-     Convert a C :type:`json_int_t` to JSON integer.
- 
- ``f`` (real) [double]
--    Convert a C :type:`double` to JSON real.
-+    Convert a C ``double`` to JSON real.
- 
- ``o`` (any value) [json_t \*]
-     Output any given JSON value as-is. If the value is added to an
-@@ -1625,20 +1625,20 @@ type whose address should be passed.
-     Expect a JSON null value. Nothing is extracted.
- 
- ``b`` (boolean) [int]
--    Convert a JSON boolean value to a C :type:`int`, so that ``true``
-+    Convert a JSON boolean value to a C ``int``, so that ``true``
-     is converted to 1 and ``false`` to 0.
- 
- ``i`` (integer) [int]
--    Convert a JSON integer to C :type:`int`.
-+    Convert a JSON integer to C ``int``.
- 
- ``I`` (integer) [json_int_t]
-     Convert a JSON integer to C :type:`json_int_t`.
- 
- ``f`` (real) [double]
--    Convert a JSON real to C :type:`double`.
-+    Convert a JSON real to C ``double``.
- 
- ``F`` (integer or real) [double]
--    Convert a JSON number (integer or real) to C :type:`double`.
-+    Convert a JSON number (integer or real) to C ``double``.
- 
- ``o`` (any value) [json_t \*]
-     Store a JSON value with no conversion to a :type:`json_t` pointer.
-diff --git a/doc/ext/refcounting.py b/doc/ext/refcounting.py
-index bba2684..e72c481 100644
---- a/doc/ext/refcounting.py
-+++ b/doc/ext/refcounting.py
-@@ -24,8 +24,8 @@
- """
- 
- from docutils import nodes
-+from docutils.parsers.rst import Directive
- 
--class refcounting(nodes.emphasis): pass
- 
- def visit(self, node):
-     self.visit_emphasis(node)
-@@ -40,16 +40,25 @@ def html_depart(self, node):
-     self.body.append('</em>')
- 
- 
--def refcounting_directive(name, arguments, options, content, lineno,
--                   content_offset, block_text, state, state_machine):
--    if arguments[0] == 'borrow':
--        text = 'Return value: Borrowed reference.'
--    elif arguments[0] == 'new':
--        text = 'Return value: New reference.'
--    else:
--        raise Error('Valid arguments: new, borrow')
-+class refcounting(nodes.emphasis):
-+    pass
-+
-+class refcounting_directive(Directive):
-+    has_content = False
-+    required_arguments = 1
-+    optional_arguments = 0
-+    final_argument_whitespace = False
-+
-+    def run(self):
-+        if self.arguments[0] == 'borrow':
-+            text = 'Return value: Borrowed reference.'
-+        elif self.arguments[0] == 'new':
-+            text = 'Return value: New reference.'
-+        else:
-+            raise Error('Valid arguments: new, borrow')
-+
-+        return [refcounting(text, text)]
- 
--    return [refcounting(text, text)]
- 
- def setup(app):
-     app.add_node(refcounting,
-@@ -57,4 +66,4 @@ def setup(app):
-                  latex=(visit, depart),
-                  text=(visit, depart),
-                  man=(visit, depart))
--    app.add_directive('refcounting', refcounting_directive, 0, (1, 0, 0))
-+    app.add_directive('refcounting', refcounting_directive)
-diff --git a/doc/upgrading.rst b/doc/upgrading.rst
-index 9b49046..94ff7de 100644
---- a/doc/upgrading.rst
-+++ b/doc/upgrading.rst
-@@ -47,13 +47,13 @@ List of Incompatible Changes
- 
- **Underlying type of JSON integers**
-     The underlying C type of JSON integers has been changed from
--    :type:`int` to the widest available signed integer type, i.e.
--    :type:`long long` or :type:`long`, depending on whether
--    :type:`long long` is supported on your system or not. This makes
-+    ``int`` to the widest available signed integer type, i.e.
-+    ``long long`` or ``long``, depending on whether
-+    ``long long`` is supported on your system or not. This makes
-     the whole 64-bit integer range available on most modern systems.
- 
-     ``jansson.h`` has a typedef :type:`json_int_t` to the underlying
--    integer type. :type:`int` should still be used in most cases when
-+    integer type. ``int`` should still be used in most cases when
-     dealing with smallish JSON integers, as the compiler handles
-     implicit type coercion. Only when the full 64-bit range is needed,
-     :type:`json_int_t` should be explicitly used.
-@@ -69,8 +69,8 @@ List of Incompatible Changes
- 
- **Unsigned integers in API functions**
-     Version 2.0 unifies unsigned integer usage in the API. All uses of
--    :type:`unsigned int` and :type:`unsigned long` have been replaced
--    with :type:`size_t`. This includes flags, container sizes, etc.
-+    ``unsigned int`` and ``unsigned long`` have been replaced
-+    with ``size_t``. This includes flags, container sizes, etc.
-     This should not require source code changes, as both
--    :type:`unsigned int` and :type:`unsigned long` are usually
--    compatible with :type:`size_t`.
-+    ``unsigned int`` and ``unsigned long`` are usually
-+    compatible with ``size_t``.
diff --git a/SPECS/jansson.spec b/SPECS/jansson.spec
index 49f8ea2..34725b3 100644
--- a/SPECS/jansson.spec
+++ b/SPECS/jansson.spec
@@ -1,15 +1,13 @@
 Name:		jansson
-Version:	2.13.1
-Release:	4%{?dist}
+Version:	2.14
+Release:	1%{?dist}
 Summary:	C library for encoding, decoding and manipulating JSON data
 
 License:	MIT
 URL:		http://www.digip.org/jansson/
-Source0:	http://www.digip.org/jansson/releases/jansson-%{version}.tar.bz2
+Source0:	https://github.com/akheron/jansson/releases/download/v%{version}/jansson-%{version}.tar.bz2
 
-# Fix docs build failures with Sphinx 3
-# Resolved upstream: https://github.com/akheron/jansson/pull/543
-Patch0:     fix-docs-build-with-sphinx-3.patch
+Patch0:		Fix-the-check-exports-tests-for-versioned-symbols.patch
 
 BuildRequires:	gcc
 BuildRequires:	python3-sphinx
@@ -67,6 +65,10 @@ rm "$RPM_BUILD_ROOT%{_libdir}"/*.la
 %doc doc/_build/html/*
 
 %changelog
+* Mon Nov 15 2021 Xin Long <lxin@redhat.com> - 2.14-1
+- Rebase to 2.14
+  Related: rhbz#2001066
+
 * Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 2.13.1-4
 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
   Related: rhbz#1991688