{"id":15038647,"url":"https://github.com/reproto/reproto","last_synced_at":"2025-04-05T08:07:07.944Z","repository":{"id":38153924,"uuid":"90840179","full_name":"reproto/reproto","owner":"reproto","description":"Rethinking Protocols","archived":false,"fork":false,"pushed_at":"2023-10-07T10:49:12.000Z","size":8758,"stargazers_count":121,"open_issues_count":29,"forks_count":9,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-29T07:06:27.480Z","etag":null,"topics":["csharp","dsl","idl","java","javascript","json","language-server-protocol","protocol-specification","python","rust","swift"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/reproto.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","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":"2017-05-10T08:29:41.000Z","updated_at":"2025-02-17T03:14:58.000Z","dependencies_parsed_at":"2024-06-21T18:57:15.769Z","dependency_job_id":"8ab2fa28-4473-410e-9443-56cb8723d545","html_url":"https://github.com/reproto/reproto","commit_stats":{"total_commits":1050,"total_committers":5,"mean_commits":210.0,"dds":0.04476190476190478,"last_synced_commit":"08009e6d28c7d1edee53ec6012af116d78f8f1a6"},"previous_names":[],"tags_count":67,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reproto%2Freproto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reproto%2Freproto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reproto%2Freproto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reproto%2Freproto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reproto","download_url":"https://codeload.github.com/reproto/reproto/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247305934,"owners_count":20917208,"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":["csharp","dsl","idl","java","javascript","json","language-server-protocol","protocol-specification","python","rust","swift"],"created_at":"2024-09-24T20:39:27.281Z","updated_at":"2025-04-05T08:07:07.924Z","avatar_url":"https://github.com/reproto.png","language":"Rust","readme":"# [![reproto](/gfx/logo.128.png?raw=true \"reproto\")](https://github.com/reproto)\n\n[![Build Status][github-badge]][github-action]\n[![Chat on Discord][discord-badge]][discord-url]\n\n[github-badge]: https://github.com/reproto/reproto/workflows/Rust/badge.svg\n[github-action]: https://github.com/reproto/reproto/actions\n[discord-badge]: https://img.shields.io/discord/558644981137670144.svg?logo=discord\u0026style=flat-square\n[discord-url]: https://discord.gg/v5AeNkT\n\nA better way to define schemas for your JSON.\n\n## Introduction\n\nIf you want to take the system for a spin, please go to \u003chttps://reproto.github.io\u003e.\n\nReproto is:\n\n* **A compiler** capable of generating code for [various languages].\u003cbr /\u003e\n  [try it out][trycompiler] \u0026ndash; [documentation][langsupport]\n* **A language server** providing first-class integration with a large number of editors.\u003cbr /\u003e\n  [documentation][langserver]\n* **A custom interface description language** that permits describing the schema of JSON and\n  services in a concise, easy to understand way.\u003cbr /\u003e\n  [documentation][idl]\n* **Early and extensive soundness checking**, with excellent error handling. We catch schema issues\n  before you know that you have them.\u003cbr /\u003e\n  [ui tests](/it/ui/checks)\n* **A derive command**, capable of deriving schemas directly from JSON.\u003cbr /\u003e\n  [try it out][tryderive] \u0026ndash; [documentation][derive].\n* **A semantic version checker** which verifies that modifications to schemas do not violate\n  [semantic versioning].\u003cbr /\u003e\n  [documentation][semver]\n* **A build system with a package manager using build manifests**, giving you all the control you\n  need to integrate reproto into your project.\u003cbr /\u003e\n  [documentation][build manifests]\n* **A rich, markdown-based documentation generator**.\u003cbr /\u003e\n  [documentation][docgen]\n\nThese things combined support an ecosystem where schemas can be maintained and shared across\nmany teams.\n\nYou can install a binary version of reproto by running:\n\n```\ncurl https://raw.githubusercontent.com/reproto/reproto/master/install.sh -sSf | bash\n```\n\n**Note:** This project is in an early stage. Things will change a lot. Please take it for a spin,\nbut avoid building large repositories of schemas for now.\n\n[idl]: /doc/spec.md\n[derive]: /doc/derive.md\n[various languages]: #language-support\n[langsupport]: /doc/usage/language-support.md\n[semver]: /doc/semck.md\n[semantic versioning]: https://semver.org\n[docgen]: #generating-documentation\n[central repository]: https://github.com/reproto/reproto-index\n[build manifests]: /doc/manifest.md\n[stdweb]: https://github.com/koute/stdweb\n[trycompiler]: https://reproto.github.io/?input=reproto\u0026output=java\u0026package=example.type\n[langserver]: /doc/usage/language-server.md\n[tryderive]: https://reproto.github.io/?input=json\u0026output=java\u0026package=example.type\n\n## Getting Started\n\n* See the [documentation] for an overview of how the reproto language and its build manifest works.\n* See [examples] for some example specifications and projects.\n* See the [integration tests] for even more examples on how protocol specifications can be used.\n* See [CHANGELOG.md] for past and coming changes.\n\n[documentation]: /doc/README.md\n[examples]: /examples\n[integration tests]: /it\n[CHANGELOG.md]: /CHANGELOG.md\n\n## Helping Out\n\nYou want to help out? Great!\n\nYou might want to start on issues marked with [good first issue].\nIf you have a support for a programming language that you feel is lacking, please help out with\n[language support].\n\nFor any of these, just poke the issue with a quick `I want to do this!`.\nIf mentoring instructions are lacking, they will be made available as soon as possible.\nAlso make sure to [join our Gitter channel].\n\n[good first issue]: https://github.com/reproto/reproto/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22\n[language support]: https://github.com/reproto/reproto/issues?q=is%3Aissue+is%3Aopen+label%3Alang-support\n[join our Gitter channel]: https://gitter.im/reproto/reproto\n\n## Language Support\n\n| Language     | Tracking Issue | JSON | [gRPC] | HTTP/1.1*                  |\n|--------------|----------------|------|--------|----------------------------|\n| [Java]       |                | ✔️    | ✔️      | ✔️  [test][java-http]       |\n| [Python]     |                | ✔️    | ✖️      | ✔️  [test][python-requests] |\n| [C#]         |                | ✔️    | ✖️      | ✖️                          |\n| [Rust]       |                | ✔️    | ✖️      | ✔️  [test][rust-reqwest]    |\n| [JavaScript] |                | ✔️    | ✖️      | ✖️                          |\n| [Swift]      |                | ✔️    | ✖️      | ✖️                          |\n| [Go]         |                | ✔️    | ✖️      | ✖️                          |\n| [Dart]       | [#61]          | ✔️    | ✖️      | ✖️                          |\n\n[#61]: https://github.com/reproto/reproto/issues/61\n*: HTTP/1.1 support is actively being outlined in [#2](https://github.com/reproto/reproto/issues/2)\n\n[Java]: /doc/usage/language-support.md#java\n[Python]: /doc/usage/language-support.md#python\n[C#]: /doc/usage/language-support.md#csharp\n[Rust]: /doc/usage/language-support.md#rust\n[JavaScript]: /doc/usage/language-support.md#javascript\n[Swift]: /doc/usage/language-support.md#swift\n[Go]: /doc/usage/language-support.md#go\n[Dart]: /doc/usage/language-support.md#dart\n[gRPC]: https://grpc.io\n[java-http]: /it/java_okhttp2/proto/test.reproto\n[python-requests]: /it/python_requests/proto/test.reproto\n[rust-reqwest]: /it/rust_reqwest/proto/test.reproto\n\n## Generating Documentation\n\n`reproto` can generate rich markdown-based documentation from your specifications.\n\nGo to \u003chttps://reproto.github.io/reproto/doc-examples/\u003e to see what this documentation looks like.\n\nThese have been generated from the [examples project] using [tools/update-doc-examples].\n\n[examples project]: /examples/\n[tools/update-doc-examples]: /tools/update-doc-examples\n\n## Installing from Source\n\nMake sure you have [gotten started with Rust][rust-get-started].\n\nInitialize submodules:\n\n```bash\ngit submodule update --init\n```\n\nPack syntax highlighting and themes:\n\n```bash\ncargo build-syntax\ncargo build-themes\n```\n\nBuild and install the CLI.\nThis will install `reproto` into `~/.cargo/bin`, make sure it is in your PATH:\n\n```bash\ncargo install --path cli reproto\n```\n\n[rust-get-started]: https://rustup.rs\n\n## Tools\n\n* [reproto-vim], a VIM plugin that provides syntax highlighting.\n* [reproto-maven], Maven plugin that integrates reproto into the build lifecycle of a maven project.\n* [reproto-vscode], a visual studio code extension providing syntax highlighting and in-editor error diagnostics.\n\n[reproto-vim]: https://github.com/reproto/reproto-vim\n[reproto-maven]: https://github.com/reproto/reproto-maven-plugin\n[reproto-vscode]: https://github.com/reproto/reproto-vscode\n\n## Testing\n\nThis project includes an extensive set of integration tests.\n\nSee `cargo it --help` for documentation on what can be done.\n\nSuites are fast tests which compiles a given set of rules, and compares with expected output stored\nin this repository.\n\n```bash\ncargo it --suites\n```\n\nTo run UI tests:\n\n```bash\ncargo it --ui\n```\n\nProjects are complete project tests.\nThese are projects written for various programming languages, and are generally harder to build.\n\n```bash\ncargo it --projects\n```\n\nTo run all tests, do:\n\n```bash\ncargo it --all\n```\n\nFor more information, run `make help`.\n\n#### Testing Rust Projects\n\nInstall Rust: https://rustup.rs\n\n#### Testing Dart Projects\n\nInstall Dart SDK: https://dart.dev/get-dart\n\n#### Testing Python Projects\n\nInstall Python.\n\nAll python testing requires `requests` to be installed.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freproto%2Freproto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freproto%2Freproto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freproto%2Freproto/lists"}