{"id":33904950,"url":"https://github.com/jevko/jevkoconfig1.js","last_synced_at":"2026-04-21T00:02:17.684Z","repository":{"id":64586782,"uuid":"564534091","full_name":"jevko/jevkoconfig1.js","owner":"jevko","description":"(EXPERIMENTAL) A Jevko format for configuration, a la INI/TOML/YAML/HOCON.","archived":false,"fork":false,"pushed_at":"2022-12-11T02:55:25.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2023-03-05T23:49:53.668Z","etag":null,"topics":["configuration","file","format","hocon","ini","jevko","json","minimal","syntax","toml","yaml"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jevko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-11-10T23:22:48.000Z","updated_at":"2022-11-23T23:17:11.000Z","dependencies_parsed_at":"2022-12-14T00:30:10.612Z","dependency_job_id":null,"html_url":"https://github.com/jevko/jevkoconfig1.js","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/jevko/jevkoconfig1.js","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jevko%2Fjevkoconfig1.js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jevko%2Fjevkoconfig1.js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jevko%2Fjevkoconfig1.js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jevko%2Fjevkoconfig1.js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jevko","download_url":"https://codeload.github.com/jevko/jevkoconfig1.js/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jevko%2Fjevkoconfig1.js/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32071016,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T21:26:33.338Z","status":"ssl_error","status_checked_at":"2026-04-20T21:26:22.081Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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","file","format","hocon","ini","jevko","json","minimal","syntax","toml","yaml"],"created_at":"2025-12-12T01:43:09.966Z","updated_at":"2026-04-21T00:02:17.678Z","avatar_url":"https://github.com/jevko.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"NOTE: this is a sketch\n\n# jevkoconfig1.js\n\nCodename Jevko Config 1.\n\nA Jevko format for configuration that decodes this:\n\n```\nThis is a comment\n\ntitle [jevkoconfig1 Example]\n\n[owner]\nname [tester]\ndob `''2020-08-05T20:30:01+09:00[Asia/Tokyo][u-ca=japanese]''\n\n[database]\nenabled [true]\nquoted ['true]\nports [\n  [8000]\n  [8001]\n  [8002]\n]\ndata [ [[delta] [phi]] [3.14] ]\ntemp targets [ cpu [79.5] case [72.0] ]\n\n[servers]\n\n-`''section path relative to previous section (like [.alpha] in ini):''\n[./[alpha]]\nip [10.0.0.1]\nrole [frontend]\n\n-`''absolute section path (like [servers.beta] in ini):''\n[[servers][beta]]\nip [10.0.0.2]\nrole [backend]\n\n-discarded key [[with][a][value]]\n-[discarded section]\nthis key now goes under [[servers][beta]]\n\n[embedded documents]\nsome json `'json'\n{ \n  \"id\": \"b3df0d\",\n  \"count\": 55,\n  \"props\": {\n    \"return code\": \"59503a7b\",\n    \"status\": \"pending\"\n  },\n  \"associated ids\": [\n    \"3adf7c\",\n    \"ff0df7\",\n    \"3aa670\"\n  ],\n  \"parent\": null \n}\n'json'\nmore json `'json'55'json'\njson string `'json'\"\\n\\tsomething\\u0000\"'json'\njson array `'json'[1, 2, 3, 4, null]'json'\n```\n\ninto this:\n\n```json\n{\n  \"title\": \"jevkoconfig1 Example\",\n  \"owner\": {\n    \"name\": \"tester\",\n    \"dob\": \"2020-08-05T20:30:01+09:00[Asia/Tokyo][u-ca=japanese]\"\n  },\n  \"database\": {\n    \"enabled\": true,\n    \"quoted\": \"true\",\n    \"ports\": [\n      8000,\n      8001,\n      8002\n    ],\n    \"data\": [\n      [\n        \"delta\",\n        \"phi\"\n      ],\n      3.14\n    ],\n    \"temp targets\": {\n      \"cpu\": 79.5,\n      \"case\": 72\n    }\n  },\n  \"servers\": {\n    \"alpha\": {\n      \"ip\": \"10.0.0.1\",\n      \"role\": \"frontend\"\n    },\n    \"beta\": {\n      \"ip\": \"10.0.0.2\",\n      \"role\": \"backend\",\n      \"this key now goes under\": [\n        \"servers\",\n        \"beta\"\n      ]\n    }\n  },\n  \"embedded documents\": {\n    \"some json\": {\n      \"id\": \"b3df0d\",\n      \"count\": 55,\n      \"props\": {\n        \"return code\": \"59503a7b\",\n        \"status\": \"pending\"\n      },\n      \"associated ids\": [\n        \"3adf7c\",\n        \"ff0df7\",\n        \"3aa670\"\n      ],\n      \"parent\": null\n    },\n    \"more json\": 55,\n    \"json string\": \"\\n\\tsomething\\u0000\",\n    \"json array\": [\n      1,\n      2,\n      3,\n      4,\n      null\n    ]\n  }\n}\n```\n\nThe example is based on the one from [TOML's homepage](https://toml.io/en/).\n\nJevko Config 1 is similar to INI or TOML, but simpler and more flexible than both.\n\nIt recognizes the following primitive values:\n\n* `true` and `false` (booleans)\n* numbers, e.g. `999.99` -- parsed as according to Ecma262 grammar -- `Infinity` and `NaN` are supported\n* `null`\n* `map` means an empty map `{}`\n* `list` means an empty list `[]`\n* `'\u003canything\u003e` or `'\u003canything\u003e'` means that `\u003canything\u003e` is meant to be a string, e.g. `'true` or `'true'` is `\"true\"`\n* anything unrecognized is interpreted as a string and autotrimmed\n\n# Heredocs\n\nHeredoc strings are supported like this:\n\n```\n\u003ckey\u003e `'\u003ctag\u003e'.............'\u003ctag\u003e'\n```\n\n`\u003ctag\u003e` is any user-defined delimiting identifier, can be empty.\n\nExample:\n\n```\ndob `''2020-08-05T20:30:01+09:00[Asia/Tokyo][u-ca=japanese]''\n```\n\nparses to:\n\n```json\n{\n  \"dob\": \"2020-08-05T20:30:01+09:00[Asia/Tokyo][u-ca=japanese]\"\n}\n```\n\nAll strings (not just heredocs) may be multiline.\n\n# Comments\n\n```\nThis is a multiline\ncomment that precedes\na key [with a value]\n```\n\nparses to:\n\n```json\n{\n  \"a key\": \"with a value\"\n}\n```\n\nAlso:\n\n```\narray [\n  Comment for the\n  frist value of an array\n  [1]\n  Comment for the\n  second value\n  [2]\n]\n```\n\nparses to:\n\n```\n{\n  \"array\": [1, 2]\n}\n```\n\ni.e. all lines that precede a line with an opening bracket `[` are ignored.\n\nKeys cannot be multiline, but may contain embedded spaces.\n\n# Concatenation\n\nMultiple Jevko Config 1 files concatenated together will be shallow-merged: two occurences of section [A] will be treated as one occurence, entries with same keys that come last will overwrite entries that come before.\n\n```\n[A]\nkey [value]\nkey2 [value2]\n\n[A]\nkey [value3]\nkey3 [value4]\n```\n\nparses to:\n\n```js\n{ \n  A: { \n    key: \"value3\", \n    key2: \"value2\", \n    key3: \"value4\" \n  } \n}\n```\n\nHowever duplicate keys in maps outside of top-level are forbidden.\n\nNote:\n\n```\ntop [1]\n\n[section]\nkey [2]\n```\n\nconcatenated with:\n\n```\ntop2 [10]\n\n[section2]\nkey2 [20]\n```\n\nproduces:\n\n```\ntop [1]\n\n[section]\nkey [2]\ntop2 [10]\n\n[section2]\nkey2 [20]\n```\n\ni.e. `top2` from the second file goes under `[section]`.\n\nThis is most likely not desirable, so it's best not to use keys without a section.\n\nTODO: perhaps forbid global keys.\n\n# Data URLs\n\nTODO: perhaps support something like [Data URLs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs):\n\n```\ndata:[\u003cmediatype\u003e][;base64],\u003cdata\u003e\n```\n\nin particular base64-encoded binary data.\n\n```\nbase64:\u003cbinary data\u003e\n```\n\n# Embedded JSON\n\nJSON values can be embedded in Jevko Config 1 as follows:\n\n```\njson object `'json'\n{ \n  \"id\": \"b3df0d\",\n  \"count\": 55\n}\n'json'\njson number `'json'55'json'\njson string `'json'\"\\n\\tsomething\\u0000\"'json'\njson array `'json'[1, 2, 3, 4, null]'json'\n```\n\nThis will parse to:\n\n```json\n{\n  \"json object\": { \n    \"id\": \"b3df0d\",\n    \"count\": 55\n  },\n  \"json number\": 55,\n  \"json string\": \"\\n\\tsomething\\u0000\",\n  \"json array\": [\n    1,\n    2,\n    3,\n    4,\n    null\n  ]\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjevko%2Fjevkoconfig1.js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjevko%2Fjevkoconfig1.js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjevko%2Fjevkoconfig1.js/lists"}