This is a sample application demonstrating Quarkus features and best practices

Overview

Quarkus Superheroes Sample

Table of Contents

Introduction

This is a sample application demonstrating Quarkus features and best practices. The application allows superheroes to fight against supervillains. The application consists of several microservices, communicating either synchronously via REST or asynchronously using Kafka. All the data used by the applications are on the characterdata branch of this repository.

Here is an architecture diagram of the application: Superheroes architecture diagram

The main UI allows you to pick one random Hero and Villain by clicking on New Fighters. Then, click Fight! to start the battle. The table at the bottom shows the list of previous fights. Fight screen

Running Locally via Docker Compose

Pre-built images for all of the applications in the system can be found at quay.io/quarkus-super-heroes.

Pick one of the 4 versions of the application from the table below and execute the appropriate docker compose command from the quarkus-super-heroes directory.

NOTE: You may see errors as the applications start up. This may happen if an application completes startup before one if its required services (i.e. database, kafka, etc). This is fine. Once everything completes startup things will work fine.

There is a watch-services.sh script that can be run in a separate terminal that will watch the startup of all the services and report when they are all up and ready to serve requests.

Description Image Tag Docker Compose Run Command Docker Compose Run Command with Prometheus Monitoring
JVM Java 11 java11-latest docker-compose -f deploy/docker-compose/java11.yml up --remove-orphans docker-compose -f deploy/docker-compose/java11.yml -f deploy/docker-compose/prometheus.yml up --remove-orphans
JVM Java 17 java17-latest docker-compose -f deploy/docker-compose/java17 up --remove-orphans docker-compose -f deploy/docker-compose/java17.yml -f deploy/docker-compose/prometheus.yml up --remove-orphans
Native compiled with Java 11 native-java11-latest docker-compose -f deploy/docker-compose/native-java11.yml up --remove-orphans docker-compose -f deploy/docker-compose/native-java11.yml -f deploy/docker-compose/prometheus.yml up --remove-orphans
Native compiled with Java 17 native-java17-latest docker-compose -f deploy/docker-compose/native-java17.yml up --remove-orphans docker-compose -f deploy/docker-compose/native-java17.yml -f deploy/docker-compose/prometheus.yml up --remove-orphans

Once started the main application will be exposed at http://localhost:8080. If you want to watch the Event Statistics UI, that will be available at http://localhost:8085.

If you launched Prometheus monitoring, Prometheus will be available at http://localhost:9090.

Deploying to Kubernetes

Pre-built images for all of the applications in the system can be found at quay.io/quarkus-super-heroes.

Deployment descriptors for these images are provided in the deploy/k8s directory. There are versions for OpenShift, Minikube, Kubernetes, and KNative.

The only real difference between the Minikube and Kubernetes descriptors is that all the application Services in the Minikube descriptors use type: NodePort so that a list of all the applications can be obtained simply by running minikube service list.

Routing

Both the Minikube and Kubernetes descriptors also assume there is an Ingress Controller installed and configured. There is a single Ingress in the Minikube and Kubernetes descriptors denoting / and /api/fights paths. You may need to add/update the host field in the Ingress as well in order for things to work.

Both the ui-super-heroes and the rest-fights applications need to be exposed from outside the cluster. On Minikube and Kubernetes, the ui-super-heroes Angular application communicates back to the same host and port as where it was launched from under the /api/fights path. See the routing section in the UI project for more details.

On OpenShift, the URL containing the ui-super-heroes host name is replaced with rest-fights. This is because the OpenShift descriptors use Route objects for gaining external access to the application. In most cases, no manual updating of the OpenShift descriptors is needed before deploying the system. Everything should work as-is.

Additionally, there is also a Route for the event-statistics application. On Minikube or Kubernetes, you will need to expose the event-statistics application, either by using an Ingress or doing a kubectl port-forward. The event-statistics application runs on port 8085.

Versions

Pick one of the 4 versions of the system from the table below and deploy the appropriate descriptor from the deploy/k8s directory. Each descriptor contains all of the resources needed to deploy a particular version of the entire system.

