# rescript-json-schema

> 📄 Typesafe JSON Schema for ReScript

Latest version **7.3.0** (published 2025-04-02) · MIT license · 0 weekly downloads

## Install

```sh
npm install rescript-json-schema
pnpm add rescript-json-schema
yarn add rescript-json-schema
bun add rescript-json-schema
```

## Health

**Score 40/100 (D)** — status: maintenance-mode.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 7.3.0 |
| Published | 2025-04-02 |
| First published | 2022-02-27 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 64 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 32 |
| Author | Dmitry Zakharov |
| Maintainers | dzakh |
| Keywords | rescript, json, schema, openapi, swagger, typesafe, codegen, ajv |

## Links

- npm: https://www.npmjs.com/package/rescript-json-schema
- Repository: https://github.com/DZakh/rescript-json-schema
- Homepage: https://github.com/DZakh/rescript-json-schema#readme
- Issues: https://github.com/DZakh/rescript-json-schema/issues
- npm.io page: https://npm.io/package/rescript-json-schema

## Alternatives

- [@mapbox/jsonlint-lines-primitives](https://npm.io/package/@mapbox/jsonlint-lines-primitives.md) — 5.3M weekly downloads
- [reftools](https://npm.io/package/reftools.md) — 3.5M weekly downloads
- [@hey-api/openapi-ts](https://npm.io/package/@hey-api/openapi-ts.md) — 3.5M weekly downloads
- [@mapbox/geojson-rewind](https://npm.io/package/@mapbox/geojson-rewind.md) — 2.4M weekly downloads
- [turbo-stream](https://npm.io/package/turbo-stream.md) — 1.7M weekly downloads

## Recent versions

- 7.3.0 (latest) — 2025-04-02
- 7.2.0 — 2025-02-24
- 7.1.0 — 2025-01-31
- 7.0.0 — 2024-12-16
- 6.2.0 — 2024-11-08
- 6.1.0 — 2024-07-15
- 6.0.1 — 2024-06-30
- 6.0.0 — 2024-06-17
- 5.0.0 — 2023-12-09
- 3.1.0 — 2023-11-29
- 4.0.0 — 2023-09-11
- 3.0.0 — 2023-04-28
- 2.0.0 — 2023-04-05
- 1.1.0 — 2023-02-23
- 1.0.1 — 2022-12-20
- … 29 more at https://npm.io/package/rescript-json-schema/versions

## README

[![CI](https://github.com/DZakh/rescript-json-schema/actions/workflows/ci.yml/badge.svg)](https://github.com/DZakh/rescript-json-schema/actions/workflows/ci.yml)
[![codecov](https://codecov.io/gh/DZakh/rescript-json-schema/branch/main/graph/badge.svg?token=40G6YKKD6J)](https://codecov.io/gh/DZakh/rescript-json-schema)
[![npm](https://img.shields.io/npm/dm/rescript-json-schema)](https://www.npmjs.com/package/rescript-json-schema)

# ReScript JSON Schema 📄

Typesafe JSON Schema for ReScript

- Provides ReScript types to work with [JSON schema](https://json-schema.org/)
- Converts [**rescript-schema**](https://github.com/DZakh/rescript-schema) into JSON schemas
- Converts JSON schemas to [**rescript-schema**](https://github.com/DZakh/rescript-schema)

## Install

```sh
npm install rescript-json-schema rescript-schema
```

Then add `rescript-json-schema` and `rescript-schema` to `bs-dependencies` in your `rescript.json`:

```diff
{
  ...
+ "bs-dependencies": ["rescript-json-schema", "rescript-schema"]
+ "bsc-flags": ["-open RescriptSchema"],
}
```

## Create JSON schemas with type safety

One of the library's main features is the **rescript-schema**, which provides a way to describe the schema of a value. This schema contains meta information used for parsing, serializing, and generating JSON Schema. When working with the library, you will mostly interact with **rescript-schema** to define the schema of the values you are working with.

For example, if you have the following schema:

```rescript
type rating =
  | @as("G") GeneralAudiences
  | @as("PG") ParentalGuidanceSuggested
  | @as("PG13") ParentalStronglyCautioned
  | @as("R") Restricted
type film = {
  id: float,
  title: string,
  tags: array<string>,
  rating: rating,
  deprecatedAgeRestriction: option<int>,
}

let filmSchema = S.object(s => {
  id: s.field("Id", S.float),
  title: s.field("Title", S.string),
  tags: s.fieldOr("Tags", S.array(S.string), []),
  rating: s.field(
    "Rating",
    S.union([
      S.literal(GeneralAudiences),
      S.literal(ParentalGuidanceSuggested),
      S.literal(ParentalStronglyCautioned),
      S.literal(Restricted),
    ]),
  ),
  deprecatedAgeRestriction: s.field("Age", S.option(S.int)->S.deprecate("Use rating instead")),
})
```

You can use it to generate JSON Schema for the value it describes:

```rescript
JSONSchema.make(filmSchema)
```

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "Id": { "type": "number" },
    "Title": { "type": "string" },
    "Tags": { "items": { "type": "string" }, "type": "array", "default": [] },
    "Rating": {
      "enum": ["G", "PG", "PG13", "R"]
    },
    "Age": {
      "type": "integer",
      "deprecated": true,
      "description": "Use rating instead"
    }
  },
  "additionalProperties": true,
  "required": ["Id", "Title", "Rating"]
}
```

## Create **rescript-schema** from JSON schema

### Online

![ReScript JSON Schema Online](assets/online-preview.png)

[Just paste your JSON schemas here!](https://dzakh.github.io/rescript-json-schema/)

---
_Source: https://npm.io/package/rescript-json-schema · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
