{"id":16142955,"url":"https://github.com/julianmendez/tabulas","last_synced_at":"2026-03-04T09:02:22.458Z","repository":{"id":57731005,"uuid":"46714732","full_name":"julianmendez/tabulas","owner":"julianmendez","description":"System to manage human-readable tables using files","archived":false,"fork":false,"pushed_at":"2025-12-15T17:17:21.000Z","size":1063,"stargazers_count":2,"open_issues_count":7,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-14T04:19:45.212Z","etag":null,"topics":["human-readable","java-properties","json","scala","tabula","yaml"],"latest_commit_sha":null,"homepage":"https://julianmendez.github.io/tabulas/","language":"Scala","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/julianmendez.png","metadata":{"files":{"readme":"docs/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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-11-23T11:03:25.000Z","updated_at":"2025-03-01T16:21:21.000Z","dependencies_parsed_at":"2023-12-26T00:27:17.703Z","dependency_job_id":"a16761cf-0e9a-4574-95fd-e5bcde838771","html_url":"https://github.com/julianmendez/tabulas","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/julianmendez/tabulas","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianmendez%2Ftabulas","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianmendez%2Ftabulas/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianmendez%2Ftabulas/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianmendez%2Ftabulas/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/julianmendez","download_url":"https://codeload.github.com/julianmendez/tabulas/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianmendez%2Ftabulas/sbom","scorecard":{"id":541916,"data":{"date":"2025-08-11","repo":{"name":"github.com/julianmendez/tabulas","commit":"935d157c0aa8f6a005c85c919ebe7fbb1d93ee27"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/14 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/julianmendez/tabulas/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/julianmendez/tabulas/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/julianmendez/tabulas/ci.yml/master?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 19 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T08:23:44.307Z","repository_id":57731005,"created_at":"2025-08-20T08:23:44.307Z","updated_at":"2025-08-20T08:23:44.307Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30076935,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T08:01:56.766Z","status":"ssl_error","status_checked_at":"2026-03-04T08:00:42.919Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["human-readable","java-properties","json","scala","tabula","yaml"],"created_at":"2024-10-10T00:08:08.707Z","updated_at":"2026-03-04T09:02:22.440Z","avatar_url":"https://github.com/julianmendez.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [Tabulas](https://julianmendez.github.io/tabulas/)\n\n[![license](https://img.shields.io/badge/License-Apache%202.0-blue.svg)][license]\n[![Maven Central](https://img.shields.io/maven-central/v/de.tu-dresden.inf.lat.tabulas/tabulas-parent_2.13.svg?label=Maven%20Central)][maven-central]\n[![build](https://github.com/julianmendez/tabulas/workflows/Scala%20CI/badge.svg)][build-status]\n\n*System to manage human-readable tables using files*\n\n**Tabulas** is a system to manage human-readable tables using files.\nTabulas is a [Scala][scala] implementation based on the [Tabula][tabula] format.\nThere are three alternatives to represent the content:\n- **Tabula.YAML**, using the [YAML][yaml] format,\n- **Tabula.JSON**, using the [JSON][json] format,\n- **Tabula.Properties**, using a sort of [Java Properties][java-properties] syntax,\nbut defining the same property name for multiple objects.\n\nIn addition, there are two alternatives to export the metadata as schema:\n- **JSON Schema**, for [JSON Schema][json-schema], a vocabulary to annotate and validate JSON\n  documents\n- **Rx YAML**, for [Rx][rx], schemata tool for JSON/YAML\n\n\n## Download\n\n- [executable JAR file][executable-jar]\n- [The Central Repository][central-repository]\n- as dependency:\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ede.tu-dresden.inf.lat.tabulas\u003c/groupId\u003e\n  \u003cartifactId\u003etabulas-ext_2.13\u003c/artifactId\u003e\n  \u003cversion\u003e1.1.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n\n## Format\n\nThe Tabula format is a system that puts constraints on other formats.\nIt could be viewed as a simplified type system.\n\nThe *primitive types* are:\n\n- `String`: any string without any newline (`'\\n'` 0x0A, `'\\r'` 0x0D), and not ending in backslash (`'\\'` 0x5C), neither in blanks (`'\\t'` 0x08, `' '` 0x20)\n- `URI`: any valid Uniform Resource Identifier\n- `Integer`: an integer number (implemented with `BigInteger`)\n- `Decimal`: a decimal number (implemented with `BigDecimal`)\n- `List_`... (e.g. `List_String`): list of space-separated values, for the types above\n- `Empty`: type to ignore any given value\n\nA *composite type* is a structure containing *fields*, each of them of a particular primitive type.\nEach *instance* may contain values of the defined fields.\n\nFor the sake of clarity, we can compare this to a spreadsheet, with the following associations:\n- primitive type: allowed type in the spreadsheet cells\n- composite type: first row of the spreadsheet defining the column names\n- field: a column, with all its cells of the same type\n- instance: a row\n\nThis is how types are defined with the Tabulas.YAML format.\n\nThe type name can be any Tabula String.\nThe field name can be any Tabula String that does not contain a colon (`':'` 0x3A), neither an equals sign (`'='` 0x3D), and is not the words `type` or `new`.\n\nEach type is defined as follows:\n\n```yaml\n\n---\n- type:\n    name: TYPE_NAME\n```\n\nwhere *TYPE_NAME* can be any identifier.\n\nThe fields are defined as follows:\n\n```yaml\n    def:\n    - FIELD_NAME_0:FIELD_TYPE_0\n    - FIELD_NAME_1:FIELD_TYPE_1\n      ...\n    - FIELD_NAME_n:FIELD_TYPE_n\n```\n\nwhere each *FIELD_NAME* can be any identifier,\nand each *FIELD_TYPE* can be any of the primitive types.\nNo space must be left before or after the colon.\nFor example, it is `FIELD_NAME_0:FIELD_TYPE_0` and not `FIELD_NAME_0: FIELD_TYPE_0`.\n\nThe URIs can be shortened by using prefixes.\nThe prefixes are URIs themselves without colons, because the colon (`:`) is used to define the association.\n\n```yaml\n    prefix:\n    - PREFIX_0:URI_0\n    - PREFIX_1:URI_1\n    - ...\n    - PREFIX_n:URI_n\n```\n\nNo space must be left before or after the colon.\nThey are applied using the declaration order during parsing and serialization.\n\nAlthough the serialization shortens every possible URI using the prefixes, it is possible to expand all of them by adding the empty prefix with an empty value, i.e. a colon (`:`) alone, and it has to be the first prefix.\nThis could be useful to rename the prefixes.\n\nThe order in which the instances are shown is defined as follows:\n\n```yaml\n    order:\n    - ('-'|'+')FIELD_NAME_a_0\n    - ('-'|'+')FIELD_NAME_a_1\n      ...\n    - ('-'|'+')FIELD_NAME_a_k\n```\n\nwhere the `+` and the `-` are used to denote whether the reverse order should be used.\nFor example:\n\n```yaml\n    order:\n    - +id\n    - -author\n```\n\norders the instances by `id` (ascending) and then by author (descending).\n\nThe instances come just after the type definition, with the following syntax:\n\n```yaml\n- FIELD_NAME_0: VALUE_0\n  FIELD_NAME_1: VALUE_1\n  ...\n  FIELD_NAME_n: VALUE_n\n```\n\nwhere each *FIELD_NAME* is one of the already declared field names in the type and each *VALUE* contains a String according to the field type.\n\nThe *values* can be any Tabula String.\nThe blanks (`'\\t'` 0x08, `' '` 0x20) at the beginning and at the end are removed.\nTo declare a multi-line value, each line must finish with backslash (`'\\'` 0x5C), except the last one.\n\nThe formatter normalizes the values and present them differently according to the declared type.\nFor example, the values of fields with type `List_`... (e.g. `List_String`) will be presented as multi-line values.\n\n\n## Example\n\nThis is an example of a library file.\nEach book record contains an identifier (`id`), a title (`title`), the authors (`authors`), a link to the abstract on the web (`web`), and a list of links to the documents (`documents`).\nThe entries are ordered by identifier.\n\n```yaml\n\n---\n- type:\n    name: record\n    def:\n    - id:String\n    - title:String\n    - authors:List_String\n    - web:URI\n    - documents:List_URI\n    prefix:\n    - arxiv:https://arxiv.org/\n    order:\n    - +id\n\n- id: arXiv:1412.2223\n  title: A topological approach to non-Archimedean Mathematics\n  authors:\n  - Vieri Benci\n  - Lorenzo Luperi Baglini\n  web: https://arxiv.org/abs/1412.2223\n  documents:\n  - https://arxiv.org/pdf/1412.2223#pdf\n  - https://arxiv.org/ps/1412.2223#ps\n  - https://arxiv.org/format/1412.2223#other\n\n- id: arXiv:1412.3313\n  title: Infinitary stability theory\n  authors:\n  - Sebastien Vasey\n  web: https://arxiv.org/abs/1412.3313\n  documents:\n  - https://arxiv.org/pdf/1412.3313#pdf\n  - https://arxiv.org/ps/1412.3313#ps\n  - https://arxiv.org/format/1412.3313#other\n\n```\n\nThe unit tests include an example like [this one][miniexample-properties].\n\nFor example, the [MainSpec][main-spec] class does the following steps:\n\n- read the [example file][example-properties]\n- add a new field `numberOfAuthors`\n- add to each record the number of authors\n- compare the [expected result][updated-example-properties]\n\n\n## Other formats\n\nThis project also includes some converters from and to other formats.\nEvery deserializer (parser) and serializer (renderer) is registered as an extension.\nSome serializers and some deserializers cannot map completely the content of a Tabula file.\n\n| serializer   | stores metadata   | stores entries |\n|:-------------|:------------------|:---------------|\n| YAML         | yes               | yes            |\n| JSON         | yes               | yes            |\n| JSON Schema  | yes               | no             |\n| Rx YAML      | yes               | no             |\n| HTML         | no                | yes            |\n| Wikitext     | no                | yes            |\n| CSV          | no                | yes            |\n| SQL          | no                | yes            |\n\n([Wikitext][wikitext]: is a wiki markup language)\n\n| deserializer | requires metadata |\n|:-------------|:------------------|\n| YAML         | yes               |\n| JSON         | yes               |\n| CSV          | no                |\n\nThe given example as Tabula.Properties:\n\n```properties\n\n\n# simple format 1.0.0\n\ntype:\n name: record\n def: \\\n  id:String \\\n  title:String \\\n  authors:List_String \\\n  web:URI \\\n  documents:List_URI\n prefix: \\\n  arxiv:https://arxiv.org/\n order: \\\n  +id\n\nnew:\n id: arXiv:1412.2223\n title: A topological approach to non-Archimedean Mathematics\n authors: \\\n  Vieri Benci \\\n  Lorenzo Luperi Baglini\n web: \u0026arxiv;abs/1412.2223\n documents: \\\n  \u0026arxiv;pdf/1412.2223#pdf \\\n  \u0026arxiv;ps/1412.2223#ps \\\n  \u0026arxiv;format/1412.2223#other\n\nnew:\n id: arXiv:1412.3313\n title: Infinitary stability theory\n authors: \\\n  Sebastien Vasey\n web: \u0026arxiv;abs/1412.3313\n documents: \\\n  \u0026arxiv;pdf/1412.3313#pdf \\\n  \u0026arxiv;ps/1412.3313#ps \\\n  \u0026arxiv;format/1412.3313#other\n\n```\n\nThe unit tests also include the [previous example][miniexample-yaml].\n\nPlease note that there should be no spaces in the elements of the `def` section.\nFor example, the definition is `id:String` and not `id: String`.\n\nA YAML file can be easily converted to a JSON file using a [Python][python] script like\n[yaml_to_json.py][yaml-to-json].\n\n\n## Extensions\n\nThe command line application can be used to execute the different readers and writers.\nThey are implemented as *extensions*.\nEach extension registers at the beginning of the execution and is available to be executed from the command line.\n\nThe following example contains some extensions listed by the application, when no parameters are given.\n\n- `yaml` *(input)* *(output)*: create a Tabula.YAML file\n- `json` *(input)* *(output)*: create a Tabula.JSON file\n- `properties` *(input)* *(output)*: create a Tabula.Properties file\n- `oldformat` *(input)* *(output)*: create an old Tabula.Properties file, i.e. using the equals sign instead of colon\n\nThe command line application can be executed with:\n\n`java -jar` *(jarname)* *(extension)* *(input)* *(output)*\n\nThe executable JAR file is available at the link provided in the *Download* section.\nIf the project is build from its source code, the executable JAR file will be available in the location indicated by the *release* property of the release notes.\n\n\n## Source code\n\nTo clone and compile the project:\n\n```\n$ git clone https://github.com/julianmendez/tabulas.git\n$ cd tabulas\n$ mvn clean install\n```\n\nThe created executable library, its sources, and its Javadoc will be in `tabulas-distribution/target`.\nThis executable JAR file requires the [Scala library][scala-library] in the same directory.\nThe required version is shown in the release notes.\n\nTo compile the project offline, first download the dependencies:\n\n```\n$ mvn dependency:go-offline\n```\n\nand once offline, use:\n\n```\n$ mvn --offline clean install\n```\n\nThe bundles uploaded to [Sonatype][sonatype] are created with:\n\n```\n$ mvn clean install -DperformRelease=true\n```\n\nand then on each module:\n\n```\n$ cd target\n$ jar -cf bundle.jar tabulas-*\n```\n\nand on the main directory:\n\n```\n$ cd target\n$ jar -cf bundle.jar tabulas-parent*\n```\n\nThe version number is updated with:\n\n```\n$ mvn versions:set -DnewVersion=NEW_VERSION\n```\n\nwhere *NEW_VERSION* is the new version.\n\n\n## Author\n\n[Julian Alfredo Mendez][author]\n\n\n## License\n\nThis software is distributed under the [Apache License Version 2.0][license].\n\n\n## Release notes\n\nSee [release notes][release-notes].\n\n\n## Contact\n\nIn case you need more information, please contact [julianmendez][author].\n\n[author]: https://julianmendez.github.io\n[central-repository]: https://repo1.maven.org/maven2/de/tu-dresden/inf/lat/tabulas/\n[license]: https://www.apache.org/licenses/LICENSE-2.0.txt\n[maven-central]: https://search.maven.org/artifact/de.tu-dresden.inf.lat.tabulas/tabulas-ext_2.13\n[build-status]: https://github.com/julianmendez/tabulas/actions\n[sonatype]: https://oss.sonatype.org\n[executable-jar]: https://sourceforge.net/projects/latitude/files/tabulas/1.1.0/tabulas-1.1.0.jar/download\n[release-notes]: https://julianmendez.github.io/tabulas/RELEASE-NOTES.html\n[scala-library]: https://search.maven.org/#search|gav|1|g%3A%22org.scala-lang%22%20AND%20a%3A%22scala-library%22\n[yaml-to-json]: https://github.com/julianmendez/tabulas/blob/master/tabulas-ext/src/main/python/yaml_to_json.py\n[example-properties]: https://github.com/julianmendez/tabulas/blob/master/tabulas-core/src/test/resources/core/example.tab.properties\n[updated-example-properties]: https://github.com/julianmendez/tabulas/blob/master/tabulas-core/src/test/resources/core/example-modified.tab.properties\n[miniexample-yaml]: https://github.com/julianmendez/tabulas/blob/master/tabulas-ext/src/test/resources/ext/miniexample.tab.yaml\n[miniexample-properties]: https://github.com/julianmendez/tabulas/blob/master/tabulas-ext/src/test/resources/ext/miniexample.tab.properties\n[main-spec]: https://github.com/julianmendez/tabulas/blob/master/tabulas-core/src/test/scala/de/tudresden/inf/lat/tabulas/main/MainSpec.scala\n[tabula]: https://github.com/julianmendez/tabula\n[wikitext]: https://www.mediawiki.org/wiki/Specs/wikitext/1.0.0\n[yaml]: https://yaml.org\n[json]: https://json.org\n[json-schema]: https://json-schema.org\n[rx]: https://rx.codesimply.com\n[java-properties]: https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/Properties.html#load-java.io.Reader-\n[scala]: https://www.scala-lang.org\n[python]: https://www.python.org\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulianmendez%2Ftabulas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjulianmendez%2Ftabulas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulianmendez%2Ftabulas/lists"}