NOTE: These descriptors are NOT considered to be production-ready. They are basic enough to deploy and run the system with as little configuration as possible. The databases and Kafka broker deployed are not highly-available and do not use any Kubernetes operators for management or monitoring. They also only use ephemeral storage.

For production-ready Kafka brokers, please see the Strimzi documentation for how to properly deploy and configure production-ready Kafka brokers on Kubernetes.

You can also try out a fully hosted and managed Kafka service.

Description Image Tag OpenShift Descriptor Minikube Descriptor Kubernetes Descriptor KNative Descriptor
JVM Java 11 java11-latest java11-openshift.yml java11-minikube.yml java11-kubernetes.yml java11-knative.yml
JVM Java 17 java17-latest java17-openshift.yml java17-minikube.yml java17-kubernetes.yml java17-knative.yml
Native compiled with Java 11 native-java11-latest native-java11-openshift.yml native-java11-minikube.yml native-java11-kubernetes.yml native-java11-knative.yml
Native compiled with Java 17 native-java17-latest native-java17-openshift.yml native-java17-minikube.yml native-java17-kubernetes.yml native-java17-knative.yml

Monitoring

There are also Kubernetes deployment descriptors for Prometheus monitoring in the deploy/k8s directory (prometheus-openshift.yml, prometheus-minikube.yml, prometheus-kubernetes.yml). Each descriptor contains the resources necessary to monitor all of the applications in the system.

The OpenShift descriptor will automatically create a Route for Prometheus. On Kubernetes/Minikube you may need to expose the Prometheus service in order to access it from outside your cluster, either by using an Ingress or by using kubectl port-forward. On Minikube, the Prometheus Service is also exposed as a NodePort.

NOTE: These descriptors are NOT considered to be production-ready. They are basic enough to deploy Prometheus with as little configuration as possible. It is not highly-available and does not use any Kubernetes operators for management or monitoring. It also only uses ephemeral storage.

For production-ready Prometheus instances, please see the Prometheus Operator documentation for how to properly deploy and configure production-ready instances.

The Prometheus configuration also uses static configuration for the applications. Prometheus does support the ability to discover applications via annotations. That is not used here, though, because the name of the namespace would need to be known ahead of time and placed into the Prometheus configuration. There is a sample configuration file that contains this configuration for reference.

