High-performance, no-dependencies, extensible, and declarative "anything to/from JSON" serializer.
Throw your data at it - open playground
- 📝 Declarative: Modern decorators allowing you to mark "what to serialize", not "how to serialize it"
- 🔌 Type-rich & Extensible: By default handles almost every built-in JavaScript type. Easy to extend with custom handled types.
- ⚡️ High-performance: ~3x faster than SuperJSON (see benchmark)
- 🔒 Type-safe: Full TypeScript support with autocompletion and type inference
- 🎯 Zero dependencies: Fully standalone, no external dependencies. 7.3KB gziped.
- ✅ Well tested: Every feature is covered by tests. It passes most of SuperJSON tests moved into CodableJSON (including plenty of edge cases)
- 🔄 Framework agnostic: Works with any JavaScript/TypeScript project
- 🛡️ Secure: Built-in protection against prototype pollution
Extend JSON to handle JavaScript types that JSON can't serialize:
Eliminate the dual-format problem with modern decorators
It means you mark "what to serialize", not "how to serialize it"
Note: for classes to be automatically serialized, they need to have memberwise constructor (eg the same way like Swift Codable structs work). Read more about it here.
CodableJSON automatically handles JavaScript types that standard JSON cannot serialize:
| Date | { $$Date: "2025-01-01T00:00:00.000Z" } |
| BigInt | { $$BigInt: "1234567890123456789" } |
| Set | { $$Set: ["a", "b", "c"] } |
| Map | { $$Map: [["key", "value"]] } |
| RegExp | { $$RegExp: "/hello/gi" } |
| Symbol | { $$Symbol: "test" } |
| URL | { $$URL: "https://example.com/" } |
| URLSearchParams | { $$URLSearchParams: "foo=bar&baz=qux" } |
| Error | { $$Error: "Something went wrong" } |
| undefined | "$$undefined" |
| Typed Arrays | { $$uint8array: [1, 2, 3] } |
| Special Numbers | "$$NaN", "$$Infinity", "$$-Infinity", "$$-0" |
Read more about supported types →
Of course, you can extend it with custom types.
CodableJSON is heavily optimized for performance:
- Encoding: ~3-3.5x faster than SuperJSON across all data sizes and types
- Decoding: Comparable to or faster than SuperJSON depending on the data type
You can also use lower-level API to create custom types and encode/decode them manually.
CodableJSON includes built-in security measures:
- Prototype Pollution Protection: Automatically filters dangerous properties (constructor, __proto__, prototype)
- Safe Object Creation: Creates objects without modifying prototypes
- Format Safety: Automatic collision detection and escaping
Read more about security features →
You can run these benchmarks yourself by downloading the repository and running yarn codablejson bench. The benchmark code is available in benchmark.bench.ts.
| Encode | 🟢 3.68x faster than SuperJSON | 🟢 6.85x faster than SuperJSON |
| Decode | 🟢 1.29x faster than SuperJSON | 🟢 1.28x faster than SuperJSON |
It includes deeply nested objects, with repeating references, Sets, Maps, and Dates
| Preserve refs | Copy refs | Preserve refs | Copy refs | |
| Small | 🟢 3.89x faster | 🟢 6.98x faster | 🟢 1.68x faster | 🟢 1.66x faster |
| Average | 🟢 4.20x faster | 🟢 5.06x faster | 🟢 1.16x faster | 🟢 1.05x faster |
| Large | 🟢 4.01x faster | 🟢 7.54x faster | 🟢 1.19x faster | 🟢 1.83x faster |
| Huge | 🟢 4.08x faster | 🟢 6.43x faster | 🟢 1.31x faster | 🟢 2.37x faster |
Benchmark was run on a MacBook Pro M3 Max with 128GB of RAM.
For simple JSON serialization, CodableJSON is almost a drop-in replacement for SuperJSON.
For custom types, please read about custom types in JSON Serialization section.
Read complete comparison guide →
- Quick Start - Get up and running quickly
- JSON Serialization - Handle complex JavaScript types
- Declarative Serialization - Serialize classes with decorators
- Performance - Benchmark results and optimization
- Security - Security features and best practices
- Recipes - Real-world examples and integrations
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Create your feature branch (git checkout -b feature/amazing-feature)
- Commit your changes (git commit -m 'Add some amazing feature')
- Push to the branch (git push origin feature/amazing-feature)
- Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
.png)

