{"id":36236901,"url":"https://github.com/vhrdtech/wire_weaver","last_synced_at":"2026-01-11T06:02:06.489Z","repository":{"id":63819607,"uuid":"231206773","full_name":"vhrdtech/wire_weaver","owner":"vhrdtech","description":"Lightweight microcontroller API code generator with support for rich data types (including unsized types in no_std) and seamless backward/forward compatibility.","archived":false,"fork":false,"pushed_at":"2025-12-23T16:13:00.000Z","size":3823,"stargazers_count":7,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-25T00:22:53.710Z","etag":null,"topics":["api","mcu","no-alloc","no-std","rpc","rust","wire-format"],"latest_commit_sha":null,"homepage":"https://vhrdtech.github.io/wire_weaver/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vhrdtech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-01-01T11:19:15.000Z","updated_at":"2025-12-14T17:05:16.000Z","dependencies_parsed_at":"2023-09-29T09:08:29.015Z","dependency_job_id":"c2b80985-ddd9-4e08-a6ac-1db20f59f335","html_url":"https://github.com/vhrdtech/wire_weaver","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vhrdtech/wire_weaver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vhrdtech%2Fwire_weaver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vhrdtech%2Fwire_weaver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vhrdtech%2Fwire_weaver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vhrdtech%2Fwire_weaver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vhrdtech","download_url":"https://codeload.github.com/vhrdtech/wire_weaver/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vhrdtech%2Fwire_weaver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28293188,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T04:44:51.577Z","status":"ssl_error","status_checked_at":"2026-01-11T04:44:44.232Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","mcu","no-alloc","no-std","rpc","rust","wire-format"],"created_at":"2026-01-11T06:02:05.771Z","updated_at":"2026-01-11T06:02:06.484Z","avatar_url":"https://github.com/vhrdtech.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WireWeaver\n\n![Crates.io Version](https://img.shields.io/crates/v/wire_weaver)\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"./docs/assets/logo.png\" alt=\"logo\" width=\"200\"/\u003e\n\u003c/p\u003e\n\n\u003e WireWeaver is an API code generator for microcontrollers, supporting user-defined types, methods, properties, streams,\n\u003e and traits.\n\u003e It handles unsized types like Vec\u003cT\u003e and String even in no_std environments without an allocator,\n\u003e and ensures full backward and forward compatibility between devices across format versions.\n\nCurrently only Rust language is supported, with the idea to handle device communications in Rust and provide higher\nlevel bindings for Python, C++ and other languages. C support is tentatively planned to be implemented directly, to run\ne.g., on TMS320 DSPs.\n\nCurrent state is - approaching alpha release.\n\n## TLDR\n\nDocumentation with a step-by-step guide is\navailable [here](https://vhrdtech.github.io/wire_weaver/).\n\nSupported:\n\n* RPC - functions with any number of arguments of any type, returning any type\n* Streams of bytes or objects\n* Properties of any type\n* Traits\n* Blocking and async mode\n* USB without drivers on Windows, Linux and macOS\n* soon: WebSocket and UDP support\n* soon: CAN bus support\n\nTraits can be made \"global\" by publishing them on crates.io.\nUseful for things like logging, GPIO control or firmware update, allowing code reuse across projects.\n\nWire format used (called shrink_wrap) is binary and designed to use bits and nibbles to make it compact without\ncompression.\nSee comparison to other formats in [examples/compare_wire_formats](./examples/compare_wire_formats).\n\n## Standard library\n\nCommon data types and traits are located in the [ww_stdlib](https://github.com/vhrdtech/ww_stdlib) repository.\nNotable ones are:\n\n* `ww_date_time` - ISO 8601 date and time with optional time zone and nanoseconds, as small as 32 bits. Also NaiveDate\n  and NaiveTime.\n* `ww_version` - SemVer version (including pre and build strings).\n* `ww_numeric` - Various numeric types, including offset-scale and subtypes.\n* `ww_si` - SI units and derived values.\n* `ww_gpio` - GPIO control data types and remote bridging API.\n* `ww_can_bus` - CAN Bus types and bridging API.\n* `ww_dfu` - Firmware update API.\n* `ww_log_bare_metal` - Logging types and API for no_std bare metal targets.\n* `ww_self` - Dynamic access to APIs (API model AST in shrink_wrap format).\n\n## Quick start\n\nEasiest way to start using WireWeaver is through one of the templates below, which contain firmware for several\ndevelopment boards, API, client and Python bindings crates.\n\nIf you do not have physical hardware at hand, there is virtual device support.\n\n### Microcontroller API over USB template\n\n[WireWeaver template](https://github.com/vhrdtech/wire_weaver_template)\n\nThis is a minimal example showing an MCU firmware with USB, common no_std API crate, server on the MCU and client in\nRust and Python.\n\n### Microcontroller API over Ethernet template\n\nTODO\n\n### Setup from scratch\n\nSee [Project setup]() page in the docs, which explains how setup projects in more detail for both std and no_std use.\n\n### Low level wire format use\n\nTODO\n\n## Wire format\n\nwire_weaver uses wire format called [shrink_wrap](https://github.com/romixlab/shrink_wrap) -\ncompact zero-copy wire format for microcontrollers using no allocator and supporting dynamic types.\nIf you only want to serialize and deserialize some data types, it can be used stand-alone.\n\n## Crate naming\n\n`wire_weaver_` prefix is used on core crates that implement all the functionality.  \n`ww_` prefix is used on crates using WireWeaver to provide standard library types and traits. Use it as well if you\nthink that your crate is useful across multiple projects.\nStandard library is in [ww_stdlib](https://github.com/vhrdtech/ww_stdlib) repository, contributions are welcome!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvhrdtech%2Fwire_weaver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvhrdtech%2Fwire_weaver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvhrdtech%2Fwire_weaver/lists"}