{"id":16584667,"url":"https://github.com/igoodie/runtimegoodies","last_synced_at":"2026-02-08T22:31:14.354Z","repository":{"id":40238946,"uuid":"361844316","full_name":"iGoodie/RuntimeGoodies","owner":"iGoodie","description":"♾️ Utility entities to enhance runtime stuff. (Including the ConfiGoodies!)","archived":false,"fork":false,"pushed_at":"2024-10-16T22:13:30.000Z","size":468,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-13T10:58:09.794Z","etag":null,"topics":["configuration","java","java-library","json","orm","runtime","toml","universal"],"latest_commit_sha":null,"homepage":"","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/iGoodie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"patreon":"iGoodie"}},"created_at":"2021-04-26T17:54:54.000Z","updated_at":"2025-08-07T12:22:16.000Z","dependencies_parsed_at":"2024-10-19T03:18:52.371Z","dependency_job_id":null,"html_url":"https://github.com/iGoodie/RuntimeGoodies","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/iGoodie/RuntimeGoodies","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iGoodie%2FRuntimeGoodies","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iGoodie%2FRuntimeGoodies/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iGoodie%2FRuntimeGoodies/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iGoodie%2FRuntimeGoodies/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iGoodie","download_url":"https://codeload.github.com/iGoodie/RuntimeGoodies/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iGoodie%2FRuntimeGoodies/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29247488,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T21:42:34.334Z","status":"ssl_error","status_checked_at":"2026-02-08T21:41:38.468Z","response_time":57,"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":["configuration","java","java-library","json","orm","runtime","toml","universal"],"created_at":"2024-10-11T22:45:14.008Z","updated_at":"2026-02-08T22:31:14.337Z","avatar_url":"https://github.com/iGoodie.png","language":"Java","funding_links":["https://patreon.com/iGoodie","https://www.patreon.com/iGoodie"],"categories":[],"sub_categories":[],"readme":"\u003c!-- Logo --\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://jitpack.io/#iGoodie/RuntimeGoodies\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/iGoodie/RuntimeGoodies/master/.github/assets/logo.png\" height=\"150\" alt=\"RuntimeGoodies Logo\" aria-label=\"RuntimeGoodies Logo\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003c!-- Slogan --\u003e\n\u003cp align=\"center\"\u003e\n  A \u003ca href=\"www.java.com\"\u003eJava\u003c/a\u003e library for representing, reading, validating and fixing externally stored files/configs. \n\u003c/p\u003e\n\n\u003c!-- Badges --\u003e\n\u003cp align=\"center\"\u003e\n  \u003c!-- Main Badges --\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/iGoodie/RuntimeGoodies/master/.github/assets/main-badge.png\" height=\"20px\"/\u003e\n  \u003ca href=\"https://jitpack.io/#iGoodie/RuntimeGoodies\"\u003e\n    \u003cimg src=\"https://jitpack.io/v/iGoodie/RuntimeGoodies.svg\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/iGoodie/RuntimeGoodies/releases\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/iGoodie/RuntimeGoodies\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/iGoodie/RuntimeGoodies/releases\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/iGoodie/RuntimeGoodies?include_prereleases\u0026label=release-snapshot\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/iGoodie/RuntimeGoodies\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/languages/top/iGoodie/RuntimeGoodies\"/\u003e\n  \u003c/a\u003e\n\n  \u003cbr/\u003e\n\n  \u003c!-- Github Badges --\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/iGoodie/RuntimeGoodies/master/.github/assets/github-badge.png\" height=\"20px\"/\u003e\n  \u003ca href=\"https://github.com/iGoodie/RuntimeGoodies/commits/master\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/last-commit/iGoodie/RuntimeGoodies\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/iGoodie/RuntimeGoodies/issues\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/issues/iGoodie/RuntimeGoodies\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/iGoodie/RuntimeGoodies/tree/master/src\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/languages/code-size/iGoodie/RuntimeGoodies\"/\u003e\n  \u003c/a\u003e\n\n  \u003cbr/\u003e\n\n  \u003c!-- Support Badges --\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/iGoodie/RuntimeGoodies/master/.github/assets/support-badge.png\" height=\"20px\"/\u003e\n  \u003ca href=\"https://discord.gg/KNxxdvN\"\u003e\n    \u003cimg src=\"https://img.shields.io/discord/610497509437210624?label=discord\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.patreon.com/iGoodie\"\u003e\n    \u003cimg src=\"https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3DiGoodie%26type%3Dpatrons\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# Description\n\nRuntimeGoodies is a Java 8+ library that aims to solve a fundamental problem: reading \u0026 maintaining program\nconfigurations. It attemps to load external config files into\ndeclared \u003ca href=\"https://en.wikipedia.org/wiki/Plain_old_Java_object\"\u003e\nPOJO\u003ca/\u003es with its custom annotations and validators. It even fixes the config when necessary *(e.g an empty field is\nreplaced by the default value and saved)*\n\nIt comes with a few modules to support following formats:\n\n- \u003ca href=\"https://www.json.org/json-en.html\"\u003eJSON\u003c/a\u003e (module: `com.github.iGoodie.RuntimeGoodies:json:\u003cversion-here\u003e`)\n- \u003ca href=\"https://toml.io/en/v0.4.0\"\u003eTOML 0.4.0\u003c/a\u003e (module: `com.github.iGoodie.RuntimeGoodies:toml:\u003cversion-here\u003e`)\n\nOut of the box, it comes with a built-in way to universally represent entities during runtime called Goodies. Goodies\nare serializable in any format desired. They have a very similar structure\nto \u003ca href=\"https://www.json.org/json-en.html\"\u003eJSON\u003ca/\u003e elements. Goodies do not exist outside the runtime, they are\nin-memory only.\n\n# How to Use?\n\nThis library uses \u003ca href=\"https://jitpack.io/#iGoodie/RuntimeGoodies\"\u003eJitPack\u003ca/\u003e to serve artifacts that can be\ndepended on. If your project is a **Gradle** project, use following steps:\n\n1. Add JitPack repository to your `build.gradle` file:\n\n```groovy\nallprojects {\n    repositories {\n        ...\n        maven { url 'https://jitpack.io' }\n    }\n}\n```\n\n2. Depend on desired release. (Replace `\u003cversion-here\u003e` with the version of choice)\n\n```groovy\ndependencies {\n    implementation 'com.github.iGoodie.RuntimeGoodies:core:\u003cversion-here\u003e'\n    implementation 'com.github.iGoodie.RuntimeGoodies:json:\u003cversion-here\u003e' // Format of choice, see supported formats above\n}\n```\n\nList of all available the versions can be found under \u003ca href=\"https://github.com/iGoodie/RuntimeGoodies/tags\"\u003eGitHub\nReleases\u003ca/\u003e\nsection. Alternatively, `master-SNAPSHOT` can be used to depend on the nightly version (at your own risk).\n\n# Getting Started\n\n1. Create a POJO (ConfiGoodie) to represent the external config file. (In this example, external file is in JSON format)\n\n```java\npublic class ServerConfig extends JsonConfiGoodie {\n\n    @Goodie // \u003c-- Annotate the fields you want to be exposed with @Goodie\n    String username, password;\n\n    @Goodie\n    Date launchDate; // Some values are converted from string!\n\n    @Goodie\n    int port = 3000; // You can declare default values!\n\n    @Goodie\n    DBConnection mongodbConnection; // Other ConfiGoodies/POJOs can be nested too!\n\n    @Goodie\n    DBConnection mysqlConnection = defaultValue(() -\u003e {\n        DBConnection connection = new DBConnection();\n        connection.ports = Arrays.asList(3000, 3001, 3002);\n        return connection;\n    }); // You can declare default values via your own supplier!\n\n    public static class DBConnection {\n\n        @Goodie\n        String uri = \"localhost:3000\";\n\n        @Goodie\n        List\u003cInteger\u003e ports; // You can have Lists as well!\n\n        @Goodie\n        Map\u003cString, String\u003e aliases; // Guess what, Maps too!\n\n    }\n\n}\n```\n\n2. Instance that POJO and let RuntimeGoodie read (and fix if necessary) for you!\n\n```java\npublic class Test {\n\n    public static void main(String[] args) {\n        File configFile = new File(\"path/to/config.json\");\n\n        // Tadaaa! Your config object is now read, validated and fixed accordingly.\n        ServerConfig config = new ServerConfig().readConfig(configFile);\n\n        // Note that, the call above will override the file if changes are made during fixing phase.\n        // Check out the Wiki, if you want to customize that behavior.\n    }\n\n}\n```\n\nIn order to learn more about what else you can do, check the \u003ca href=\"https://github.com/iGoodie/RuntimeGoodies/wiki\"\u003e\nWiki\u003ca/\u003e out!\n\n## Facing an Issue?\n\n- Join our Discord Server - https://discordapp.com/invite/KNxxdvN\n- Create an issue on Github: https://github.com/iGoodie/RuntimeGoodies/issues\n- Contact iGoodie via Discord: iGoodie#1945\n\n## License\n\n\u0026copy; 2021 Taha Anılcan Metinyurt (iGoodie)\n\nFor any part of this work for which the license is applicable, this work is licensed under\nthe [Attribution-NonCommercial-NoDerivatives 4.0 International](http://creativecommons.org/licenses/by-nc-nd/4.0/)\nlicense. (See LICENSE).\n\n\u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-nd/4.0/\"\u003e\u003cimg alt=\"Creative Commons License\" style=\"border-width:0\" src=\"https://i.creativecommons.org/l/by-nc-nd/4.0/88x31.png\" /\u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figoodie%2Fruntimegoodies","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Figoodie%2Fruntimegoodies","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figoodie%2Fruntimegoodies/lists"}