Comments
  • Add SmallRye Stork service discovery

    Add SmallRye Stork service discovery

    opened by edeandrea 14
  • Introduce Pact contract tests

    Introduce Pact contract tests

    @holly-cummins & I had a talk at Devoxx Belgium about Pact contract testing:

    • VIdeo replay: https://youtu.be/vYwkDPrzqV8
    • Slides: https://speakerdeck.com/hollycummins/how-to-avoid-common-pitfalls-with-modern-microservices-testing-c2a33ee0-ca9d-413e-b01e-cbd25853132a

    We used the Quarkus superheroes app as the foundation for our demos. Currently all the code resides in my own personal fork. We need to get this into the main repo.

    The code, as-is, will not break anything, but it also will not be executed during any CI/CD process, or dev mode/continuous testing.

    There are a few caveats that need to be sorted out.

    1. The Pact tests use the free tier within Pactflow broker - https://quarkus-super-heroes.pactflow.io.
      • There is a CI/CD robot user that has credentials we can store as GitHub secrets, but the larger problem is that the account we currently use is tied to my (@edeandrea's) redhat.com email address. Ideally we should have a more "generic" user to own the account.
      • Under an account you can assign individual users with permissions. @holly-cummins and I are currently in there as admin users.
      • @cescoffier / @maxandersen how do you want to handle this? I can add you both as users in the current Pactflow and you can explore, or I can demo it for you so you get an understanding of it. Let me know your thoughts.
        • You need to authenticate with the broker even to perform read actions
    2. The Pact tests as they currently are written will not run by default - they have to have flags to enable them
      • This is because, in its current state, Pact does not work in dev mode/continuous testing. There are some issues on the Pact side and some work on the Quarkus side
      • This way we can safely merge in the code without breaking any of the existing CI/CD workflows and/or dev mode/continuous testing within any of the apps
      • @holly-cummins has already started work on that. In our Devoxx demo we showed it working in continuous testing on the provider side. That was done with a local patch to Pact and the beginnings of a Quarkus extension which @holly-cummins is building
    3. From a CI perspective we should hook in, at a minimum, the provider verification tests into the simple build/test workflow AND the nightly CI process that tests against Quarkus main
      • The simple build/test workflow runs against all PRs as well as the first workflow against any pushes to main.

    @holly-cummins did I miss anything?

    enhancement fights-service villains-service heroes-service Automation 
    opened by edeandrea 13
  • Introduce a different database for each microservice ?

    Introduce a different database for each microservice ?

    All three Villain, Hero and Fight microservices use a Postgres database. What about having a different database type for each microservice?

    We could use Postgres, MySQL and MariaDB, for example.

    enhancement help wanted 
    opened by agoncal 13
  • The generated Deployment YAML is not valid when set quarkus.openshift.deployment-kind=Deployment

    The generated Deployment YAML is not valid when set quarkus.openshift.deployment-kind=Deployment

    Describe the bug When building projects and changing the generated deployment resource by setting quarkus.openshift.deployment-kind=Deployment property for Maven build, the generated YAML for the Deployment resource doesn't contain .spec.template.metadata and its child elements.

    To Reproduce Steps to reproduce the behavior:

    1. Run maven build with quarkus.openshift.deployment-kind=Deployment property setting.
    ./mvnw clean package \ 
     -Dquarkus.profile=openshift-17 \
     -Dquarkus.kubernetes.deploy=true \
     -Dquarkus.openshift.deployment-kind=Deployment
    
    1. Open the target/kubernetes/openshift.yml file and look for YAML for the Deployment resource.

    2. .spec.template.metadata and child elements didn't get generated.

    Expected behavior .spec.template.metadata and its child elements e.g. labels, and annotations should be generated.

    Desktop (please complete the following information):

    • OS: macOS Ventura
    • JDK: Java SE build 17.0.5+9-LTS-191
    • Maven: mvnw comes with the project

    Additional context Sample generated YAML of Deployment resource.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        app.openshift.io/vcs-url: <<unknown>>
        app.openshift.io/connects-to: "fights-db,fights-kafka,apicurio,rest-villains,rest-heroes,otel-collector"
        app.quarkus.io/commit-id: 58303663091232da528a9eecfcd74f0c592f558d
        app.quarkus.io/build-timestamp: 2022-11-28 - 14:42:55 +0000
        prometheus.io/scrape: "true"
        prometheus.io/path: /q/metrics
        prometheus.io/port: "8082"
        prometheus.io/scheme: http
      labels:
        app.kubernetes.io/name: rest-fights
        app.kubernetes.io/part-of: fights-service
        app.kubernetes.io/version: "1.0"
        app: rest-fights
        application: fights-service
        system: quarkus-super-heroes
        app.openshift.io/runtime: quarkus
      name: rest-fights
    spec:
      replicas: 1
      selector:
        matchLabels:
          app.kubernetes.io/name: rest-fights
          app.kubernetes.io/part-of: fights-service
          app.kubernetes.io/version: "1.0"
      template:
        spec:
          containers:
            - env:
                - name: JAVA_APP_JAR
                  value: /deployments/quarkus-run.jar
              envFrom:
                - secretRef:
                    name: rest-fights-config-creds
                - configMapRef:
                    name: rest-fights-config
              image: quay.io/quarkus-super-heroes/rest-fights:1.0
              imagePullPolicy: Always
              livenessProbe:
                failureThreshold: 3
                httpGet:
                  path: /q/health/live
                  port: 8082
                  scheme: HTTP
                initialDelaySeconds: 0
                periodSeconds: 30
                successThreshold: 1
                timeoutSeconds: 10
              name: rest-fights
              ports:
                - containerPort: 8082
                  name: http
                  protocol: TCP
              readinessProbe:
                failureThreshold: 3
                httpGet:
                  path: /q/health/ready
                  port: 8082
                  scheme: HTTP
                initialDelaySeconds: 0
                periodSeconds: 30
                successThreshold: 1
                timeoutSeconds: 10
    
    bug 
    opened by audomsak 7
  • Missing spaces in the super powers

    Missing spaces in the super powers

    The imports.sql had an import issue. The superpowers are missing some spaces. For example: WillInvisibilityLongevityMaster. It should be "Will Invisibility Longevity Master"

    opened by cescoffier 7
  • Added two endpoints on Fight so it can ping both Heroes and Villains

    Added two endpoints on Fight so it can ping both Heroes and Villains

    In production, both Heroes and Villains microservices are not be visible from the outside world, just from the Fight microservice. For that, invoking the hello endpoints on Heroes and Villains becomes impossible.

    I've added two endpoints on Fights (@Path("/hello/heroes") and @Path("/hello/villains")) so we can "ping" Heroes and Villains from Fights:

    curl http://localhost:8082/api/fights/hello
    curl http://localhost:8082/api/fights/hello/heroes
    curl http://localhost:8082/api/fights/hello/villains
    

    I've also added some debug logging

    opened by agoncal 6
  • Bump surefire-plugin.version from 3.0.0-M5 to 3.0.0-M7

    Bump surefire-plugin.version from 3.0.0-M5 to 3.0.0-M7

    Bumps surefire-plugin.version from 3.0.0-M5 to 3.0.0-M7. Updates maven-surefire-plugin from 3.0.0-M5 to 3.0.0-M7

    Release notes

    Sourced from maven-surefire-plugin's releases.

    3.0.0-M7

    🚀 New features and improvements

    🐛 Bug Fixes

    📦 Dependency updates

    👻 Maintenance

    3.0.0-M6

    ... (truncated)

    Commits
    • fcdd766 [maven-release-plugin] prepare release surefire-3.0.0-M7
    • 559db4c [SUREFIRE-2086] Management of temporary files (#535)
    • bce6b43 [SUREFIRE-2067] Improve site configuration
    • ec47652 move this version changelog to a dedicated page (#539)
    • 535855a [SUREFIRE-2077] Allow consecutive spaces in argLine (#527)
    • 2cf4674 [SUREFIRE-2075] Only set thread count if spec'd
    • 7008175 Bump javacc from 7.0.10 to 7.0.11 (#524)
    • 03cafca Bump javassist from 3.22.0-GA to 3.29.0-GA
    • 8fa3098 [SUREFIRE-2083] Remove redundant config from maven-shade-plugin
    • 17628ad [SUREFIRE-2081] Upgrade Parent to 36
    • Additional commits viewable in compare view

    Updates maven-failsafe-plugin from 3.0.0-M5 to 3.0.0-M7

    Release notes

    Sourced from maven-failsafe-plugin's releases.

    3.0.0-M7

    🚀 New features and improvements

    🐛 Bug Fixes

    📦 Dependency updates

    👻 Maintenance

    3.0.0-M6

    ... (truncated)

    Commits
    • fcdd766 [maven-release-plugin] prepare release surefire-3.0.0-M7
    • 559db4c [SUREFIRE-2086] Management of temporary files (#535)
    • bce6b43 [SUREFIRE-2067] Improve site configuration
    • ec47652 move this version changelog to a dedicated page (#539)
    • 535855a [SUREFIRE-2077] Allow consecutive spaces in argLine (#527)
    • 2cf4674 [SUREFIRE-2075] Only set thread count if spec'd
    • 7008175 Bump javacc from 7.0.10 to 7.0.11 (#524)
    • 03cafca Bump javassist from 3.22.0-GA to 3.29.0-GA
    • 8fa3098 [SUREFIRE-2083] Remove redundant config from maven-shade-plugin
    • 17628ad [SUREFIRE-2081] Upgrade Parent to 36
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    version-upgrade rhbq 
    opened by dependabot[bot] 5
  • Add SmallRye Stork service discovery

    Add SmallRye Stork service discovery

    opened by edeandrea 5
  • Bump quarkus.platform.version from 2.6.3.Final to 2.7.0.Final

    Bump quarkus.platform.version from 2.6.3.Final to 2.7.0.Final

    Bumps quarkus.platform.version from 2.6.3.Final to 2.7.0.Final. Updates quarkus-bom from 2.6.3.Final to 2.7.0.Final

    Commits
    • 44bae09 [maven-release-plugin] prepare release 2.7.0.Final
    • 64873d4 Hide Kogito instead of disabling it
    • 08bcddf Disable Kogito for 2.7.0.Final
    • 67afd21 Merge pull request #460 from gsmet/amazon-services-1.0.4
    • 255d612 Upgrade Amazon Services to 1.0.4
    • 024bbaa Merge pull request #459 from jamesnetherton/cq-2.7.0
    • f309e0c Merge pull request #457 from loicmathieu/google-cloud-services-1-0-0
    • 03a8317 Google Cloud services extension pack 1.0.0
    • f7ebbc5 Upgrade to Camel Quarkus 2.7.0
    • c701559 Merge pull request #458 from beikov/bp-update
    • Additional commits viewable in compare view

    Updates quarkus-maven-plugin from 2.6.3.Final to 2.7.0.Final

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    version-upgrade waiting-for/quarkus-release 
    opened by dependabot[bot] 5
  • add trailing slash to Dockerfile COPY

    add trailing slash to Dockerfile COPY

    Run cd ui-super-heroes && docker build . and the build fails with the following error. Adding /'s fixes it.

    Sending build context to Docker daemon  658.9kB
    Step 1/10 : FROM registry.access.redhat.com/ubi8/nodejs-16:1 as builder
     ---> 0ffebd6de0e2
    Step 2/10 : COPY --chown=1001:1001 package*.json $HOME
    When using COPY with more than one source file, the destination must be a directory and end with a /
    

    Output of docker version:

    Client: Docker Engine - Community
     Version:           20.10.18
     API version:       1.41
     Go version:        go1.18.6
     Git commit:        b40c2f6
     Built:             Thu Sep  8 23:12:30 2022
     OS/Arch:           linux/amd64
     Context:           default
     Experimental:      true
    
    Server: Docker Engine - Community
     Engine:
      Version:          20.10.18
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.18.6
      Git commit:       e42327a
      Built:            Thu Sep  8 23:10:10 2022
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.6.8
      GitCommit:        9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
     runc:
      Version:          1.1.4
      GitCommit:        v1.1.4-0-g5fd4c4d
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
    
    opened by joshgav 4
  • Database pods are failing with `curl: command not found`

    Database pods are failing with `curl: command not found`

    I deployed a few weeks ago and everything spun up healthy. Today, I tried to spin up in OpenShift and am seeing errors with the heroes & villains db pods with this:

    postgresql 16:14:10.52
    postgresql 16:14:10.52 Welcome to the Bitnami postgresql container
    postgresql 16:14:10.52 Subscribe to project updates by watching https://github.com/bitnami/containers
    postgresql 16:14:10.52 Submit issues and feature requests at https://github.com/bitnami/containers/issues
    postgresql 16:14:10.52
    postgresql 16:14:10.53 INFO ==> ** Starting PostgreSQL setup **
    postgresql 16:14:10.54 INFO ==> Validating settings in POSTGRESQL_* env vars..
    postgresql 16:14:10.54 INFO ==> Loading custom pre-init scripts...
    postgresql 16:14:10.55 INFO ==> Loading user's custom files from /docker-entrypoint-preinitdb.d ...
    /docker-entrypoint-preinitdb.d/..2022_10_06_15_42_44.4190271301/get-data.sh: line 3: curl: command not found
    

    I love this demo, I hope this can be fixed soon! I use this to test OpenTelemetry things. Thank you! Here is how I deployed:

    oc apply -f https://raw.githubusercontent.com/quarkusio/quarkus-super-heroes/main/deploy/k8s/java17-openshift.yml
    oc apply -f https://raw.githubusercontent.com/quarkusio/quarkus-super-heroes/main/deploy/k8s/monitoring-openshift.yml
    
    bug 
    opened by sallyom 3
  • Fights service shouldn't use client side load balancing when deployed in knative

    Fights service shouldn't use client side load balancing when deployed in knative

    The fight service shouldn't use Stork's client-side load balancing when deployed in KNative. This breaks because if the heroes/villains services scale to 0, then the client side load balancing in the fights service won't have any downstream clients.

    bug fights-service waiting-for/quarkus-release 
    opened by edeandrea 4
  • Add OpenTelemetry in Azure ContainerApps

    Add OpenTelemetry in Azure ContainerApps

    ATM OpenTelemetry is still not supported in ACA.

    • https://github.com/microsoft/azure-container-apps/issues/289
    • https://github.com/ezYakaEagle442/aca-java-petclinic-mic-srv/blob/main/iac/bicep/aca/aca.bicep#L223
    • https://github.com/ezYakaEagle442/aca-java-petclinic-mic-srv/blob/main/docker/petclinic-customers-service/Dockerfile#L17
    • https://github.com/microsoft/azure-container-apps/issues/290
    • https://docs.microsoft.com/en-us/azure/azure-monitor/app/java-in-process-agent#point-the-jvm-to-the-jar-file
    • https://github.com/microsoft/azure-container-apps/issues/208#issuecomment-1231697920
    enhancement azure 
    opened by agoncal 2
  • Improve profile-based configuration for local deployments

    Improve profile-based configuration for local deployments

    Follow-up to #93 where profiles were added to make local deployment to kubernetes easier.

    quarkusio/quarkus#26781 (coming in Quarkus 2.12) allows for hierarchical profile configuration. Once this is in place, some of the current profile configurations can be cleaned up a bit so things aren't duplicated.

    enhancement fights-service villains-service heroes-service event-stats-service waiting-for/quarkus-release 
    opened by edeandrea 0
  • Investigate removing prometheus from architecture

    Investigate removing prometheus from architecture

    Now that the OpenTelemetry Collector is part of the architecture and collecting metrics, investigate whether it can process/handle metrics as well, potentially removing Prometheus from the architecture.

    enhancement Monitoring 
    opened by edeandrea 0
  • Implement ping/pong on event stats websockets

    Implement ping/pong on event stats websockets

    Currently the websockets in the event stats service don't implement ping/pong, so after a while the browser drops the websocket connection. When this happens the user needs to refresh the page.

    This would need to be implemented on the server side (TeamStatsWebSocket & TopWinnerWebSocket) as well as on the client (index.html).

    enhancement good first issue help wanted event-stats-service 
    opened by edeandrea 0
Owner
QuarkusIO
Quarkus: Supersonic Subatomic Java
QuarkusIO
An app that weighs the pros and cons of a decision to help you make the best decision

An app that weighs the pros and cons of a decision to help you make the best decision

Mambo Bryan 5 Feb 2, 2022
Quiltflower is a fork of Fernflower adding additional features for use with the Quilt toolchain.

Quiltflower Quiltflower is a fork of Fernflower adding additional features for use with the Quilt toolchain. Changes include: Javadoc application Mult

null 449 Jan 5, 2023
Spigot plugin featuring a wide variety of features for a server based on modules.

CTSNC, standing for Custom Chat, Tablist, Scoreboard, NameTag & Chat, is a all-round solution based on multiple modules each featuring a dedicated function while CTSNC acts as the core. Here all configuration files are housed for easy management and customization.

null 2 Dec 30, 2022
A Local implementation of a java library functions to create a serverside and clientside application which will communicate over TCP using given port and ip address.

A Local implementation of java library functions to create a serverside and clientside application which will communicate over TCP using given port and ip address.

Isaac Barry 1 Feb 12, 2022
This is a basic Java project focused on applying object-oriented design in a real world application

Email-Administration-System-in-Java This is a basic Java project focused on applying object-oriented design in a real world application. Email Adminis

Muhammad Asad 5 Feb 4, 2022
An android application to make students life easier by reducing their backpack weight.

Smart-Schooling An android application to make students life easier by reducing their backpack weight. Dont forget to ⭐ the repo Overview Almost every

Thamizh Kaniyan 3 Jan 31, 2022
The project was created using the API of the Spotify application.

Spotify API The project was created using the API of the Spotify application.

Atakan Koçyiğit 3 Jan 27, 2022
A todo app with Alan AI smart voice assistant android application

Todo App A todo app with Alan AI smart voice assistant android application. Experience a hands-free voice app where you can add, edit, delete and make

Venu Sai Madisetti 1 Jan 26, 2022
A demo web application that authenticates users via Wultra Mobile Token.

Demo of Wultra Mobile Token A demo web application that authenticates users via Wultra Mobile Token. Installation Install JDK 11 Install Maven 3.6 Ins

Wultra 1 Jan 31, 2022
RealmeDirac - an open-source Android application written in java

RealmeDirac is an open-source Android application written in java. RealmeDirac is a feature introduced by realme & dirac in realmeUI for sound optimisation, trying to recreate same thing, this is scratch written app aiming to provide same features as realmeDirac..

psionicprjkt 4 Feb 21, 2022
Sauron, the all seeing eye! It is a service to generate automated reports and track migrations, changes and dependency versions for backend services also report on known CVE and security issues.

SAURON - VERSION AND DEPLOYMENT TRACKER DESCRIPTION Sauron, the all seeing eye! It is a service to generate automated reports and track migrations, ch

FREENOWTech 20 Oct 31, 2022
A calculator that performs various operations such as addition, subtraction, multiplication and division of positive and negative values

A calculator that performs various operations such as addition, subtraction, multiplication and division of positive and negative values The calculator also does percentages, square roots and squares

Andrey Fabricio 1 Jan 31, 2022
Tripoli imports raw mass spectrometer data files and supports interactive review and archiving of isotopic data.

Tripoli imports raw mass spectrometer data files and supports interactive review and archiving of isotopic data. Tripoli facilitates visualization of temporal trends and scatter during measurement, statistically rigorous filtering of data, and calculation of statistical parameters.

CIRDLES 7 Dec 15, 2022
Java Notes & Codes for better understanding and it contains all the funtions with examples and also added Cheat Sheet for Revision

Java Notes & Codes for better understanding and it contains all the funtions with examples and also added Cheat Sheet for Revision...

Ujjawal Singh 1 Nov 30, 2022
Automatically discover and tag PII data across BigQuery tables and apply column-level access controls based on confidentiality level.

Automatically discover and tag PII data across BigQuery tables and apply column-level access controls based on confidentiality level.

Google Cloud Platform 18 Dec 29, 2022
A Java to iOS Objective-C translation tool and runtime.

J2ObjC: Java to Objective-C Translator and Runtime Project site: https://j2objc.org J2ObjC blog: https://j2objc.blogspot.com Questions and discussion:

Google 5.9k Dec 29, 2022
Make Slack and Facebook Bots in Java.

JBot Make bots in Java. JBot is a java framework (inspired by Howdyai's Botkit) to make Slack and Facebook bots in minutes. It provides all the boiler

Ram 1.2k Dec 18, 2022
API gateway for REST and SOAP written in Java.

Membrane Service Proxy Reverse HTTP proxy (framework) written in Java, that can be used as an API gateway as a security proxy for HTTP based integrati

predic8 GmbH 389 Dec 31, 2022
An extensible Java framework for building XML and non-XML streaming applications

Smooks Framework This is the Git source code repository for the Smooks Project. Build Status Building Pre-requisites JDK 8 Apache Maven 3.2.x Maven gi

Smooks Framework 353 Dec 1, 2022