{"id":45497506,"url":"https://github.com/joel-jeremy/java-config-library-benchmarks","last_synced_at":"2026-02-22T17:39:36.703Z","repository":{"id":144584434,"uuid":"502921549","full_name":"joel-jeremy/java-config-library-benchmarks","owner":"joel-jeremy","description":"Benchmark of Java configuration libraries","archived":false,"fork":false,"pushed_at":"2026-01-20T22:57:51.000Z","size":1472,"stargazers_count":8,"open_issues_count":10,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-21T07:07:12.451Z","etag":null,"topics":["benchmark","configuration","java","properties"],"latest_commit_sha":null,"homepage":"","language":"Java","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/joel-jeremy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-06-13T11:10:32.000Z","updated_at":"2026-01-20T21:30:48.000Z","dependencies_parsed_at":"2024-04-03T22:32:26.688Z","dependency_job_id":"f5bb0168-4878-417d-8bee-210ec419bc12","html_url":"https://github.com/joel-jeremy/java-config-library-benchmarks","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/joel-jeremy/java-config-library-benchmarks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joel-jeremy%2Fjava-config-library-benchmarks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joel-jeremy%2Fjava-config-library-benchmarks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joel-jeremy%2Fjava-config-library-benchmarks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joel-jeremy%2Fjava-config-library-benchmarks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joel-jeremy","download_url":"https://codeload.github.com/joel-jeremy/java-config-library-benchmarks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joel-jeremy%2Fjava-config-library-benchmarks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29720569,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T15:10:41.462Z","status":"ssl_error","status_checked_at":"2026-02-22T15:10:04.636Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["benchmark","configuration","java","properties"],"created_at":"2026-02-22T17:39:36.596Z","updated_at":"2026-02-22T17:39:36.693Z","avatar_url":"https://github.com/joel-jeremy.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Benchmarks Results\n\nEach push to the repository will trigger a benchmark run. The project uses a special build task which merges all the benchmark results into a single report file. Latest benchmark results will be viewable via GitHub Pages: [https://joel-jeremy.github.io/java-config-library-benchmarks/](https://joel-jeremy.github.io/java-config-library-benchmarks/)\n\n## Libraries\n\n(Alphabetical order)\n\n- [Cfg4j](https://github.com/cfg4j/cfg4j)\n- [Externalized Properties](https://github.com/joel-jeremy/externalized-properties)\n- [Gestalt Config](https://github.com/gestalt-config/gestalt)\n- [Lightbend Config](https://github.com/lightbend/config)\n- [MicroProfile Config - Geronimo](https://github.com/apache/geronimo-config)\n- [MicroProfile Config - Helidon](https://github.com/oracle/helidon)\n- [MicroProfile Config - KumuluzEE](https://github.com/kumuluz/kumuluzee-config-mp)\n- [MicroProfile Config - MicroBean](https://github.com/microbean/microbean-microprofile-config)\n- [MicroProfile Config - SmallRye](https://github.com/smallrye/smallrye-config)\n- [Owner](https://github.com/matteobaccan/owner)\n- [Spring Core](https://github.com/spring-projects/spring-framework) (Directly using Spring's [Environment](https://github.com/spring-projects/spring-framework/blob/main/spring-core/src/main/java/org/springframework/core/env/Environment.java))\n\n## Benchmark Setup\n\nEach library is setup with its \"default\" configurations. In addition to the defaults, additional configuration/setup is done to \"load\" a single `.properties` file. For the benchmark runs, each library will load properties/configuration from the loaded `.properties` file (all with exactly the same file contents).\n\n## Benchmark Run\n\nBenchmarks require Java 25.\n\nTo run the benchmarks and generate reports locally, use the `runAllJmh.sh` script.\n\n## Adding New Benchmarks\n\nTo introduce a new benchmark, create a new gradle subproject and:\n\n1. Create an `Benchmark` abstract class under `io.github.joeljeremy7.java.config.lib.benchmarks` package.\n2. Create benchmark methods in `Benchmark` class  \n    - Minimum required methods are:\n        1. Retrieve a `String` property/configuration\n        2. Retrieve an `int` property/configuration\n3. Create an `Avgt` and `Thrpt` nested class within `Benchmark` which extends the abstract `Benchmark` class so that they execute the same benchmarks.\n4. Annotate `Avgt` and `Thrpt` nested classes with appropriate JMH annotations to record results: avgt (ns) and thrpt (ms).\n5. Add the subproject's `jmh` task to the `runAllJmh.sh` script.\n6. Add the subproject's folder name to the `benchmarks.yaml` GitHub Actions workflow:\n    ```yaml\n    jmh:\n      needs: build\n      runs-on: ubuntu-latest\n      strategy:\n        matrix:\n          module:\n            - ...\n            - my-config-library\n    ```\n7. Add project repository link to [Libraries](#libraries) section.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoel-jeremy%2Fjava-config-library-benchmarks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoel-jeremy%2Fjava-config-library-benchmarks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoel-jeremy%2Fjava-config-library-benchmarks/lists"}