Skip to main content

Auto-generate TypeScript client code from Flask routes and Python type annotations.

Project description

Typesync

This project aims to automatically generate TypeScript types and client-side request helpers directly from a Flask application. It is heavily inspired by JS Flask URLs.

By inspecting Flask routes and their Python type annotations, it produces strongly typed TypeScript definitions and functions that can call those endpoints with correct argument and return types. The project is currently incomplete, but the core idea and basic functionality are already in place.

The main goal is to reduce duplication and type mismatches between backend and frontend codebases by treating the Flask app as the single source of truth for API structure and typing.

Intended and Existing Features

Some features are already implemented, others are planned.

  • Parse Flask routes and URL rules
  • Parse route argument types from annotations
  • Parse return types from annotated view functions
  • Generate TypeScript type definitions
  • Generate TypeScript request/helper functions for endpoints
  • CLI integration with Flask via a custom command
  • Vite support
  • Handling of Flask converters (custom and built-in)
  • Support for multiple HTTP methods (GET, POST, PUT, DELETE, etc.)
  • Support for JSON request bodies with typed parameters
    • Support validators such as pydantic
  • Support for typing.Annotated to:
    • Ignore specific routes
    • Customize generation behavior (naming, visibility, etc.)
  • Improved error reporting for unsupported or ambiguous annotations
  • Optional generation modes (types only, requests only)
  • Configuration file support
  • Support custom formatting for generated code
  • Handle recursive types (such as type RecursiveType = tuple[int, RecursiveType])*
  • Support returning with jsonify(...)
  • Support extensions via translators

* Not all cases are supported.

Installation

The project is not yet published on PyPI. Installation is currently done directly from source, preferably using uv.

Clone the repository and install dependencies:

git clone https://github.com/ArmindoFlores/typesync
cd typesync
uv sync --dev
uv pip install -e .

Usage

TypeScript generation

The tool is exposed as a Flask CLI command. Inside your Flask application environment, run:

flask typesync generate OUT_DIR

This command will load the Flask app, inspect the URL map and registered view functions, and generate the corresponding TypeScript files (types and request helpers), placing them inside OUT_DIR. The names of the generated files, types, and functions can be customized using command line options. For more information about these options, use flask typesync generate --help.

Using the generated code

The main output of typesync is a makeAPI() function that is used to instantiate an object containing a function per HTTP method per endpoint. An example on how to use this function is provided in example/frontend/src/api.ts.

Rollup Plugin

Typesync has a rollup plugin that can be used to integrate with Rollup/Vite projects. Additional documentation is provided in rollup-plugin-typesync/README.md.

Inference

Typesync is capable of some basic type inference. This can be helpful when trying to incrementally adopt this package in an existing codebase, or for unconventional Flask setups. This functionality is optional, and needs to be enabled using the --inference flag. Additionally, the inference module may need to use eval() for evaluating some types; this is disabled by default, but can be enabled using --inference-can-eval.

Running Tests

Tests can be run using pytest:

pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

typesync-0.0.1a1.tar.gz (18.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

typesync-0.0.1a1-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file typesync-0.0.1a1.tar.gz.

File metadata

  • Download URL: typesync-0.0.1a1.tar.gz
  • Upload date:
  • Size: 18.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for typesync-0.0.1a1.tar.gz
Algorithm Hash digest
SHA256 4a7b5c01c812781801f91bf0a0b0854172cd2bc7855410dbdde16f398e707750
MD5 ddf0fc0d2a74abf3d0195384d304dd95
BLAKE2b-256 537d905c923d9ccef5e8c0eac4d8a7c0009397e67f3c3ca6770ff862bfad503b

See more details on using hashes here.

Provenance

The following attestation bundles were made for typesync-0.0.1a1.tar.gz:

Publisher: release.yml on ArmindoFlores/typesync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file typesync-0.0.1a1-py3-none-any.whl.

File metadata

  • Download URL: typesync-0.0.1a1-py3-none-any.whl
  • Upload date:
  • Size: 17.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for typesync-0.0.1a1-py3-none-any.whl
Algorithm Hash digest
SHA256 4cdc67cd26ef82321dc90e6d57ab6789a17a8563b1f9a61e0f6838f1365e8928
MD5 b62b87696367f60cfb9eaa6bb23ee218
BLAKE2b-256 572fd5cdbdcea78eaba54520efa1c39c647a85f90d8dad2fda95d3ee51c00551

See more details on using hashes here.

Provenance

The following attestation bundles were made for typesync-0.0.1a1-py3-none-any.whl:

Publisher: release.yml on ArmindoFlores/typesync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page