{"id":16375023,"url":"https://github.com/moderocky/fern","last_synced_at":"2025-09-18T13:09:26.162Z","repository":{"id":49756566,"uuid":"370725808","full_name":"Moderocky/Fern","owner":"Moderocky","description":"A human-readable and modifiable data-expression language with minimal clutter.","archived":false,"fork":false,"pushed_at":"2022-11-16T10:46:11.000Z","size":128,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-04T21:47:55.816Z","etag":null,"topics":["configuration","data","data-structures","data-visualization","language"],"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/Moderocky.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-05-25T14:40:54.000Z","updated_at":"2023-05-29T07:36:45.000Z","dependencies_parsed_at":"2023-01-23T10:30:10.568Z","dependency_job_id":null,"html_url":"https://github.com/Moderocky/Fern","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Moderocky/Fern","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moderocky%2FFern","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moderocky%2FFern/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moderocky%2FFern/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moderocky%2FFern/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Moderocky","download_url":"https://codeload.github.com/Moderocky/Fern/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moderocky%2FFern/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275772564,"owners_count":25525901,"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","status":"online","status_checked_at":"2025-09-18T02:00:09.552Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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","data","data-structures","data-visualization","language"],"created_at":"2024-10-11T03:19:11.856Z","updated_at":"2025-09-18T13:09:26.120Z","avatar_url":"https://github.com/Moderocky.png","language":"Java","readme":"Fern\n=====\n\n### Opus #5\n\nA clean and simple storage or configuration format with easy readability, minimal meta-characters, lenient parsing and\nsimple conversion.\n\nThis is built to be a minimalist alternatives to popular configuration formats such as YAML or JSON, but without their\nindividual pitfalls, such as YAML's strict whitespace grammar and JSON's reliance on quotes and brackets.\n\nFern is also designed to be easily customisable and extendable, allowing a user to build domain-specific features into\nthe general parser or framework to build handlers for custom data types.\n\nFern ignores all whitespace, except for the single character that separates entities.\n\n## Data Types\n\n| Type    | Delimiter | Description                                                                               |\n|---------|-----------|-------------------------------------------------------------------------------------------|\n| Branch  | `()`      | A new sub-branch, a `key` `value` map.                                                    |\n| List    | `[]`      | A list.                                                                                   |\n| String  | `\"text\"`  | Simple strings, supports both simple character escapes and multi-line content.            |\n| Integer | `100`     | Simple int-32.                                                                            |\n| Long    | `100L`    | Simple int-64. Suffix is only required to differentiate from an integer in small numbers. |\n| Short   | `100S`    | A short. Suffix is always required.                                                       |\n| Double  | `100.0D`  | A double. Suffix is not required, unless the number is not a decimal.                     |\n| Float   | `0.5F`    | A floating point number. Suffix is always required.                                       |\n| Byte    | `13B`     | A byte. Suffix is always required.                                                        |\n| Null    | `null`    | A null-value.                                                                             |\n| Boolean | `true`    | A boolean true/false value.                                                               |\n| Insight | `\u003cType\u003e`  | A type insight provided by a third-party library.                                         |\n\nDomain-specific data types can be added by custom parser implementations by adding a new `ValueHandler` - they require\nonly a recognisable identifier. \\\nAn example would be a `Bird` class. A parser can register `\u003cBird\u003e` as a special identifier,\nwhich would pass the subsequent value to the desired value handler.\n\n## Comments\n\nSome fern implementations support a style of comment marked by a \u003ccode\u003e\u0026grave;\u003c/code\u003e backtick character.\n\nThese comments are an entity like keys and values and so require some separation.\n\n```fern\nkey `comment` value\nkey value `comment`\n`this is a\nreally long comment`\n```\n\n## Examples\n\nBasic uses of types.\n\n```fern\nname \"Tony\"\nage 42    \nheight 1.85 \nweight 70.2 \nspouse null  \nlikes [ \"chicken\" \"pasta\" \"bacon\" ]\ndislikes [ \"fish\" \"ice cream\" 74 ]\neducation (   \n    school \"Hartlepool Secondary School\"\n    college \"Wisham College\"\n    university null\n)\n\n```\n\nMore examples of type usage.\n\n```fern\na_key ( \n    abc 1 \n    xyz 2D \n    pqr 5.0 \n)\nanother_key \"value\" \n```\n\nFern does not require whitespace, except to separate entities. This means a user can mix indentation units to\ntheir heart's content.\n\n```fern\nmap ( key \"value\" thing 66 ) list [ 1 2 3 ]\n```\n\n## Maven Information\n\n```xml\n\n\u003crepository\u003e\n    \u003cid\u003ekenzie\u003c/id\u003e\n    \u003cname\u003eKenzie's Repository\u003c/name\u003e\n    \u003curl\u003ehttps://repo.kenzie.mx/releases\u003c/url\u003e\n\u003c/repository\u003e\n``` \n\n```xml\n\n\u003cdependency\u003e\n    \u003cgroupId\u003emx.kenzie\u003c/groupId\u003e\n    \u003cartifactId\u003efern\u003c/artifactId\u003e\n    \u003cversion\u003e2.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## Binary Data\n\nThe Java implementation of Fern contains a binary data format for more compressed values.\nNaturally, using this eliminates Fern's potential as an editable configuration format.\n\nThe binary format is supplied as a simple way to compress the internal data.\nThe `BinaryFern` object is fairly interchangeable with the regular `Fern` but has no support for third-party handlers:\nonly the built-in data types are supported.\n\n## Adding Types\n\nFern is built to support additional value types for domain-specific use.\n\nA type must have a recognisable starting character (e.g. `.`) and a recognisable end.\nTypes are responsible for recognising their own end, so this may not be a single distinct character.\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoderocky%2Ffern","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoderocky%2Ffern","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoderocky%2Ffern/lists"}