{"id":13730461,"url":"https://github.com/ndsev/zserio","last_synced_at":"2025-05-08T03:30:51.920Z","repository":{"id":41083871,"uuid":"141550444","full_name":"ndsev/zserio","owner":"ndsev","description":"zero sugar, zero fat, zero serialization overhead","archived":false,"fork":false,"pushed_at":"2025-05-07T08:50:32.000Z","size":76505,"stargazers_count":116,"open_issues_count":183,"forks_count":26,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-05-07T09:25:19.886Z","etag":null,"topics":["code-generation","compactness","cpp","data-structures","grpc","java","schema-language","serialization","serialization-framework","sqlite","wire-format"],"latest_commit_sha":null,"homepage":"https://zserio.org/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ndsev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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}},"created_at":"2018-07-19T08:44:23.000Z","updated_at":"2025-04-29T01:03:29.000Z","dependencies_parsed_at":"2024-02-12T09:45:43.694Z","dependency_job_id":"fb3d3d0f-5260-4cf9-8923-8cb3a26308b0","html_url":"https://github.com/ndsev/zserio","commit_stats":null,"previous_names":[],"tags_count":43,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndsev%2Fzserio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndsev%2Fzserio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndsev%2Fzserio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndsev%2Fzserio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ndsev","download_url":"https://codeload.github.com/ndsev/zserio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252992863,"owners_count":21837181,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["code-generation","compactness","cpp","data-structures","grpc","java","schema-language","serialization","serialization-framework","sqlite","wire-format"],"created_at":"2024-08-03T02:01:15.173Z","updated_at":"2025-05-08T03:30:46.907Z","avatar_url":"https://github.com/ndsev.png","language":"Java","funding_links":[],"categories":["cpp","C++"],"sub_categories":[],"readme":"\u003cimg src=\"doc/Zserio.png\" height=\"100\"\u003e\n\n***z***ero ***seri***alization ***o***verhead\n\n[![](https://github.com/ndsev/zserio/actions/workflows/build_linux.yml/badge.svg)](https://github.com/ndsev/zserio/actions/workflows/build_linux.yml)\n[![](https://github.com/ndsev/zserio/actions/workflows/build_windows.yml/badge.svg)](https://github.com/ndsev/zserio/actions/workflows/build_windows.yml)\n[![](https://github.com/ndsev/zserio/actions/workflows/codeql_autosar.yml/badge.svg)](https://github.com/ndsev/zserio/actions/workflows/codeql_autosar.yml)\n[![](https://img.shields.io/conan/v/zserio)](https://conan.io/center/recipes/zserio)\n[![](https://img.shields.io/maven-central/v/io.github.ndsev/zserio)](https://central.sonatype.com/artifact/io.github.ndsev/zserio)\n[![](https://img.shields.io/pypi/v/zserio.svg)](https://pypi.org/pypi/zserio/)\n[![](https://img.shields.io/endpoint?url=https://zserio.org/doc/runtime/latest/cpp/coverage/clang/coverage_github_badge.json)](https://zserio.org/doc/runtime/latest/cpp/coverage/clang)\n[![](https://img.shields.io/endpoint?url=https://zserio.org/doc/runtime/latest/java/coverage/coverage_github_badge.json)](https://zserio.org/doc/runtime/latest/java/coverage)\n[![](https://img.shields.io/endpoint?url=https://zserio.org/doc/runtime/latest/python/coverage/coverage_github_badge.json)](https://zserio.org/doc/runtime/latest/python/coverage)\n[![](https://sonarcloud.io/api/project_badges/measure?project=ndsev_zserio\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=ndsev_zserio)\n[![](https://img.shields.io/github/release-date/ndsev/zserio)](https://github.com/ndsev/zserio/releases/latest)\n[![](https://img.shields.io/github/commits-since/ndsev/zserio/latest)](https://github.com/ndsev/zserio/commits/master)\n[![](https://img.shields.io/github/commit-activity/m/ndsev/zserio)](https://github.com/ndsev/zserio/commits/master)\n[![](https://img.shields.io/github/watchers/ndsev/zserio.svg)](https://github.com/ndsev/zserio/watchers)\n[![](https://img.shields.io/github/forks/ndsev/zserio.svg)](https://github.com/ndsev/zserio/network/members)\n[![](https://img.shields.io/github/stars/ndsev/zserio.svg?color=yellow)](https://github.com/ndsev/zserio/stargazers)\n\n--------\n\nZserio is a framework for serializing structured data with a compact and efficient way with low overhead.\n\nYou can define your structured data in [Zserio language](doc/ZserioLanguageOverview.md) and then you can use\nspecial generated source code in [several languages](#language-support) to easily write and read your data to\nand from a [binary](doc/ZserioEncodingGuide.md) or a [text](doc/ZserioJsonGuide.md) stream.\n\nNo time to read? Go to the [quick start](#quick-start) or [download latest release](https://github.com/ndsev/zserio/releases/latest).\n\nIn for the numbers? Head over to [benchmarks](benchmarks/README.md).\n\nQuestions? Check the [FAQs](doc/FAQ.md).\n\nMore documentation? Go to the [documentation](#documentation).\n\n--------\n\n## Language support\n\nZserio supports the following code generators:\n\n- [C++ Generator](compiler/extensions/cpp/README.md) together with [runtime library](https://zserio.org/doc/runtime/latest/cpp)\n  using C++11, and developed with special attention to [functional safety](compiler/extensions/cpp/README.md#functional-safety)\n  and [performance](https://github.com/ndsev/zserio-protobuf-benchmarks)\n- [Java Generator](compiler/extensions/java/README.md) together with [runtime library](https://zserio.org/doc/runtime/latest/java)\n- [Python Generator](compiler/extensions/python/README.md) together with [runtime library](https://zserio.org/doc/runtime/latest/python)\n\nIn addition to these, Zserio provides specialized text generators for documentation and export\n\n- [Doc Generator](compiler/extensions/doc/README.md)\n- [XML Generator](compiler/extensions/xml/README.md)\n\n## Introduction\n\nThe Zserio serialization framework allows you to serialize data in a compact and efficient way.\n\nThe key features include\n\n- compactness (smaller than most other serializers)\n- advanced schema definition options\n- cross-platform\n- multiple programming languages\n\nIt can be retrofitted on top of almost any other serialization language or model, since it gives the developer\npowerful low-level access.\n\nIt features simple and compound data structures and provides advanced features for controlling at design time\nwhat writers will be able to fill in.\n\nZserio does have a very simple wire format described at [Zserio Encoding Guide](doc/ZserioEncodingGuide.md).\n\nZserio supports as well serialization and deserialization in JSON format described at\n[Zserio JSON Guide](doc/ZserioJsonGuide.md).\n\n## Quick Start\n\nTo be able to serialize data with Zserio, you have to follow these basic steps:\n\n1. Download the runtimes and the Zserio compiler from [Github Releases](https://github.com/ndsev/zserio/releases/latest)\n2. Set up your development environment with the Zserio runtime\n3. Write the schema definition\n4. Compile the schema and generate code\n5. Serialize/deserialize using the generated code\n\nYou can find the detailed quick start tutorial in their respective repositories:\n\n- [C++ Tutorial](https://github.com/ndsev/zserio-tutorial-cpp#zserio-c-quick-start-tutorial)\n- [Java Tutorial](https://github.com/ndsev/zserio-tutorial-java#zserio-java-quick-start-tutorial)\n- [Python Tutorial](https://github.com/ndsev/zserio-tutorial-python#zserio-python-quick-start-tutorial)\n\nOr try [Interactive Zserio Compiler](https://share.streamlit.io/zserio-streamlit/zserio-streamlit/interactive_zserio.py)\nbased on [Streamlit](https://streamlit.io).\n\n## Features overview\n\n- [Optional elements](doc/ZserioLanguageOverview.md#optional-members)\n- [Constraints](doc/ZserioLanguageOverview.md#constraints)\n- [Default values](doc/ZserioLanguageOverview.md#default-values)\n- [Parameters](doc/ZserioLanguageOverview.md#parameterized-types)\n- [Alignments](doc/ZserioLanguageOverview.md#alignment)\n- [Offsets](doc/ZserioLanguageOverview.md#offsets)\n- [Arrays with indexed offsets](doc/ZserioLanguageOverview.md#indexed-offsets)\n- [Packed arrays](doc/ZserioLanguageOverview.md#packed-arrays)\n- [Templates](doc/ZserioLanguageOverview.md#templates)\n- [Generic services](#services)\n- [Generic Pub/Sub](#pubsub)\n- [SQLite extension](doc/ZserioLanguageOverview.md#sqlite-extension)\n\n## Documentation\n\nDocumentation of the schema language can be found in the\n[Zserio Language Overview](doc/ZserioLanguageOverview.md).\n\nSchema language reference can be found in [Quick Reference](doc/ZserioQuickReference.md).\n\nExplanation how zserio encodes data to the wire format can be found in the\n[Zserio Encoding Guide](doc/ZserioEncodingGuide.md).\n\nExplanation how zserio encodes data to the JSON format can be found in the\n[Zserio JSON Guide](doc/ZserioJsonGuide.md).\n\nExplanation how zserio schema can be extended not to break backward or forward compatibility can be found in the\n[Zserio Schema Evolution Guide](doc/ZserioSchemaEvolutionGuide.md).\n\nExplanation how to deal with all possible backward incompatibilities that can occur after updating of Zserio\ncan be found in the [Zserio Compatibility Guide](doc/ZserioCompatibilityGuide.md).\n\nUser Guide can be found in the [Zserio Compiler User Guide](doc/ZserioUserGuide.md).\n\nBuild instructions can be found in the [Zserio Compiler Build Instructions](doc/ZserioBuildInstructions.md).\n\nC++ users can find more information in the\n[C++ Tutorial](https://github.com/ndsev/zserio-tutorial-cpp#zserio-c-quick-start-tutorial).\n\nJava users can find more information in the\n[Java Tutorial](https://github.com/ndsev/zserio-tutorial-java#zserio-java-quick-start-tutorial).\n\nPython users can find more information in the\n[Python Tutorial](https://github.com/ndsev/zserio-tutorial-python#zserio-python-quick-start-tutorial).\n\nCheck out as well the [Zserio Types Mapping](doc/ZserioTypesMapping.md) for types mapping description.\n\n### Extensions\n\nZserio extension is any Java [extension](https://docs.oracle.com/javase/tutorial/ext/index.html) which\nimplements [`zserio.tools.Extension`](https://github.com/ndsev/zserio/blob/master/compiler/core/src/zserio/tools/Extension.java)\ninterface.\n\nFor example, if you need to implement a new code generator for Zserio, you need to implement special Zserio\nextension. Or another example could be a Zserio extension which only prints some schema statistics and it does\nnot generate anything.\n\nEach Zserio extension should be packed in a single jar file.\n\nAll Zserio extensions which are available on the Java classpath are automatically loaded during Zserio compiler\nstartup.\n\nMore information how to implement a new Zserio extension can be found in the\n[Zserio extension sample](https://github.com/ndsev/zserio-extension-sample#zserio-extension-sample).\n\n### Services\n\n[Service types](doc/ZserioLanguageOverview.md#service-types) allow to define generic service interfaces.\nBut note that no underlying communication library is provided by Zserio. Zserio only defines the generic\ninterface and users are responsible for its implementation. However, Zserio provides sample implementations\nof several services backends:\n   * [C++ Zserio Service gRPC backend](https://github.com/ndsev/zserio-service-grpc-cpp)\n   * [Java Zserio Service RMI backend](https://github.com/ndsev/zserio-service-rmi-java)\n   * [Python Zserio Service HTTP backend](https://github.com/ndsev/zserio-service-http-python)\n\n### Pub/Sub\n\n[Pubsub types](doc/ZserioLanguageOverview.md#pubsub-types) allow to define generic\n[Pub/Sub](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern) clients.\nUsers are responsible for implementation of the generic Pub/Sub client interface provided\nby Zserio. However, Zserio provides sample implementations of several Pub/Sub backends:\n   * [C++ Zserio Pub/Sub Mosquitto backend](https://github.com/ndsev/zserio-pubsub-mosquitto-cpp)\n   * [Java Zserio Pub/Sub Paho MQTT backend](https://github.com/ndsev/zserio-pubsub-paho-mqtt-java)\n   * [Python Zserio Pub/Sub Paho MQTT backend](https://github.com/ndsev/zserio-pubsub-paho-mqtt-python)\n\nNote that Zserio doesn't provide any Pub/Sub server. There are various implementations of servers\n(e.g. [mosquitto](https://github.com/eclipse/mosquitto)) and it's the responsibility of the user's Pub/Sub\nclient implementation to communicate with the appropriate server.\n\n## Contributions\n\nContributions are very welcome but we encourage to open a\n[discussion](https://github.com/ndsev/zserio/discussions/new/choose) or\nan [issue](https://github.com/ndsev/zserio/issues/new/choose) first to agree on a solution or to avoid useless\nwork in case we are already solving a similar problem. Please see [Contribution Guide](CONTRIBUTING.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fndsev%2Fzserio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fndsev%2Fzserio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fndsev%2Fzserio/lists"}