Skip to main content

Generate Python type stubs from Cap'n Proto schema files

Project description

capnp-stub-gen

Generate Python type stubs (.pyi files) from Cap'n Proto schema files.

This tool parses .capnp files using pycapnp and generates .pyi stub files that provide proper type information for Pylance/Pyright.

Features

  • Generates type stubs for Cap'n Proto structs (Reader and Builder classes)
  • Supports enums with proper type definitions
  • Handles nested structs and lists
  • Generates runtime Python modules for easy schema loading
  • CLI interface with batch processing support
  • Full type annotations for strict type checking

Requirements

  • Python 3.14+
  • pycapnp 2.0+
  • Cap'n Proto compiler (capnp) installed on your system

Installation

pip install capnp-stub-gen

Or using Poetry:

poetry add capnp-stub-gen

Usage

Command Line

Generate stubs for a single schema:

capnp-stub-gen generate path/to/schema.capnp -o output/

Generate stubs for multiple schemas:

capnp-stub-gen batch schema1.capnp schema2.capnp -o output/

Options

capnp-stub-gen generate [OPTIONS] SCHEMA

Arguments:
  SCHEMA                    Path to the .capnp schema file

Options:
  -o, --output PATH         Output directory for generated stubs [default: .]
  --proto-path TEXT         Python expression for schema path in runtime module
  --no-runtime              Skip generating the runtime .py module
  -v, --verbose             Enable verbose output
  --version                 Print version and exit
  --help                    Show this message and exit

Python API

from pathlib import Path
from capnp_stub_gen import StubGenerator

# Generate stubs
generator = StubGenerator("path/to/schema.capnp")
generator.write_files(Path("output/"))

# Or get the stub content as a string
stub_content = generator.generate_stub()
print(stub_content)

Generated Files

For a schema file myschema.capnp, the tool generates:

  • myschema.pyi - Type stub file with all type definitions
  • myschema.py - Runtime module that loads and exports the schema

Example

Given a schema:

@0xabcdef1234567890;

struct Person {
  name @0 :Text;
  age @1 :UInt32;
  email @2 :Text;
}

The generated stub includes:

class PersonReader:
    """Reader for Person Cap'n Proto struct."""

    @property
    def name(self) -> str: ...

    @property
    def age(self) -> int: ...

    @property
    def email(self) -> str: ...

class PersonBuilder:
    """Builder for Person Cap'n Proto struct."""

    @property
    def name(self) -> str: ...

    @name.setter
    def name(self, value: str) -> None: ...

    # ... etc

Development

Setup

# Clone the repository
git clone https://github.com/yourusername/capnp-stub-gen.git
cd capnp-stub-gen

# Install dependencies
poetry install --with dev

# Run tests
poetry run pytest

# Run type checking
poetry run pyright src/

# Run linting
poetry run ruff check src/ tests/

Running Tests

# All tests
poetry run pytest

# With coverage
poetry run pytest --cov=capnp_stub_gen --cov-report=html

# Specific test file
poetry run pytest tests/test_generator.py

License

MIT License. See LICENSE for details.

Contributing

Contributions are welcome. Please open an issue or submit a pull request.

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

capnp_stub_gen-0.1.0.tar.gz (10.4 kB view details)

Uploaded Source

Built Distribution

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

capnp_stub_gen-0.1.0-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file capnp_stub_gen-0.1.0.tar.gz.

File metadata

  • Download URL: capnp_stub_gen-0.1.0.tar.gz
  • Upload date:
  • Size: 10.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for capnp_stub_gen-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4193b392f7dc96d5cc030efa872f6ac1be2e5e460344a13b7ae3bcc07f3769da
MD5 73e329663e03dee3dd08fece79c6156c
BLAKE2b-256 9e6f396b5b4cb1f953ffbcf360c725fb2840b3104ea90c9eee6b236280f1d9c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for capnp_stub_gen-0.1.0.tar.gz:

Publisher: publish.yaml on KaiErikNiermann/capnp-stub-gen

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

File details

Details for the file capnp_stub_gen-0.1.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for capnp_stub_gen-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f3cc169624c12249f79bbdbe754d8d20e984c7a20c2d02c3b86752c710acaf7b
MD5 2adc18cec57be1ce90b19ec47a02910a
BLAKE2b-256 e8c87596e8710ed6f824a9cb853664c1eedef476c45f6c28d4a43d41a6d7e247

See more details on using hashes here.

Provenance

The following attestation bundles were made for capnp_stub_gen-0.1.0-py3-none-any.whl:

Publisher: publish.yaml on KaiErikNiermann/capnp-stub-gen

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