J++Jsonic++
Developer experience

Predictable for people first—and therefore easy for tools to reason about.

Jsonic++ deliberately avoids configuration machinery, generated bindings and hidden runtime state. Include one header, call a parse function, inspect an ordinary value, and serialize it again if needed.

Human DX starts with a small mental model

There are six value kinds, one owning Document type, a boolean-returning parse entry point, direct object/array access, and one serializer. That means a maintainer can usually answer “what happens here?” by opening include/json.h rather than traversing factories, traits, generated sources and runtime registration.

Errors should help at the boundary

Invalid input is normal for a parser, so parse() reports it without requiring exception control flow and includes line/column context. By contrast, asking a value to behave as the wrong DOM type is a programmer error and fails explicitly. Keeping those two failure classes distinct makes application error handling easier to design.

Ordinary C++ remains visible

Strings are std::string; arrays are std::vector<Document>; object entries are ordinary key/value pairs. This is intentionally less magical than APIs that project JSON through a large conversion framework. You can use the standard library directly, step through it in a debugger, and reason about ownership without learning a second object model.

Vendoring is a supported workflow, not an embarrassment

Because the complete implementation is one public header and has no runtime dependency graph, copying a pinned header into a tool is a legitimate integration strategy. Nift and Minify++ do exactly that, backed by synchronization checks. Projects that prefer package management can still use it; the library does not require package management to remain maintainable.

AI DX

The same explicitness helps coding agents: one canonical header, deterministic tests, visible synchronization contracts and simple build commands mean less inference and cheaper validation loops. An agent can inspect the public API and implementation together, generate focused reproducers, run sanitizers, and leave behind tests instead of prose assurances.

The point is not “AI-friendly syntax.” Jsonic++ is not designed for agents instead of people. Good AI DX mostly falls out of ordinary engineering properties: local reasoning, deterministic behavior, small scope, useful diagnostics and executable project knowledge.

What the project intentionally avoids

Every extra convenience layer becomes another thing humans and agents must understand. Jsonic++ therefore resists adding reflection systems, plugin registries or configuration DSLs unless a concrete use case justifies changing the core mental model. For application-level examples, see the API reference.