{"library":"msgspec-click","title":"msgspec-click","description":"msgspec-click is a Python library that generates Click options from msgspec types, facilitating the creation of command-line interfaces with robust data validation and serialization. It is currently at version 0.2.1 and maintains an active development pace with regular updates.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install msgspec-click"],"cli":null},"imports":["from msgspec_click import generate_options","from msgspec import Struct","from msgspec import Meta"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from __future__ import annotations\nfrom typing import Annotated\nimport click\nfrom msgspec import Meta, Struct, convert\nfrom msgspec_click import generate_options\n\nclass Connection(Struct):\n    user: Annotated[\n        str,\n        Meta(extra={'help': 'The user\\'s name', 'params': ['-u', '--user']})\n    ] = \"\"\n    password: Annotated[\n        str,\n        Meta(extra={\n            'help': 'The user\\'s password',\n            'params': ['-p', '--pass'],\n            'prompt': True,\n            'hide_input': True,\n            'confirmation_prompt': True,\n        })\n    ] = \"\"\n    headers: Annotated[list[str], Meta(extra={'params': ['-H']})] = []\n    timeout: float = 10.0\n    allow_insecure: bool = False\n\n@click.command()\ndef command(**kwargs) -> None:\n    connection = convert(kwargs, Connection)\n    print(connection)\n\ncommand.params.extend(generate_options(Connection))\n\nif __name__ == \"__main__\":\n    # To run this, save as script.py and then execute:\n    # python script.py --user alice -H \"Key: Value\" --pass\n    # (the --pass will prompt for password)\n    command()","lang":"python","description":"This example demonstrates how to define a `msgspec.Struct` with `Annotated` and `msgspec.Meta` to customize Click options like help text, short flags, prompts, and type handling. The `generate_options` function automatically creates Click options from the `Connection` struct, which are then added to a Click command. The input is then converted back to the `Connection` struct using `msgspec.convert` for validation and type-safe access.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"0.2.1","pypi_latest":"0.2.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.8,"avg_import_s":0.09,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"msgspec-click","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.1,"mem_mb":3.2,"disk_size":"19.3M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"msgspec-click","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.05,"mem_mb":3.2,"disk_size":"20M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"msgspec-click","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.14,"mem_mb":3.5,"disk_size":"21.3M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"msgspec-click","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.1,"mem_mb":3.5,"disk_size":"22M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"msgspec-click","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.11,"mem_mb":3.4,"disk_size":"13.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"msgspec-click","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.09,"mem_mb":3.4,"disk_size":"14M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"msgspec-click","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.09,"mem_mb":3.4,"disk_size":"12.9M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"msgspec-click","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.08,"mem_mb":3.2,"disk_size":"13M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"msgspec-click","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.07,"mem_mb":3.2,"disk_size":"18.7M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"msgspec-click","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":0.06,"mem_mb":3.2,"disk_size":"19M"}]}}