{"id":20800047,"url":"https://github.com/vlingo/xoom-schemata","last_synced_at":"2025-05-06T23:46:57.984Z","repository":{"id":37688031,"uuid":"154098350","full_name":"vlingo/xoom-schemata","owner":"vlingo","description":"The VLINGO XOOM Schema Registry.","archived":false,"fork":false,"pushed_at":"2024-11-06T15:08:37.000Z","size":4918,"stargazers_count":20,"open_issues_count":19,"forks_count":9,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-31T04:12:14.243Z","etag":null,"topics":["commands","data","envelope","events","jvm","messaging","schema","schema-registry","semantic-versioning","vlingo","vlingo-schemata"],"latest_commit_sha":null,"homepage":"https://vlingo.io","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vlingo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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-10-22T06:46:57.000Z","updated_at":"2025-02-24T07:00:50.000Z","dependencies_parsed_at":"2023-11-07T17:43:40.890Z","dependency_job_id":"3e9da046-777c-49de-b411-daf400b42c50","html_url":"https://github.com/vlingo/xoom-schemata","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vlingo%2Fxoom-schemata","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vlingo%2Fxoom-schemata/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vlingo%2Fxoom-schemata/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vlingo%2Fxoom-schemata/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vlingo","download_url":"https://codeload.github.com/vlingo/xoom-schemata/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252788409,"owners_count":21804282,"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":["commands","data","envelope","events","jvm","messaging","schema","schema-registry","semantic-versioning","vlingo","vlingo-schemata"],"created_at":"2024-11-17T18:12:04.850Z","updated_at":"2025-05-06T23:46:57.967Z","avatar_url":"https://github.com/vlingo.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# xoom-schemata\n\n[![Gitter](https://img.shields.io/gitter/room/xoom-platform-java/community?logo=gitter)](https://gitter.im/vlingo-platform-java/community)\n[![Docker Stars](https://img.shields.io/docker/stars/vlingo/xoom-schemata?logo=docker)](https://hub.docker.com/r/vlingo/xoom-schemata)\n[![Docker Pulls](https://img.shields.io/docker/pulls/vlingo/xoom-schemata?logo=docker)](https://hub.docker.com/r/vlingo/xoom-schemata)\n[![Build](https://github.com/vlingo/xoom-schemata/workflows/Build/badge.svg)](https://github.com/vlingo/xoom-schemata/actions?query=workflow%3ABuild)\n\n\nThe VLINGO XOOM Schema Registry.\n\n\n## Quick Start\n\n### Docker\n\nThe quickest way to run XOOM Schemata is to use the [docker image](https://hub.docker.com/r/vlingo/xoom-schemata)\npublished by the VLINGO XOOM Team:\n\n```bash\ndocker run -it --rm -eXOOM_ENV=dev -p '9019:9019' vlingo/xoom-schemata\n```\n\n**TIP:** When using Docker to run XOOM Designer integrated with XOOM Schemata, name your Schemata container with `--name xoom-schemata` so that you can reference it in Designer-Schemata integration options:\n\n```bash\ndocker run -it --rm -eXOOM_ENV=dev -p9019:9019 --name xoom-schemata vlingo/xoom-schemata\n```\n\nSelect the Designer menu OPTIONS, and use the image name as the host.\n\n![designer-schemata-options](https://gblobscdn.gitbook.com/assets%2F-LLB-V2sJmANuWISDmBf%2F-Mf55LjxPvSPsYiTK6vx%2F-Mf58G5gBNAUtjyn-YXB%2Fxoom-designer-schemata-integration.png?alt=media\u0026token=bb655841-ef75-4368-8d6f-6e22b58ceab5)\n\n### Maven\n\n:warning: Make sure you are using a Java 8 JDK.\n\nBuild \u003cpre\u003e\u003ccode\u003e\u0026 \"\u003cb\u003e{yourInstallPath}\u003c/b\u003e\\xoom-schemata\\mvnw.cmd\" clean package -Pfrontend -f \"\u003cb\u003e{yourInstallPath}\u003c/b\u003e\\xoom-schemata\\pom.xml\"\u003c/code\u003e\u003c/pre\u003e\n*e.g. \u003cpre\u003e\u003ccode\u003e\u0026 \"\u003cb\u003ed:\\vlingo\u003c/b\u003e\\xoom-schemata\\mvnw.cmd\" clean package -Pfrontend -f \"\u003cb\u003ed:\\vlingo\u003c/b\u003e\\xoom-schemata\\pom.xml\"\u003c/code\u003e\u003c/pre\u003e*\n\nRun \u003cpre\u003e\u003ccode\u003ejava -jar target/xoom-schemata-\u003cb\u003e{version}\u003c/b\u003e-jar-with-dependencies.jar\u003c/code\u003e\u003c/pre\u003e\n*e.g. \u003cpre\u003e\u003ccode\u003ejava -jar target/xoom-schemata-\u003cb\u003e1.8.2-SNAPSHOT\u003c/b\u003e-jar-with-dependencies.jar\u003c/code\u003e\u003c/pre\u003e*\n\nWe provide an interface to allow for easy retrieval of schemata and \nschemata meta information, e.g. available versions and publication status.\nThe UI/Frontend can be accessed at http://localhost:9019.\n\n\n## Advanced Options\n\n### Build\n\nIf you have maven installed, you can run the full build using:\n`mvn clean package -Pfrontend`\nElse, there is also a maven wrapper, so you can also build using the command in [Quick Start](#quick-start).\n\nThe maven build takes care of the following:\n* Generate sources for the schema grammars in `src/main/antlr4`\n* Build the backend application\n* Download the dependencies for the UI build (`node` \u0026 `npm`) [Maven Profile 'frontend']\n* Run the UI build (`npm run export` in `src/main/frontend`) [Maven Profile 'frontend']\n* Package the backend, frontend and dependencies within a fat jar\n\n#### Docker Build\n\nAfter building, you can optionally build the docker container with `docker build . -t vlingo/xoom-schemata`.\n\n#### GraalVM Build\n```bash\nmvn clean package -Pfrontend -Pnative-image\n```\n```bash\n./target/xoom-schemata\n```\nMore details [GraalVM](GraalVM.md)\n\n### Run\n\nIf you want to configure the schemata runtime profile, you have several options:\n\u003cpre\u003e\u003ccode\u003ejava -jar target/xoom-schemata-\u003cb\u003e{version}\u003c/b\u003e-jar-with-dependencies.jar \u003cb\u003e{arg}\u003c/b\u003e\u003c/code\u003e\u003c/pre\u003e\n\n|arg |What does it do?                            |Properties file|\n|--- |---                                         |---|\n|dev |starts with an in-memory HSQLDB             |src/main/resources/xoom-schemata-dev.properties |\n|prod|starts with a preconfigured PostgreSQL DB   |src/main/resources/xoom-schemata-prod.properties|\n|[env](#env)|uses environment variables for configuration|src/main/resources/xoom-schemata-env.properties |\n\n*e.g. \u003cpre\u003e\u003ccode\u003ejava -jar target/xoom-schemata-\u003cb\u003e1.5.1-SNAPSHOT\u003c/b\u003e-jar-with-dependencies.jar \u003cb\u003edev\u003c/b\u003e\u003c/code\u003e\u003c/pre\u003e*\n\n#### env:\nThe defaults are the same as configured in **dev**.\n|Property|Variable|Default|\n|---|---|---|\n|server.port        |XOOM_SCHEMATA_PORT       |9019|\n|database.type      |XOOM_SCHEMATA_DB_TYPE    |io.vlingo.xoom.schemata.infra.persistence.HSQLDBSchemataObjectStore|\n|database.driver    |XOOM_SCHEMATA_DB_DRIVER  |org.hsqldb.jdbc.JDBCDriver|\n|database.url       |XOOM_SCHEMATA_DB_URL     |jdbc:hsqldb:mem:|\n|database.name      |XOOM_SCHEMATA_DB_NAME    |xoom_schemata|\n|database.username  |XOOM_SCHEMATA_DB_USER    |SA|\n|database.password  |XOOM_SCHEMATA_DB_PASS    ||\n|database.originator|XOOM_SCHEMATA_DB_ORIGINATOR|MAIN| \n\n#### Docker Run:\nYou can run the registry with an in-memory database within docker using `docker run -p9019:9019 vlingo/xoom-schemata`.\nThe docker image supports the three runtime profiles by setting `$XOOM_ENV` inside the Dockerfile accordingly.\n\n\n## Usage\n\nYou can find detailed instructions at:\nhttps://docs.vlingo.io/xoom-schemata#working-with-schema-specifications-and-schema-dependencies.\n\nAn example for talking to the schema registry as part of a maven build:\nhttps://github.com/vlingo/xoom-examples/tree/master/xoom-schemata-integration\n\n\n### API Examples\n\n#### Schema Definitions:\n\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d '{\"organizationId\":\"\",\"name\":\"Org1\",\"description\":\"My organization.\"}' http://localhost:9019/api/organizations`\n\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d '{\"organizationId\":\"\",\"unitId\":\"\",\"name\":\"Unit1\",\"description\":\"My unit.\"}' http://localhost:9019/api/organizations/{orgId}/units`\n\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d '{\"organizationId\":\"\",\"unitId\":\"\",\"contextId\":\"\",\"namespace\":\"io.vlingo.xoom.schemata\",\"description\":\"Schemata Context.\"}' http://localhost:9019/api/organizations/{orgId}/units/{unitId}/contexts`\n\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d '{\"organizationId\":\"\",\"unitId\":\"\",\"contextId\":\"\",\"schemaId\":\"\",\"category\":\"Event\",\"name\":\"SchemaDefined\",\"description\":\"Schemata was defined event.\"}' http://localhost:9019/api/organizations/{orgId}/units/{unitId}/contexts/{contextId}/schemas`\n\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d '{\"organizationId\":\"\",\"unitId\":\"\",\"contextId\":\"\",\"schemaId\":\"\",\"schemaVersionId\":\"\",\"description\":\"Initial revision.\",\"specification\":\"event SchemaDefined { type eventType }\",\"status\":\"Draft\",\"previousVersion\":\"0.0.0\",\"currentVersion\":\"1.0.0\"}' http://localhost:9019/api/organizations/{orgId}/units/{unitId}/contexts/{contextId}/schemas/{schemaId}/versions`\n\n#### Schema Queries:\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/organizations`\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/organizations/{orgId}`\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/organizations/{orgId}/units`\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/organizations/{orgId}/units/{unitId}`\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/organizations/{orgId}/units/{unitId}/contexts`\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/organizations/{orgId}/units/{unitId}/contexts/{contextId}`\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/organizations/{orgId}/units/{unitId}/contexts/{contextId}/schemas`\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/organizations/{orgId}/units/{unitId}/contexts/{contextId}/schemas/{schemaId}`\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/organizations/{orgId}/units/{unitId}/contexts/{contextId}/schemas/{schemaId}/versions`\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/organizations/{orgId}/units/{unitId}/contexts/{contextId}/schemas/{schemaId}/versions/{versionId}`\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/schema/categories`\n  - Enumeration names: Command, Data, Document, Envelope, Event, Unknown\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/schema/scopes`\n  - Enumeration names: Public, Private\n\n`$ curl -i -X GET -H \"Accept: application/json\" http://localhost:9019/api/code/{reference}/{language}`\n  - Takes the form:     /code/Org:Unit:Context:Schema:Version/Language\n  - Or more precisely:  /code/vlingo:PlatformDevelopment:io.vlingo.xoom.schemata:SchemaDefined:1.0.0/java\n\n#### Schema Modifications:\n\n`$ curl -i -X PATCH -H \"Content-Type: application/json\" -d 'My organization changed.' http://localhost:9019/api/organizations/{organizationId}/description`\n`$ curl -i -X PATCH -H \"Content-Type: application/json\" -d 'Org123' http://localhost:9019/api/organizations/{organizationId}/name`\n\n`$ curl -i -X PATCH -H \"Content-Type: application/json\" -d 'My unit changed.' http://localhost:9019/api/organizations/{orgId}/units/{unitId}/description`\n`$ curl -i -X PATCH -H \"Content-Type: application/json\" -d 'Unit123' http://localhost:9019/api/organizations/{orgId}/units/{unitId}/description`\n\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d 'My context changed.' http://localhost:9019/api/organizations/{organizationId}/units/{unitId}/contexts/{contextId}/description`\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d 'io.vlingo.xoom.schemata.changed' http://localhost:9019/api/organizations/{organizationId}/units/{unitId}/contexts/{contextId}/namespace`\n\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d 'Command' http://localhost:9019/api/organizations/{organizationId}/units/{unitId}/contexts/{contextId}/schemas/{schemaId}/cateogry`\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d 'DefineSchema command defined.' http://localhost:9019/api/organizations/{organizationId}/units/{unitId}/contexts/{contextId}/schemas/{schemaId}/description`\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d 'DefineSchema' http://localhost:9019/api/organizations/{organizationId}/units/{unitId}/contexts/{contextId}/schemas/{schemaId}/name`\n\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d 'Initial revision of SchemaDefined.' http://localhost:9019/api/organizations/{orgId}/units/{unitId}/contexts/{contextId}/schemas/{schemaId}/versions/{versionId}/description`\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d 'event SchemaDefined { type eventType\\n timestamp occurredOn }' http://localhost:9019/api/organizations/{orgId}/units/{unitId}/contexts/{contextId}/schemas/{schemaId}/versions/{versionId}/specification`\n`$ curl -i -X POST -H \"Content-Type: application/json\" -d 'Published' http://localhost:9019/api/organizations/{orgId}/units/{unitId}/contexts/{contextId}/schemas/{schemaId}/versions/{versionId}/status`\n\n\n## Development\n\n### Backend\n\n#### Prerequisites:\n* Java 8\n* Maven, 3.6.0 is known to work, alternatively, you can rely on the bundled maven wrapper\n\n* Generate schema specification sources: `mvn generate-sources`\n* Test: `mvn test`\n* Build fat jar: `mvn package`\n\n### Frontend\n\n#### Prerequisites:\n* Node 12.18.3 is known to work\n* If you use vscode, recommended extensions: Svelte for VS Code, Svelte Intellisense\n\nThe UI is built using Svelte and Svelte-Materialify.\n\n* Project setup `npm install`\n* Compiles and hot-reloads for development `npm run dev`, makes the UI available on http://localhost:8080/\n* Compile to static resources for production `npm run export`\n\nWhen running the UI via `npm run dev`, API calls are proxied to a local backend instance.\nIt is assumed to be running at http://localhost:9019/.\n\nYou can run the backend from:\n* the IDE, in case you want to debug the backend in parallel. `XoomInitializer.java`, which gets generated on build, has the `main` method.\n* the jar, in case you do not want to delve into the backend code: [Quick Start](#quick-start).\n* Docker, in case you don't want bother w/ Java at all: [Docker Run](#docker-run).\n\nNote that this also pulls in the current UI, so don't get confused.\n\n\n### Testing\n\n#### Unit Tests:\n\nUnit tests live in `src/test/java` and are executed by the Maven build (e.g. `mvn test`) as you would expect.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvlingo%2Fxoom-schemata","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvlingo%2Fxoom-schemata","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvlingo%2Fxoom-schemata/lists"}