Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 37 additions & 86 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,121 +16,72 @@ serialization and deserialization to and from strings. It can also preserve
existing comment in deserialization/serialization steps, making it a convenient
format to store user input files.

## Documentation
## Project Status

[JsonCpp documentation][JsonCpp-documentation] is generated using [Doxygen][].
JsonCpp is a mature project in maintenance mode. Our priority is providing a stable,
reliable JSON library for the long tail of C++ development.

[JsonCpp-documentation]: http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html
[Doxygen]: http://www.doxygen.org
### Current Focus

## A note on backward-compatibility
* **Security:** Addressing vulnerabilities and fuzzing results.
* **Compatibility:** Ensuring the library builds without warnings on the latest versions of GCC,
Clang, and MSVC.
* **Reliability:** Fixing regressions and critical logical bugs.

* `1.y.z` is built with C++11.
* `0.y.z` can be used with older compilers.
* `00.11.z` can be used both in old and new compilers.
* Major versions maintain binary-compatibility.
### Out of Scope

### Special note
* **Performance:** We are not competing with SIMD-accelerated or reflection-based parsers.
* **Features:** We are generally not accepting requests for new data formats or major API changes.

The branch `00.11.z`is a new branch, its major version number `00` is to show
that it is different from `0.y.z` and `1.y.z`, the main purpose of this branch
is to make a balance between the other two branches. Thus, users can use some
new features in this new branch that introduced in 1.y.z, but can hardly applied
into 0.y.z.
JsonCpp remains a primary choice for developers who require comment preservation and support for
legacy toolchains where modern C++ standards are unavailable. The library is intended to be a
reliable dependency that does not require frequent updates or major migration efforts.

## Using JsonCpp in your project
## A note on backward-compatibility

### The vcpkg dependency manager
* **`1.y.z` (master):** Actively maintained. Requires C++11.

You can download and install JsonCpp using the [vcpkg](https://github.com/Microsoft/vcpkg/)
dependency manager, which has installation instruction dependent on your
build system. For example, if you are in a CMake project, the
[CMake install tutorial](https://learn.microsoft.com/en-us/vcpkg/get_started/get-started?pivots=shell-powershell)
suggests the follow installation method.
* **`0.y.z`:** Legacy support for pre-C++11 compilers. Maintenance is limited to critical security fixes.

First, clone and set up `vcpkg`.
* **`00.11.z`:** Discontinued.

```sh
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
```
Major versions maintain binary compatibility. Critical security fixes are accepted for both the `master` and `0.y.z` branches.

Then, create a [vcpkg.json manifest](https://learn.microsoft.com/en-us/vcpkg/reference/vcpkg-json),
enabling manifest mode and adding JsonCpp to the manifest's dependencies list.
## Integration

```sh
vcpkg new --application
vcpkg add port jsoncpp
```
### vcpkg
Add `jsoncpp` to your `vcpkg.json` manifest:

> [!NOTE]: you can use vcpkg in either classic mode or manifest mode (recommended).

#### Classic mode

If your project does not have a `vcpkg.json`,
your project is in [Classic mode](https://learn.microsoft.com/en-us/vcpkg/concepts/classic-mode)
you can install JsonCpp by directly invoking the `install` command:

```sh
vcpkg install jsoncpp
```json
{
"dependencies": ["jsoncpp"]
}
```

### Manifest mode
Or install via classic mode: `vcpkg install jsoncpp`.

If your project *does* have a vcpkg.json manifest, your project is in [Manifest mode](https://learn.microsoft.com/en-us/vcpkg/concepts/manifest-mode)
and you need to add JsonCpp to your package manifest dependencies, then invoke
install with no arguments.
### Conan

```sh
vcpkg add port jsoncpp
vcpkg install
conan install --requires="jsoncpp/[*]" --build=missing
```

Example manifest:
### Meson

```sh
{
"name": "best-app-ever",
"dependencies": [ "jsoncpp" ],
}
```

> [!NOTE] The JsonCpp port in vcpkg is kept up to date by Microsoft team members and community contributors.
> If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg)
> on the vcpkg repository.

### Conan package manager

You can download and install JsonCpp using the [Conan](https://conan.io/)
package manager:

```sh
conan install -r conancenter --requires="jsoncpp/[*]" --build=missing
meson wrap install jsoncpp
```

The JsonCpp package in Conan Center is kept up to date by [ConanCenterIndex](https://github.com/conan-io/conan-center-index)
contributors. If the version is out of date, please create an issue or pull request on the
Conan Center Index repository.

### Amalgamated source

See the [Wiki entry on Amalgamated Source](https://github.com/open-source-parsers/jsoncpp/wiki/Amalgamated-(Possibly-outdated)).
For projects requiring a single-header approach, see the [Wiki entry](https://github.com/open-source-parsers/jsoncpp/wiki/Amalgamated).

### The Meson Build System

If you are using the [Meson Build System](http://mesonbuild.com), then you can
get a wrap file by downloading it from [Meson WrapDB](https://mesonbuild.com/Wrapdb-projects.html),
or simply use `meson wrap install jsoncpp`.

### Other ways
## Documentation

If you have trouble, see the
[Wiki](https://github.com/open-source-parsers/jsoncpp/wiki), or post a question
as an Issue.
Documentation is generated via [Doxygen](http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html).
Additional information is available on the [Project Wiki](https://github.com/open-source-parsers/jsoncpp/wiki).

## License

See the [LICENSE](./LICENSE) file for details. In summary, JsonCpp is licensed
under the MIT license, or public domain if desired and recognized in your
jurisdiction.
JsonCpp is licensed under the MIT license, or public domain where recognized.
See [LICENSE](./LICENSE) for details.
Loading