{"id":48202874,"url":"https://github.com/saicone/settings","last_synced_at":"2026-04-04T18:29:07.561Z","repository":{"id":216969604,"uuid":"742836381","full_name":"saicone/settings","owner":"saicone","description":"Java library to interpret multiple data formats as flexible configuration","archived":false,"fork":false,"pushed_at":"2025-12-21T02:10:25.000Z","size":423,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-22T23:07:24.245Z","etag":null,"topics":["configuration","configuration-parser","gson","hocon","java","json","settings","toml","yaml"],"latest_commit_sha":null,"homepage":"https://docs.saicone.com/settings","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/saicone.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"Rubenicos"}},"created_at":"2024-01-13T14:15:32.000Z","updated_at":"2025-12-21T02:09:45.000Z","dependencies_parsed_at":"2024-01-29T02:00:30.243Z","dependency_job_id":"e8221f8d-b0b4-4080-b6f8-7ba0bb478b21","html_url":"https://github.com/saicone/settings","commit_stats":null,"previous_names":["saicone/settings"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/saicone/settings","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saicone%2Fsettings","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saicone%2Fsettings/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saicone%2Fsettings/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saicone%2Fsettings/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saicone","download_url":"https://codeload.github.com/saicone/settings/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saicone%2Fsettings/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31408571,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"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","configuration-parser","gson","hocon","java","json","settings","toml","yaml"],"created_at":"2026-04-04T18:29:06.819Z","updated_at":"2026-04-04T18:29:07.545Z","avatar_url":"https://github.com/saicone.png","language":"Java","funding_links":["https://github.com/sponsors/Rubenicos"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eSettings\u003c/h1\u003e\n\n\u003ch4 align=\"center\"\u003eJava library to interpret multiple data formats as flexible configuration.\u003c/h4\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://saic.one/discord\"\u003e\n        \u003cimg src=\"https://img.shields.io/discord/974288218839191612.svg?style=flat-square\u0026label=discord\u0026logo=discord\u0026logoColor=white\u0026color=7289da\"/\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://www.codefactor.io/repository/github/saicone/settings\"\u003e\n        \u003cimg src=\"https://img.shields.io/codefactor/grade/github/saicone/settings?style=flat-square\u0026logo=codefactor\u0026logoColor=white\u0026label=codefactor\u0026color=00b16a\"/\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/saicone/settings\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/languages/code-size/saicone/settings?logo=github\u0026logoColor=white\u0026style=flat-square\"/\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://jitpack.io/#com.saicone/settings\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/v/tag/saicone/settings?style=flat-square\u0026logo=jitpack\u0026logoColor=white\u0026label=JitPack\u0026color=brigthgreen\"/\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://javadoc.saicone.com/settings/\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/JavaDoc-Online-green?style=flat-square\"/\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://docs.saicone.com/settings/\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Saicone-Settings%20Wiki-3b3bb0?logo=github\u0026logoColor=white\u0026style=flat-square\"/\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\nSettings library handle multiple data formats as configuration in a flexible way:\n\n* Node templates and transformation.\n* Node value substitution in non-compatible formats (like json and yaml).\n* Fallback format reader.\n* Iterable nodes.\n* Data update parameters.\n* Comparable paths to get nodes.\n* Multi-layer node values.\n\nCurrently supporting the formats:\n\n* [HOCON](https://github.com/lightbend/config/blob/main/HOCON.md)\n* [JSON](https://www.json.org/) (with [Gson](https://github.com/google/gson))\n* [TOML](https://toml.io/en/v1.0.0)\n* [YAML](http://yaml.org/spec/1.1/current.html)\n\nTake in count this library is not focused as an object serializer, the main purpose is making flexible interactions with multiple data formats at the same time.\n\nIt also has simple methods to get nodes as multiple data types if you want to implement your own object serializer.\n\n```java\n// Load settings from Map\nMap\u003cString, Object\u003e map = new HashMap\u003c\u003e();\nmap.put(\"key\", \"value\");\nmap.put(\"otherkey\", 1234);\n\nSettings settings = new Settings();\nsettings.merge(map);\n\n\n// Settings from any file named \"myfile\", the format can be any supported format.\n// If file doesn't exist, the optional file \"myfile.json\" inside .jar will be used.\nSettingsData\u003cSettings\u003e data = SettingsData.of(\"myfile.*\").or(DataType.INPUT_STREAM, \"myfile.json\");\n// Load settings by providing a parent folder.\n// Also, optional file will be saved inside the folder if original file doesn't exist\nFile folder = new File(\"folder\");\nSettings settings = data.load(folder, true);\n```\n\n## Dependency\n\nHow to use Settings library in your project.\n\n\u003cdetails\u003e\n  \u003csummary\u003ebuild.gradle\u003c/summary\u003e\n\n```groovy\nrepositories {\n    maven { url 'https://jitpack.io' }\n}\n\ndependencies {\n    implementation 'com.saicone.settings:settings:1.0.5'\n    // Other modules\n    implementation 'com.saicone.settings:settings-gson:1.0.5'\n    implementation 'com.saicone.settings:settings-hocon:1.0.5'\n    implementation 'com.saicone.settings:settings-toml:1.0.5'\n    implementation 'com.saicone.settings:settings-yaml:1.0.5'\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003ebuild.gradle.kts\u003c/summary\u003e\n\n```kotlin\nrepositories {\n    maven(\"https://jitpack.io\")\n}\n\ndependencies {\n    implementation(\"com.saicone.settings:settings:1.0.5\")\n    // Other modules\n    implementation(\"com.saicone.settings:settings-gson:1.0.5\")\n    implementation(\"com.saicone.settings:settings-hocon:1.0.5\")\n    implementation(\"com.saicone.settings:settings-toml:1.0.5\")\n    implementation(\"com.saicone.settings:settings-yaml:1.0.5\")\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003epom.xml\u003c/summary\u003e\n\n```xml\n\u003crepositories\u003e\n    \u003crepository\u003e\n        \u003cid\u003eJitpack\u003c/id\u003e\n        \u003curl\u003ehttps://jitpack.io\u003c/url\u003e\n    \u003c/repository\u003e\n\u003c/repositories\u003e\n\n\u003cdependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.saicone.settings\u003c/groupId\u003e\n        \u003cartifactId\u003esettings\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.5\u003c/version\u003e\n        \u003cscope\u003ecompile\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003c!-- Other modules --\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.saicone.settings\u003c/groupId\u003e\n        \u003cartifactId\u003esettings-gson\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.5\u003c/version\u003e\n        \u003cscope\u003ecompile\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.saicone.settings\u003c/groupId\u003e\n        \u003cartifactId\u003esettings-hocon\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.5\u003c/version\u003e\n        \u003cscope\u003ecompile\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.saicone.settings\u003c/groupId\u003e\n        \u003cartifactId\u003esettings-toml\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.5\u003c/version\u003e\n        \u003cscope\u003ecompile\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.saicone.settings\u003c/groupId\u003e\n        \u003cartifactId\u003esettings-yaml\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.5\u003c/version\u003e\n        \u003cscope\u003ecompile\u003c/scope\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n\u003c/details\u003e\n\n## Relocated Dependency\n\nHow to implement and relocate Settings library in your project.\n\n\u003cdetails\u003e\n  \u003csummary\u003ebuild.gradle\u003c/summary\u003e\n\n```groovy\nplugins {\n    id 'com.gradleup.shadow' version '9.2.2'\n}\n\nrepositories {\n    maven { url 'https://jitpack.io' }\n}\n\ndependencies {\n    implementation 'com.saicone.settings:settings:1.0.5'\n    // Other modules\n    implementation 'com.saicone.settings:settings-gson:1.0.5'\n    implementation 'com.saicone.settings:settings-hocon:1.0.5'\n    implementation 'com.saicone.settings:settings-toml:1.0.5'\n    implementation 'com.saicone.settings:settings-yaml:1.0.5'\n}\n\njar.dependsOn (shadowJar)\n\nshadowJar {\n    // Relocate packages (DO NOT IGNORE THIS)\n    relocate 'com.saicone.types', project.group + '.libs.types'\n    relocate 'com.saicone.settings', project.group + '.libs.settings'\n    // Exclude unused classes (optional)\n    minimize()\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003ebuild.gradle.kts\u003c/summary\u003e\n\n```kotlin\nplugins {\n    id(\"com.gradleup.shadow\") version \"9.2.2\"\n}\n\nrepositories {\n    maven(\"https://jitpack.io\")\n}\n\ndependencies {\n    implementation(\"com.saicone.settings:settings:1.0.5\")\n    // Other modules\n    implementation(\"com.saicone.settings:settings-gson:1.0.5\")\n    implementation(\"com.saicone.settings:settings-hocon:1.0.5\")\n    implementation(\"com.saicone.settings:settings-toml:1.0.5\")\n    implementation(\"com.saicone.settings:settings-yaml:1.0.5\")\n}\n\ntasks {\n    jar {\n        dependsOn(tasks.shadowJar)\n    }\n\n    shadowJar {\n        // Relocate packages (DO NOT IGNORE THIS)\n        relocate(\"com.saicone.types\", \"${project.group}.libs.types\")\n        relocate(\"com.saicone.settings\", \"${project.group}.libs.settings\")\n        // Exclude unused classes (optional)\n        minimize()\n    }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003epom.xml\u003c/summary\u003e\n\n```xml\n\u003crepositories\u003e\n    \u003crepository\u003e\n        \u003cid\u003eJitpack\u003c/id\u003e\n        \u003curl\u003ehttps://jitpack.io\u003c/url\u003e\n    \u003c/repository\u003e\n\u003c/repositories\u003e\n\n\u003cdependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.saicone.settings\u003c/groupId\u003e\n        \u003cartifactId\u003esettings\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.5\u003c/version\u003e\n        \u003cscope\u003ecompile\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003c!-- Other modules --\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.saicone.settings\u003c/groupId\u003e\n        \u003cartifactId\u003esettings-gson\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.5\u003c/version\u003e\n        \u003cscope\u003ecompile\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.saicone.settings\u003c/groupId\u003e\n        \u003cartifactId\u003esettings-hocon\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.5\u003c/version\u003e\n        \u003cscope\u003ecompile\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.saicone.settings\u003c/groupId\u003e\n        \u003cartifactId\u003esettings-toml\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.5\u003c/version\u003e\n        \u003cscope\u003ecompile\u003c/scope\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.saicone.settings\u003c/groupId\u003e\n        \u003cartifactId\u003esettings-yaml\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.5\u003c/version\u003e\n        \u003cscope\u003ecompile\u003c/scope\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n\n\u003cbuild\u003e\n    \u003cplugin\u003e\n        \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n        \u003cartifactId\u003emaven-shade-plugin\u003c/artifactId\u003e\n        \u003cversion\u003e3.6.1\u003c/version\u003e\n        \u003cconfiguration\u003e\n            \u003crelocations\u003e\n                \u003c!-- Relocate packages (DO NOT IGNORE THIS) --\u003e\n                \u003crelocation\u003e\n                    \u003cpattern\u003ecom.saicone.types\u003c/pattern\u003e\n                    \u003cshadedPattern\u003e${project.groupId}.libs.types\u003c/shadedPattern\u003e\n                \u003c/relocation\u003e\n                \u003crelocation\u003e\n                    \u003cpattern\u003ecom.saicone.settings\u003c/pattern\u003e\n                    \u003cshadedPattern\u003e${project.groupId}.libs.settings\u003c/shadedPattern\u003e\n                \u003c/relocation\u003e\n            \u003c/relocations\u003e\n            \u003c!-- Exclude unused classes (optional) --\u003e\n            \u003cminimizeJar\u003etrue\u003c/minimizeJar\u003e\n        \u003c/configuration\u003e\n        \u003cexecutions\u003e\n            \u003cexecution\u003e\n                \u003cphase\u003epackage\u003c/phase\u003e\n                \u003cgoals\u003e\n                    \u003cgoal\u003eshade\u003c/goal\u003e\n                \u003c/goals\u003e\n            \u003c/execution\u003e\n        \u003c/executions\u003e\n    \u003c/plugin\u003e\n\u003c/build\u003e\n```\n\n\u003c/details\u003e\n\n\u003e [!NOTE]  \n\u003e This project use [Types library](https://github.com/saicone/types) to convert data types, so it's required to relocate it's package along with settings package.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaicone%2Fsettings","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaicone%2Fsettings","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaicone%2Fsettings/lists"}