{"id":19184038,"url":"https://github.com/cryostatio/cryostat","last_synced_at":"2025-10-17T01:50:12.515Z","repository":{"id":198525347,"uuid":"580443474","full_name":"cryostatio/cryostat","owner":"cryostatio","description":"Secure JDK Flight Recorder management for containerized JVMs ","archived":false,"fork":false,"pushed_at":"2025-04-24T19:50:27.000Z","size":9339,"stargazers_count":24,"open_issues_count":54,"forks_count":10,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-05-02T07:59:59.059Z","etag":null,"topics":["containers","docker","flightrecorder","java","jdk","jfr","jmx","jvm","kubernetes","mission-control","missioncontrol","observability","oci","openshift","podman","profiling"],"latest_commit_sha":null,"homepage":"https://cryostat.io","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cryostatio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-12-20T15:18:21.000Z","updated_at":"2025-04-24T17:30:39.000Z","dependencies_parsed_at":"2024-04-25T15:53:46.213Z","dependency_job_id":"8c6bda15-ec19-45c8-b3fa-f121f3993e0d","html_url":"https://github.com/cryostatio/cryostat","commit_stats":{"total_commits":1741,"total_committers":27,"mean_commits":64.48148148148148,"dds":0.6042504307869041,"last_synced_commit":"6612edfca222eac9472bcfda418346b71fc667bf"},"previous_names":["cryostatio/cryostat3","cryostatio/cryostat"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryostatio%2Fcryostat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryostatio%2Fcryostat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryostatio%2Fcryostat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cryostatio%2Fcryostat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cryostatio","download_url":"https://codeload.github.com/cryostatio/cryostat/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252973675,"owners_count":21834107,"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":["containers","docker","flightrecorder","java","jdk","jfr","jmx","jvm","kubernetes","mission-control","missioncontrol","observability","oci","openshift","podman","profiling"],"created_at":"2024-11-09T11:05:56.989Z","updated_at":"2025-10-17T01:50:07.466Z","avatar_url":"https://github.com/cryostatio.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca target=\"_blank\" href=\"https://cryostat.io\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./docs/images/cryostat_logo_hori_rgb_reverse.svg\"\u003e\n    \u003cimg src=\"./docs/images/cryostat_logo_hori_rgb_default.svg\"\u003e\n  \u003c/picture\u003e\n\u003c/a\u003e\n\n[![CI build and push](https://github.com/cryostatio/cryostat/actions/workflows/push-ci.yaml/badge.svg \"Continuous Integration\")](https://github.com/cryostatio/cryostat/actions/workflows/push-ci.yaml)\n[![Quay Repository](https://img.shields.io/badge/Container_Image-cryostat/cryostat-teal.svg \"Quay Repository\")](https://quay.io/repository/cryostat/cryostat)\n[![Google Group : Cryostat Development](https://img.shields.io/badge/Google_Group-Cryostat_Development-blue.svg \"Mailing List\")](https://groups.google.com/g/cryostat-development)\n\nA container-native JVM application which acts as a bridge to other containerized JVMs and exposes a secure API for producing, analyzing, and retrieving JDK Flight Recorder data from your cloud workloads.\n\n## SEE ALSO\n\n* [cryostat.io](https://cryostat.io) : upstream documentation website with user\n  guides, tutorials, blog posts, and other user-facing content. Start here if\n  what you've read so far sounds interesting and you want to know more as a\n  **user**, rather than as a _developer_. Here you will find instructions on\n  how to install Cryostat using the\n  [Cryostat Operator](https://github.com/cryostatio/cryostat-operator), how to\n  configure your applications to enable connectivity, and how to use the\n  Cryostat application.\n\n* [cryostat-core](https://github.com/cryostatio/cryostat-core) : the core library\n  providing a convenience wrapper and headless stubs for use of JFR using\n  JDK Mission Control internals.\n\n* [cryostat-operator](https://github.com/cryostatio/cryostat-operator) : an Operator\n  for deploying Cryostat in your OpenShift or Kubernetes cluster.\n\n* [cryostat-helm](https://github.com/cryostatio/cryostat-helm): a Helm Chart for\n  deploying Cryostat in your OpenShift or Kubernetes cluster\n\n* [cryostat-web](https://github.com/cryostatio/cryostat-web) : the React frontend\n  included as a submodule in Cryostat and built into Cryostat's OCI images.\n\n* [JDK Mission Control](https://github.com/openjdk/jmc) : the desktop application\n  complement to JFR. Some parts of JMC are borrowed and re-used to form the basis of\n  Cryostat. JMC is still a recommended tool for more full-featured analysis of JFR\n  files beyond what Cryostat currently implements.\n\n* [binjr](https://github.com/binjr/binjr) : a timeseries visualization desktop\n  application which supports reading JFR files\n\nThis repository contains the source code for Cryostat versions 3.0 and later. Cryostat (née \"container-jfr\") versions prior to 3.0\nare located at [cryostatio/cryostat-legacy](https://github.com/cryostatio/cryostat-legacy). Container images from both are published\nto the same [`quay.io`](https://quay.io/repository/cryostat/cryostat) repository.\n\n## CONTRIBUTING\n\nWe welcome and appreciate any contributions from our community. Please visit our guide on how you can take part in improving Cryostat.\n\n[See contribution guide →](./CONTRIBUTING.md)\n\n## REQUIREMENTS\n\nBuild requirements:\n- git\n- JDK 21+\n- Maven v3+\n- [Quarkus CLI](https://quarkus.io/guides/cli-tooling) v3.4.1+ (Recommended)\n- [Podman](https://podman.io/docs/installation) 4.7+\n\nSmoketest run requirements:\n- [`yq`](https://github.com/mikefarah/yq) v4.35.1+\n- [docker-compose](https://docs.docker.com/compose/install/) v1.29.2\n- [podman-docker](https://packages.fedoraproject.org/pkgs/podman/podman-docker/) (Optional)\n\nGeneral run requirements:\n- an OpenShift or Kubernetes cluster\n  - recommended installation methods: [`cryostat-operator`](https://github.com/cryostatio/cryostat-operator) or [`cryostat-helm`](https://github.com/cryostatio/cryostat-helm)\n- OR any other container platform which can host OCI containers\n\n## BUILD\n\nThis project uses Quarkus, the Supersonic Subatomic Java Framework.\n\nIf you want to learn more about Quarkus, please visit its website: https://quarkus.io/ .\n\n### Setup Dependencies\n\nFor ease and convenience, it is suggested to use `podman` with the following configurations:\n\n```bash\n$ systemctl --user enable --now podman.socket\n```\n\n`$HOME/.bashrc` (or equivalent shell configuration)\n```bash\nexport DOCKER_HOST=unix:///run/user/$(id -u)/podman/podman.sock\n```\n\n`$HOME/.testcontainers.properties`\n```properties\ndocker.client.strategy=org.testcontainers.dockerclient.UnixSocketClientProviderStrategy\nryuk.container.image=quay.io/infinispan-test/ryuk\\:0.8.1\ntinyimage.container.image=registry.access.redhat.com/ubi9/ubi-micro\nryuk.container.privileged=true\ntestcontainers.reuse.enable=false\n```\n\nInitialize submodules before building:\n\n```bash\n$ git submodule init \u0026\u0026 git submodule update\n$ cd src/main/webui\n$ yarn install \u0026\u0026 yarn yarn:frzinstall\n$ cd -\n```\n\n### Build the application container image\n\nThe application image can be created using:\n\n```bash\n# With Maven\n$ ./mvnw package\n# Or with Quarkus CLI\n$ quarkus build\n```\n\n### Build and run the application in dev mode\n\nYou can run your application in dev mode that enables live coding using:\n\n```bash\n# With Maven\n$ ./mvnw compile quarkus:dev\n# Or with Quarkus CLI\n$ quarkus dev\n```\n\nThis will run Cryostat as a local JVM process hooked up to its frontend, and required companion services in containers. Any changes made to the backend or frontend sources, `application.properties`, `pom.xml`, etc. will trigger automatic rebuilds and live-coding.\n\n\u003e **_NOTE:_**  Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8181/q/dev/.\n\n### Run the application with dev mode frontend\n\nYou can run the server setup with a live coding frontend instance using:\n\n`terminal 1`\n```bash\n$ ./smoktest.bash -t\n```\n\n`terminal 2`\n```bash\n$ cd /path/to/cryostat-web # this can be ./src/main/webui , or a separate clone of the cryostat-web repository\n$ yarn yarn:frzinstall\n$ yarn start:dev\n```\n\nThis will run Cryostat, required companion services, and test applications in a podman/docker compose container setup. Changes to frontend sources in `/path/to/cryostat-web` will trigger automatic rebuilds and live-coding of the web UI only. This is often useful for frontend development compared to the previous dev mode setup, since it allows for the full suite of test applications to be deployed.\n\nThe Quarkus Dev UI is not available in this setup.\n\n## RUN\n\n### Local Smoketesting\n\nDevelopment on this project is primarily done using `podman`, though things should generally work when using `docker` as well.\nEnsure you have performed the `podman` setup above first, then build the container image and run smoketests.\nThis will spin up the cryostat container and its required services.\n\n```bash\n# build Cryostat container, clean up any dangling container images/layers\n$ ./mvnw package ; podman image prune -f\n# alternatively, use Quarkus CLI instead of the Maven wrapper\n$ quarkus build ; podman image prune -f\n# check the available smoketest options\n$ bash smoketest.bash -h\n# run a smoketest scenario\n$ bash smoketest.bash -O # without the -O flag, the smoketest will pull the latest development image version, rather than the one you just built\n```\n\nTo make containers' names DNS-resolvable from the host machine, do:\n```bash\n$ git clone https://github.com/figiel/hosts libuserhosts\n$ cd libuserhosts\n$ make PREFIX=$HOME/bin all install\n$ echo 'export LD_PRELOAD=$HOME/bin/lib/libuserhosts.so' \u003e\u003e ~/.bashrc\n$ export LD_PRELOAD=$HOME/bin/lib/libuserhosts.so\n```\n(this will require a C compiler toolchain present on your development machine)\n\nYou can verify that this setup works by running `smoketest.bash`, and then in another terminal:\n```bash\n$ LD_PRELOAD=$HOME/bin/libuserhosts.so ping auth\n$ LD_PRELOAD=$HOME/bin/libuserhosts.so curl http://auth:8080\n$ LD_PRELOAD=$HOME/bin/libuserhosts.so firefox http://auth:8080\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcryostatio%2Fcryostat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcryostatio%2Fcryostat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcryostatio%2Fcryostat/lists"}