{"id":22213996,"url":"https://github.com/xmlking/micro-apps","last_synced_at":"2025-07-27T12:32:00.086Z","repository":{"id":37017015,"uuid":"236108779","full_name":"xmlking/micro-apps","owner":"xmlking","description":"Microservices in Post-Kubernetes Era. A polyglot monorepo","archived":false,"fork":false,"pushed_at":"2023-12-08T22:33:23.000Z","size":6049,"stargazers_count":49,"open_issues_count":9,"forks_count":10,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-05-01T20:22:16.713Z","etag":null,"topics":["apache-beam","conventional-changelog","conventional-commits","gitflow","gitflow-workflow","gitops","gradle-kotlin-dsl","jenkins","kotlin","micronaut","microservice","monorepo","quarkusio","semantic-release","semantic-versioning","sprintboot"],"latest_commit_sha":null,"homepage":"https://xmlking.gitbook.io/micro-apps/v/develop/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xmlking.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null},"funding":{"github":["xmlking"],"open_collective":"xmlking"}},"created_at":"2020-01-25T00:55:31.000Z","updated_at":"2024-04-25T10:51:39.000Z","dependencies_parsed_at":"2023-12-08T23:39:41.747Z","dependency_job_id":null,"html_url":"https://github.com/xmlking/micro-apps","commit_stats":null,"previous_names":[],"tags_count":18,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xmlking%2Fmicro-apps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xmlking%2Fmicro-apps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xmlking%2Fmicro-apps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xmlking%2Fmicro-apps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xmlking","download_url":"https://codeload.github.com/xmlking/micro-apps/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227802821,"owners_count":17822113,"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":["apache-beam","conventional-changelog","conventional-commits","gitflow","gitflow-workflow","gitops","gradle-kotlin-dsl","jenkins","kotlin","micronaut","microservice","monorepo","quarkusio","semantic-release","semantic-versioning","sprintboot"],"created_at":"2024-12-02T21:12:53.412Z","updated_at":"2024-12-02T21:12:54.142Z","avatar_url":"https://github.com/xmlking.png","language":"Kotlin","readme":"# Micro Apps\n\nModern microservices for Post-Kubernetes Era. An open source framework for building and deploying distributed applications.  \nThis template _monorepo_ style project allows you to write your application as a modular monolith and deploy it as a set of microservices.\n\nMonorepo(services, pipelines and libs) project to showcase workspace setup with multiple apps and shared libraries  \nThis template project has the best of both worlds: _the development velocity of a monolith, with the scalability, security, and fault-tolerance of microservices._\n\n## Features\n\n1. Modular-monolith distributed applications\n1. **Polyglot** - Support multiple languages (java, kotlin, groovy)\n2. Support multiple app frameworks (apache-beam, cli, micronaut, quarkus)\n3. Support multiple serialization methods (JSON, Avro, ProtoBuf)\n4. A type-safe cascading configuration with [konf](https://github.com/uchuhimo/konf)\n5. Integrated with best testing frameworks ([kotest](https://github.com/kotest/kotest/blob/master/doc/reference.md)\n   , [MockK](https://mockk.io/))\n6. Build **lightweight** Docker and [OCI](https://github.com/opencontainers/image-spec) images\n   with [Jib](https://github.com/GoogleContainerTools/jib)\n7. Build native binaries using [GraalVM](https://www.graalvm.org/)\n8. Cloud Native (Service Mesh, health checks, observability)\n9. Platform independent Observability instrumentation via [OpenTelemetry](https://opentelemetry.io/)\n10. Deployment automation with [kustomize](https://kustomize.io/) and Event-driven Autoscaling\n    with [KEDA](https://keda.sh/)\n11. End-to-End Google Cloud DevOps flow [pop-kustomize](https://github.com/vszal/pop-kustomize)\n12. [JReleaser](https://jreleaser.org/) The quick and effortless way to release your project!\n\n13. [![Check](https://github.com/xmlking/micro-apps/workflows/Check/badge.svg)](https://github.com/xmlking/micro-apps/actions?query=workflow%3ACheck)\n[![Version](https://img.shields.io/github/v/tag/xmlking/micro-apps)](https://github.com/xmlking/micro-apps/tags)\n[![License](https://img.shields.io/github/license/xmlking/micro-apps)](https://github.com/xmlking/micro-apps/blob/develop/LICENSE)\n\n### Quality\n\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=xmlking_jvm-gitops\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=xmlking_jvm-gitops)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=xmlking_jvm-gitops\u0026metric=sqale_rating)](https://sonarcloud.io/dashboard?id=xmlking_jvm-gitops)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=xmlking_jvm-gitops\u0026metric=security_rating)](https://sonarcloud.io/dashboard?id=xmlking_jvm-gitops)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=xmlking_jvm-gitops\u0026metric=reliability_rating)](https://sonarcloud.io/dashboard?id=xmlking_jvm-gitops)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=xmlking_jvm-gitops\u0026metric=bugs)](https://sonarcloud.io/dashboard?id=xmlking_jvm-gitops)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=xmlking_jvm-gitops\u0026metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=xmlking_jvm-gitops)\n\n### Sub Modules\n\n| Services                                         | Libs                      | Pipelines                            |\n|--------------------------------------------------|---------------------------|--------------------------------------|\n| [GraphQL-r2dbc](./services/spring-graphql-r2dbc) | [Core](./libs/core)       | [WordCount](./pipelines/wordcount)   |\n| [Redis OM](./services/redis)                     | [KBeam](./libs/kbeam)     | [Classifier](./pipelines/classifier) |\n| [Streams](./services/streams)                    | [Spring](./libs/spring)   | [Ingestion](./pipelines/ingestion)   |\n| [Account](./services/account)                    | [GraphQL](./libs/graphql) |                                      |\n|                                                  | [Test](./libs/test)       |                                      |\n|                                                  | [Model](./libs/model)     |                                      |\n\n## Setup\n\n### Prerequisites\n\n```shell\nsdk rm java\nsdk i java 17.0.8-zulu\njava --version\n\nsdk rm gradle\nsdk i gradle\ngradle --version\n\nsdk i springboot\nsdk i quarkus\n\n# optional\nsdk i java 21-graal\n# Do you want java 21-graal to be set as default? (Y/n): n\n```\n\n[Oracle GraalVM Container Images](https://blogs.oracle.com/java/post/new-oracle-graalvm-container-images)\n\n### IntelliJ Plugins\n\n1. [Spotless](https://plugins.jetbrains.com/plugin/18321-spotless-gradle)\n2. [Ktlint](https://plugins.jetbrains.com/plugin/15057-ktlint-unofficial-/)\n3. [Kotest](https://plugins.jetbrains.com/plugin/14080-kotest)\n4. [GraphQL](https://plugins.jetbrains.com/plugin/8097-graphql)\n5. [Env files support](https://plugins.jetbrains.com/plugin/9525--env-files-support)\n6. [lombok](https://plugins.jetbrains.com/plugin/6317-lombok)\n\n## Contribution\n\n### Pre-commit checks\n\n```shell\n# spotlessCheck - Checks that sourcecode satisfies formatting steps.\ngradle spotlessCheck\n# spotlessApply - Applies code formatting steps to sourcecode in-place.\ngradle spotlessApply\n```\n\nRun tests, lint, coverage for all subprojects\n\n```shell\ngradle check\n```\n\n### Code Quality\n\n```shell\n# Generates code coverage HTML and XML reports for all enabled test tasks in one project.\ngradle koverMergedReport\n```\n\nSoftware Composition Analysis (SCA) tool that attempts to detect publicly disclosed vulnerabilities contained within a\nproject’s dependencies.\n\n```shell\ngradle dependencyCheckAggregate\n```\n\n### Maintenance\n\n```shell\n# Update versions in libs.versions.toml file\ngradle versionCatalogUpdate --interactive\n```\n\n### Run\n\n#### Docker\n\n\u003e start app dependencies: postgres, redis\n\n```bash\n# start local sonarqube\ndocker compose up postgres # docker compose up -V postgres\n# stop local postgres before restart again\ndocker compose down # docker compose down -v\n```\n\n\u003e start optional CI/CD infra dependencies: sonarqube, nexus\n\n```bash\n# start local sonarqube\ndocker compose up sonarqube # docker compose up -V sonarqube\n# stop local sonarqube before restart again\ndocker compose down\n# (optional) this remove volumes - needed when you upgrade image versions \ndocker compose down -v\n# start local nexus\ndocker compose up nexus\n```\n\n#### Dashboard access\n\n* SonarQube → Browser http://localhost:9000 → `user: admin, password: admin`\n* Grafana → Browser http://localhost:3000/plugins/redis-app/ → `user: admin, password: admin`\n* Redis Insight → Browser http://localhost:8001/\n* Jaeger → Browser http://localhost:16686\n* Kibana → Browser http://localhost:5601\n* Prometheus → Browser http://localhost:9090\n\nSee [gradle commands](docs/advanced/gradle.md) for this project.\n\n### Apps\n\n#### Apache Beam Pipelines\n\n\u003e Explore [Wordcount Pipeline](./pipelines/wordcount/)\n\n\u003e Explore [Streaming Ingestion Pipeline](./pipelines/ingestion/)\n\n\u003e Explore [Classifier Pipeline](./pipelines/classifier/)\n\n#### Quarkus\n\n\u003e Explore [REST, OpenAPI, OpenID Connect, API](./services/greeting/)\n\n\u003e Explore [GraphQL API](./services/person/)\n\n#### Kotlin-gRPC\n\n\u003e Explore [Account-gRPC API](./services/account/)\n\n\u003e Explore [Kotlin-gRPC API](./services/keying/)\n\n\u003e Explore [Kotlin-gRPC API](./services/linking/)\n\n#### Spring\n\n\u003e Explore [Spring-RSocket Chat APP](./services/chat/)\n\n\u003e Explore [Spring CRUD + Redis Search API](./services/entity/)\n\n#### Svelte\n\n\u003e Explore [SvelteKit WebApp](./services/webapp/)\n\n### Libs\n\n#### Reusable libraries\n\n\u003e Explore [Apache Beam Kotlin Extensions](./libs/kbeam/)\n\n\u003e Explore [Shared gRPC Components](./libs/grpc/)\n\n#### Shared code within this repo\n\n\u003e Explore [Shared Core Code](./libs/core/)\n\n\u003e Explore [Shared Model Objects](./libs/model/)\n\n\u003e Explore [Shared Pipelines Code](./libs/pipeline/)\n\n\u003e Explore [Shared Spring Services Code](./libs/spring/)\n\n\u003e Explore [Shared Spring GraphQL Services Code](./libs/graphql/)\n\u003e\n\u003e Explore [Shared ProtoBuf Contracts](./libs/proto/)\n\n\u003e Explore [Shared Test Fixtures](./libs/test/)\n\n### Inspiration\n\n* Creating a [Multi Module Project](https://spring.io/guides/gs/multi-module/)\n* Microservices in a Post-Kubernetes Era [link](https://www.infoq.com/articles/microservices-post-kubernetes)\n* Why is a [workspace](https://nrwl.io/nx/why-a-workspace) (or monorepo) needed?\n* Gradle Setup [arara](https://github.com/cereda/arara)\n* GoogleCloudPlatform's [microservices-demo](https://github.com/GoogleCloudPlatform/microservices-demo)\n* Google Service Weaver: [A Framework for Writing Distributed Applications](https://opensource.googleblog.com/2023/03/introducing-service-weaver-framework-for-writing-distributed-applications.html)\n","funding_links":["https://github.com/sponsors/xmlking","https://opencollective.com/xmlking"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxmlking%2Fmicro-apps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxmlking%2Fmicro-apps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxmlking%2Fmicro-apps/lists"}