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.3.tar.gz (10.6 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.3-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: capnp_stub_gen-0.1.3.tar.gz
  • Upload date:
  • Size: 10.6 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.3.tar.gz
Algorithm Hash digest
SHA256 56e7df32e55cfa3f33cc80a131b36913bfbd89f57e2d7a46951341b0b5883e04
MD5 26eb0363187ee3a2d496e8f212fc9770
BLAKE2b-256 2977b6c1cc391917da3c31dbde4e0baeaf6347809f9b7c7838aaff92f7dbaa74

See more details on using hashes here.

Provenance

The following attestation bundles were made for capnp_stub_gen-0.1.3.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.3-py3-none-any.whl.

File metadata

  • Download URL: capnp_stub_gen-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 11.2 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 939bf5ea4345265adb7ac2ebd27af9d6df5a893ed5c1a37dd943456a5edd8d85
MD5 31341c7331de9ed9bcbd39a15b674b08
BLAKE2b-256 3795c5e53f33201290e99290181ac2323a775d922c00666db9fe363324a3aa70

See more details on using hashes here.

Provenance

The following attestation bundles were made for capnp_stub_gen-0.1.3-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