{"id":28442347,"url":"https://github.com/timo-reymann/schemanest","last_synced_at":"2026-05-29T20:00:30.929Z","repository":{"id":289828280,"uuid":"972492789","full_name":"timo-reymann/SchemaNest","owner":"timo-reymann","description":"Where schemas grow, thrive, and scale with your team.","archived":false,"fork":false,"pushed_at":"2026-05-25T03:06:42.000Z","size":1777,"stargazers_count":10,"open_issues_count":3,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-25T05:09:15.626Z","etag":null,"topics":["hackfriday","json-schema"],"latest_commit_sha":null,"homepage":"https://schema-nest.timo-reymann.de/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/timo-reymann.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["timo-reymann"],"custom":["https://www.buymeacoffee.com/timoreymann","Buy me a coffee"]}},"created_at":"2025-04-25T07:02:09.000Z","updated_at":"2026-05-20T12:58:03.000Z","dependencies_parsed_at":"2025-06-04T16:49:50.413Z","dependency_job_id":"4a77dead-bde0-4e23-913f-d28af1625dd1","html_url":"https://github.com/timo-reymann/SchemaNest","commit_stats":null,"previous_names":["timo-reymann/schemanest"],"tags_count":108,"template":false,"template_full_name":null,"purl":"pkg:github/timo-reymann/SchemaNest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timo-reymann%2FSchemaNest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timo-reymann%2FSchemaNest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timo-reymann%2FSchemaNest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timo-reymann%2FSchemaNest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timo-reymann","download_url":"https://codeload.github.com/timo-reymann/SchemaNest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timo-reymann%2FSchemaNest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33668186,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["hackfriday","json-schema"],"created_at":"2025-06-06T06:00:41.086Z","updated_at":"2026-05-29T20:00:30.894Z","avatar_url":"https://github.com/timo-reymann.png","language":"Go","funding_links":["https://github.com/sponsors/timo-reymann","https://www.buymeacoffee.com/timoreymann","Buy me a coffee"],"categories":[],"sub_categories":[],"readme":"SchemaNest\n===\n[![GitHub Release](https://img.shields.io/github/v/tag/timo-reymann/SchemaNest?label=version)](https://github.com/timo-reymann/SchemaNest/releases)\n[![Docker Pulls](https://img.shields.io/docker/pulls/timoreymann/schemanest-cli?style=flat\u0026label=CLI%20docker%20pulls)](https://hub.docker.com/r/timoreymann/schemanest-cli)\n[![Docker Pulls](https://img.shields.io/docker/pulls/timoreymann/schemanest-registry?style=flat\u0026label=Registry%20docker%20pulls)](https://hub.docker.com/r/timoreymann/schemanest-registry)\n[![GitHub all releases download count](https://img.shields.io/github/downloads/timo-reymann/SchemaNest/total)](https://github.com/timo-reymann/SchemaNest/releases)\n[![LICENSE](https://img.shields.io/github/license/timo-reymann/SchemaNest)](https://github.com/timo-reymann/SchemaNest/blob/main/LICENSE)\n[![CircleCI](https://circleci.com/gh/timo-reymann/SchemaNest.svg?style=shield)](https://app.circleci.com/pipelines/github/timo-reymann/SchemaNest)\n[![Renovate](https://img.shields.io/badge/renovate-enabled-green?logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzNjkgMzY5Ij48Y2lyY2xlIGN4PSIxODkuOSIgY3k9IjE5MC4yIiByPSIxODQuNSIgZmlsbD0iI2ZmZTQyZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUgLTYpIi8+PHBhdGggZmlsbD0iIzhiYjViNSIgZD0iTTI1MSAyNTZsLTM4LTM4YTE3IDE3IDAgMDEwLTI0bDU2LTU2YzItMiAyLTYgMC03bC0yMC0yMWE1IDUgMCAwMC03IDBsLTEzIDEyLTktOCAxMy0xM2ExNyAxNyAwIDAxMjQgMGwyMSAyMWM3IDcgNyAxNyAwIDI0bC01NiA1N2E1IDUgMCAwMDAgN2wzOCAzOHoiLz48cGF0aCBmaWxsPSIjZDk1NjEyIiBkPSJNMzAwIDI4OGwtOCA4Yy00IDQtMTEgNC0xNiAwbC00Ni00NmMtNS01LTUtMTIgMC0xNmw4LThjNC00IDExLTQgMTUgMGw0NyA0N2M0IDQgNCAxMSAwIDE1eiIvPjxwYXRoIGZpbGw9IiMyNGJmYmUiIGQ9Ik04MSAxODVsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzI1YzRjMyIgZD0iTTIyMCAxMDBsMjMgMjNjNCA0IDQgMTEgMCAxNkwxNDIgMjQwYy00IDQtMTEgNC0xNSAwbC0yNC0yNGMtNC00LTQtMTEgMC0xNWwxMDEtMTAxYzUtNSAxMi01IDE2IDB6Ii8+PHBhdGggZmlsbD0iIzFkZGVkZCIgZD0iTTk5IDE2N2wxOC0xOCAxOCAxOC0xOCAxOHoiLz48cGF0aCBmaWxsPSIjMDBhZmIzIiBkPSJNMjMwIDExMGwxMyAxM2M0IDQgNCAxMSAwIDE2TDE0MiAyNDBjLTQgNC0xMSA0LTE1IDBsLTEzLTEzYzQgNCAxMSA0IDE1IDBsMTAxLTEwMWM1LTUgNS0xMSAwLTE2eiIvPjxwYXRoIGZpbGw9IiMyNGJmYmUiIGQ9Ik0xMTYgMTQ5bDE4LTE4IDE4IDE4LTE4IDE4eiIvPjxwYXRoIGZpbGw9IiMxZGRlZGQiIGQ9Ik0xMzQgMTMxbDE4LTE4IDE4IDE4LTE4IDE4eiIvPjxwYXRoIGZpbGw9IiMxYmNmY2UiIGQ9Ik0xNTIgMTEzbDE4LTE4IDE4IDE4LTE4IDE4eiIvPjxwYXRoIGZpbGw9IiMyNGJmYmUiIGQ9Ik0xNzAgOTVsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzFiY2ZjZSIgZD0iTTYzIDE2N2wxOC0xOCAxOCAxOC0xOCAxOHpNOTggMTMxbDE4LTE4IDE4IDE4LTE4IDE4eiIvPjxwYXRoIGZpbGw9IiMzNGVkZWIiIGQ9Ik0xMzQgOTVsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzFiY2ZjZSIgZD0iTTE1MyA3OGwxOC0xOCAxOCAxOC0xOCAxOHoiLz48cGF0aCBmaWxsPSIjMzRlZGViIiBkPSJNODAgMTEzbDE4LTE3IDE4IDE3LTE4IDE4ek0xMzUgNjBsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzk4ZWRlYiIgZD0iTTI3IDEzMWwxOC0xOCAxOCAxOC0xOCAxOHoiLz48cGF0aCBmaWxsPSIjYjUzZTAyIiBkPSJNMjg1IDI1OGw3IDdjNCA0IDQgMTEgMCAxNWwtOCA4Yy00IDQtMTEgNC0xNiAwbC02LTdjNCA1IDExIDUgMTUgMGw4LTdjNC01IDQtMTIgMC0xNnoiLz48cGF0aCBmaWxsPSIjOThlZGViIiBkPSJNODEgNzhsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzAwYTNhMiIgZD0iTTIzNSAxMTVsOCA4YzQgNCA0IDExIDAgMTZMMTQyIDI0MGMtNCA0LTExIDQtMTUgMGwtOS05YzUgNSAxMiA1IDE2IDBsMTAxLTEwMWM0LTQgNC0xMSAwLTE1eiIvPjxwYXRoIGZpbGw9IiMzOWQ5ZDgiIGQ9Ik0yMjggMTA4bC04LThjLTQtNS0xMS01LTE2IDBMMTAzIDIwMWMtNCA0LTQgMTEgMCAxNWw4IDhjLTQtNC00LTExIDAtMTVsMTAxLTEwMWM1LTQgMTItNCAxNiAweiIvPjxwYXRoIGZpbGw9IiNhMzM5MDQiIGQ9Ik0yOTEgMjY0bDggOGM0IDQgNCAxMSAwIDE2bC04IDdjLTQgNS0xMSA1LTE1IDBsLTktOGM1IDUgMTIgNSAxNiAwbDgtOGM0LTQgNC0xMSAwLTE1eiIvPjxwYXRoIGZpbGw9IiNlYjZlMmQiIGQ9Ik0yNjAgMjMzbC00LTRjLTYtNi0xNy02LTIzIDAtNyA3LTcgMTcgMCAyNGw0IDRjLTQtNS00LTExIDAtMTZsOC04YzQtNCAxMS00IDE1IDB6Ii8+PHBhdGggZmlsbD0iIzEzYWNiZCIgZD0iTTEzNCAyNDhjLTQgMC04LTItMTEtNWwtMjMtMjNhMTYgMTYgMCAwMTAtMjNMMjAxIDk2YTE2IDE2IDAgMDEyMiAwbDI0IDI0YzYgNiA2IDE2IDAgMjJMMTQ2IDI0M2MtMyAzLTcgNS0xMiA1em03OC0xNDdsLTQgMi0xMDEgMTAxYTYgNiAwIDAwMCA5bDIzIDIzYTYgNiAwIDAwOSAwbDEwMS0xMDFhNiA2IDAgMDAwLTlsLTI0LTIzLTQtMnoiLz48cGF0aCBmaWxsPSIjYmY0NDA0IiBkPSJNMjg0IDMwNGMtNCAwLTgtMS0xMS00bC00Ny00N2MtNi02LTYtMTYgMC0yMmw4LThjNi02IDE2LTYgMjIgMGw0NyA0NmM2IDcgNiAxNyAwIDIzbC04IDhjLTMgMy03IDQtMTEgNHptLTM5LTc2Yy0xIDAtMyAwLTQgMmwtOCA3Yy0yIDMtMiA3IDAgOWw0NyA0N2E2IDYgMCAwMDkgMGw3LThjMy0yIDMtNiAwLTlsLTQ2LTQ2Yy0yLTItMy0yLTUtMnoiLz48L3N2Zz4=)](https://renovatebot.com)\n[![pre-commit](https://img.shields.io/badge/%E2%9A%93%20%20pre--commit-enabled-success)](https://pre-commit.com/)\n[![codecov](https://codecov.io/gh/timo-reymann/SchemaNest/graph/badge.svg?token=I9ZrKsbTsR)](https://codecov.io/gh/timo-reymann/SchemaNest)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=timo-reymann_SchemaNest\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=timo-reymann_SchemaNest)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=timo-reymann_SchemaNest\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=timo-reymann_SchemaNest)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=timo-reymann_SchemaNest\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=timo-reymann_SchemaNest)\n\n\u003cp align=\"center\"\u003e\n\t\u003cimg width=\"300\" src=\"https://raw.githubusercontent.com/timo-reymann/SchemaNest/main/.github/images/NestHub.png\"\u003e\n    \u003cbr /\u003e\n    Where schemas grow, thrive, and scale with your team.\n\u003c/p\u003e\n\n## Features\n\n- Supports uploading and versioning JSON schemas to a central repository.\n- Provides a web interface for browsing and searching schemas.\n- CLI tool for uploading schemas from the command line.\n- Accessible by default for screen-readers and visually impaired people.\n\n## Requirements\n\n- Postgres for production usage (SQLite is only recommended for evaluation and smaller instances)\n\n## Installation\n\n### CLI\n\n#### Docker\n\n```sh\ndocker run --rm -it -v $PWD:/workspace:ro -w /workspace  \\\n  timoreymann/schemanest-cli schema-nest-cli \\\n  --help\n```\n\n#### Native\n\n1. Download the binary `schema-nest-cli*` for your OS from\n   the [latest release](https://github.com/timo-reymann/SchemaNest/releases/latest).\n2. Place the binary into a directory of your `PATH`\n3. Execute `schema-nest-cli`\n\n### Registry\n\n#### Using docker-compose\n\n1. Create a `config.toml`:\n   ```toml\n   # Connect to local database\n   database_dsn = \"postgres://schema-nest:schema-nest@db/schema-nest\"\n\n   # Allow uploads only with authentication\n   enable_upload_authentication = true\n\n   # Define API-Key(s)\n   [[api_keys]]\n   identifier = \"frontend\"\n   # make sure to set this to a proper secret (UUID, hash etc.)\n   key = \"my-super-secret-api-key\"\n   patterns = [\n     # Allow all schemas prefixed with @frontend/\n     \"@frontend/*\",\n     # Allow schema mjml-config\n     \"mjml-config\"\n   ]\n   ```\n2. Create the `docker-compose.yaml`\n    ```yaml\n    services:\n      registry:\n        image: timoreymann/schemanest-registry\n        command:\n          - schema-nest-registry\n          - serve-http\n          - -C\n          - /etc/SchemaNest/config.toml\n        volumes:\n          - ./config.toml:/etc/SchemaNest/config.toml\n        ports:\n          - 8080:8080\n      db:\n        image: postgres:15-alpine\n        environment:\n          POSTGRES_DB: schema-nest\n          POSTGRES_USER: schema-nest\n          POSTGRES_PASSWORD: schema-nest\n        volumes:\n          - schema-nest-db-data:/var/lib/postgresql/data\n        restart: always\n        healthcheck:\n          test: [\"CMD-SHELL\", \"pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}\"]\n          interval: 5s\n          timeout: 5s\n          retries: 5\n    volumes:\n      schema-nest-db-data:\n    ```\n3. Start it up with `docker compose up`\n4. Open your browser at [localhost:8080](http://localhost:8080)\n\n#### Native\n\n1. Download the binary `schema-nest-registry*` for your OS from\n   the [latest release](https://github.com/timo-reymann/SchemaNest/releases/latest).\n2. Execute it with `./schema-nest-registry-{os}-{arch}`\n\n## Usage\n\n```shell\nschema-nest-cli --help\n```\n\n### Registry\n\n```shell\n# Spin up server on 0.0.0.0:8080\nschema-nest-registry serve-http --port \"8080\"\n```\n\n## Motivation\n\nManaging JSON Schemas is not rocket science. But every company I worked on had its own way of doing it. Some used a\nsimple file share, others had a complex setup with multiple repositories and CI/CD pipelines. I wanted to create a\nsolution that is straightforward to use, flexible, and can be adapted to any workflow.\n\nThere are already a few tools out there that do a great job at managing JSON schemas. But they are either too complex or\ntoo resource-intensive for my needs. I wanted to create a tool that is easy to use, lightweight, and can be run on any\nmachine.\n\n## Documentation\n\n### API\n\nThe API definition is managed through OpenAPI 3.0, you can find an up-to-date spec in [openapi.yml](./openapi.yml).\n\nFor the [Redocly UI click here](https://timo-reymann.github.io/SchemaNest/apidocs.html). Please keep in mind that this\nis always the latest development version.\n\nChanges to the API are done when ever possible in a backward-compatible manner. So make sure your consuming code can\nhandle extra fields.\n\n## Contributing\n\nI love your input! I want to make contributing to this project as easy and transparent as possible, whether it's:\n\n- Reporting a bug\n- Discussing the current state of the configuration\n- Submitting a fix\n- Proposing new features\n- Becoming a maintainer\n\nTo get started, please read the [Contribution Guidelines](./CONTRIBUTING.md).\n\n## Development\n\n### Requirements\n\n- [GNU make](https://www.gnu.org/software/make/)\n- [Go](https://go.dev/doc/install)\n- [Docker](https://docs.docker.com/get-docker/)\n- [pre-commit](https://pre-commit.com/)\n- [Node.js](https://nodejs.org/en/download)\n- [yarn](https://classic.yarnpkg.com/lang/en/docs/install/)\n- [zig](https://ziglang.org/learn/getting-started/)\n\n### Test\n\n```sh\nmake test-coverage-report\n```\n\n### Build\n\n```sh\nmake build\n```\n\n### Alternatives\n\n- [Apicurio Registry](https://www.apicur.io/registry/)\n    - Apicurio Registry is a runtime server system that stores a specific set of artifacts as files. Apicurio Registry\n      enables you to add, update, and remove the artifacts from the store using a remote REST API.\n- [Confluence Schema Registry (for Kafka)](https://github.com/confluentinc/schema-registry)\n    - Confluent Schema Registry provides a serving layer for your metadata. It provides a RESTful interface for storing\n      and retrieving your Avro®, JSON Schema, and Protobuf schemas. [...]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimo-reymann%2Fschemanest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimo-reymann%2Fschemanest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimo-reymann%2Fschemanest/lists"}