Skip to main content

dtolator

image image CI

Code generator that converts OpenAPI schemas, plain JSON, and JSON Schema files into typed code for multiple languages and frameworks.

Supported outputs

Flag Output
(default) Zod schemas (stdout)
--typescript / -t TypeScript interfaces
--zod / -z Zod schemas + TypeScript DTOs
--angular / -a Angular API services
--pydantic Python Pydantic models
--python-dict Python TypedDict definitions
--dotnet C# classes (System.Text.Json)
--json-schema JSON Schema
--endpoints / -e API endpoint types
--rust-serde Rust structs with Serde

Installation

Install with uv (recommended) — it fetches the prebuilt binary from PyPI and puts it on your PATH:

uv tool install dtolator

To upgrade later:

uv tool upgrade dtolator

Or download the latest executable from the GitHub Releases page and place it on your PATH.

Or install via Cargo:

cargo install --git https://github.com/vivainio/dtolator

Or build from source:

git clone https://github.com/vivainio/dtolator
cd dtolator
cargo build --release

Usage

# Zod schemas to stdout (default)
dtolator --from-openapi schema.json

# TypeScript interfaces to stdout
dtolator --from-openapi schema.json --typescript

# Write to directory (generates dto.ts + schema.ts)
dtolator --from-openapi schema.json --zod -o ./output

# Angular services with Zod validation and promises
dtolator --from-openapi schema.json -o ./src/app/api --angular --zod --promises

# From plain JSON (like quicktype)
dtolator --from-json data.json --typescript --root MyType

# From JSON Schema
dtolator --from-json-schema schema.json --pydantic

For the complete flag reference, see docs/cli.md (generated from the CLI definition; run DTOLATOR_TEST_REFRESH=1 cargo test to regenerate).

Input types

Exactly one required:

  • --from-openapi <FILE> — OpenAPI 3.x specification (richest: includes endpoints, params, validation)
  • --from-json <FILE> — Plain JSON data (schema inferred automatically)
  • --from-json-schema <FILE> — JSON Schema definition

Output options

  • -o, --output <DIR> — Write files to directory instead of stdout
  • --output-file <FILE> — Write the combined output to a single file (mutually exclusive with --output). Parent directories are created as needed. Multi-file generators (--angular, and the --zod dto.ts/schema.ts pair) require --output <DIR>; --angular --output-file is rejected.
  • --delete-old — After generation, delete files in the output directory that weren't just generated
  • --skip-file <NAME> — Skip writing a specific file (repeatable)
  • --hide-version — Omit version from generated file headers
  • --debug — Verbose debug output

Angular-specific options

  • --promises — Use lastValueFrom / Promise instead of Observable
  • --base-url-mode <MODE>global (default), argument, or none (relative URLs, route only)
  • --api-url-variable <NAME> — Global variable name for API URL (default: API_URL)
  • --ignore-operation-id — Derive method names from the operation summary, ignoring operationId

See ANGULAR.md for detailed Angular integration docs.

OpenAPI features supported

  • Basic types: string, number, integer, boolean, array, object
  • Enums, $ref references, nullable/optional properties
  • Composition: allOf, oneOf, anyOf
  • Validation: minLength, maxLength, minimum, maximum, pattern, format
  • Paths: path params, query params, header params, request bodies, response types
  • Map/dictionary types via additionalProperties

Incremental writes

Files are only written when content actually changes (with a fast-path file-size check), so bundler watchers won't trigger unnecessary rebuilds.

Testing

cargo test                           # Run all tests
python run-tests.py                  # Integration test suite
python run-tests.py --refresh        # Update expected outputs after intentional changes

See ADVANCED.md for endpoint generation details.

License

MIT

Release files for dtolator 0.27.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for dtolator 0.27.0
File
dtolator-0.27.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
dtolator-0.27.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
dtolator-0.27.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
dtolator-0.27.0-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 3.6 MB

Release files / dtolator-0.27.0-py3-none-win_amd64.whl

Download URL dtolator-0.27.0-py3-none-win_amd64.whl
Size 812.5 kB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
b2a36a0547067be031ef705d14d7e1d158c114f646f9444b6029a9b58a65c71b
BLAKE2b-256 checksum
How to use checksums
b10d3c9bbc02176aaf844edae4388e09e87365cd59f09971e70de1c0bfbf3d31
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.

Transparency log

Release files / dtolator-0.27.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL dtolator-0.27.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 972.9 kB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
fed213fe84c71bdca339f1cfee714cf0efcf00817921fdcbea56e069e4fe0ad1
BLAKE2b-256 checksum
How to use checksums
3c060a1e5100e90b3416884f4353ba77f4fb72e0118c19d0d445110e9b85e107
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.

Transparency log

Release files / dtolator-0.27.0-py3-none-macosx_11_0_arm64.whl

Download URL dtolator-0.27.0-py3-none-macosx_11_0_arm64.whl
Size 889.3 kB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
3a7a96d95e80f9a48ca53864b622c1c7220e326a397b773692d20418591d605a
BLAKE2b-256 checksum
How to use checksums
8f7e738d60da88ad90ab2908cd22a21940f87a994321591dcb45b15c56d78f40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.

Transparency log

Release files / dtolator-0.27.0-py3-none-macosx_10_12_x86_64.whl

Download URL dtolator-0.27.0-py3-none-macosx_10_12_x86_64.whl
Size 927.0 kB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
56f26aa41e17c3c4eca68262a81994423568fd8bea0a6418a5e0a27b41e4488b
BLAKE2b-256 checksum
How to use checksums
4396a68326aaae5570788f988bd4c0abd6b51cf5381ebd69730865e784fb9ed5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.27.0 This release

4 release files

0.26.0

4 release files

0.25.0

4 release files

0.24.1

4 release files

0.24.0

4 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page