{"id":13492739,"url":"https://github.com/darklang/tablecloth","last_synced_at":"2025-05-16T01:05:06.183Z","repository":{"id":34295374,"uuid":"166582588","full_name":"darklang/tablecloth","owner":"darklang","description":"A standard library with the same API in F#, Rescript and OCaml","archived":false,"fork":false,"pushed_at":"2023-04-20T19:24:40.000Z","size":11408,"stargazers_count":514,"open_issues_count":38,"forks_count":45,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-05-09T01:18:22.741Z","etag":null,"topics":["fsharp","ocaml","rescript","standard-library"],"latest_commit_sha":null,"homepage":"https://www.tablecloth.dev","language":"JavaScript","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/darklang.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-01-19T19:02:15.000Z","updated_at":"2024-12-11T09:06:20.000Z","dependencies_parsed_at":"2024-01-06T02:03:42.298Z","dependency_job_id":"6745e57e-4cc0-46b8-9388-a0eb9258eeec","html_url":"https://github.com/darklang/tablecloth","commit_stats":{"total_commits":775,"total_committers":27,"mean_commits":"28.703703703703702","dds":0.7303225806451613,"last_synced_commit":"157dbc7a0d23bf8872730394b3cbf7c6211c7c15"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darklang%2Ftablecloth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darklang%2Ftablecloth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darklang%2Ftablecloth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darklang%2Ftablecloth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/darklang","download_url":"https://codeload.github.com/darklang/tablecloth/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254448579,"owners_count":22072764,"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","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":["fsharp","ocaml","rescript","standard-library"],"created_at":"2024-07-31T19:01:08.777Z","updated_at":"2025-05-16T01:05:01.175Z","avatar_url":"https://github.com/darklang.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","OCaml","Reason"],"sub_categories":["Libraries"],"readme":"# Tablecloth\n\n[![CircleCI](https://circleci.com/gh/darklang/tablecloth.svg?style=shield)](https://circleci.com/gh/darklang/tablecloth)\n\nTablecloth is a set of libraries for different functional languages, which each have\nthe same function names, making it easier to move between languages.\n\nThere are currently implementations for:\n- [Rescript](https://github.com/darklang/tablecloth-rescript)\n- [OCaml](https://github.com/darklang/tablecloth-ocaml-base)\n- [F#](https://github.com/darklang/tablecloth-fsharp)\n- Elm - the API is extremely similar to the Elm standard library\n\nEach implementation:\n- supports the same function and module names\n  - names are adapted for `camelCase` or `snake_case`, as appropriate\n- is idiomatic to the language it's in\n  - uses standard types\n  - follows language best practices (eg the OCaml version uses labels, but the Rescript version does not)\n  - uses standard tooling and packaging\n- is licensed in the normal way\n- has a [code of conduct](./CODE_OF_CONDUCT.md)\n- has friendly maintainers\n\n**Tablecloth is alpha-quality software, and is pre-1.0. Some of the changes listed\nabove are still in progress. Caveat emptor.**\n\nCheck out the [website](https://www.tablecloth.dev) for our interactive API\ndocumentation, or join the community in the [Tablecloth\nDiscord](https://www.tablecloth.dev/discord-invite).\n\n\n## Design goals\n\nWhen switching between functional languages, it can be frustrating to try to\nremember the names of different functions, which are not standardized and differ\ndue to history.\n\nAt the same time, we recognize that each language has their own idioms, and\noften have mature and optimized standard libraries that we do not wish to replace.\nAs such, each version of tablecloth is simple a set of functions which call existing\nstandard libraries, and uses idiomatic patterns for the language in question.\n\nTablecloth was originally written to help port the Darklang frontend from Elm to\nReasonML. As we used OCaml on the backend, we tried to reuse some libraries by adding\nOCaml versions of the ReasonML functions. However, code reuse was difficult and never\ntook off, and we ended up splitting the two libraries when the ReasonML community\nmoved to Rescript, which did not have the goal to be compatible with OCaml. When we\nported the backend from OCaml to F#, we added an F# version. At this point we\nrealized the real value was not in having portable code, but rather in having the\nsame function names everywhere.\n\n## Contributions\n\nThe maintainers are warm and friendly, and the project abides by a [Code of\nConduct](./CODE_OF_CONDUCT.md).\n\nCheck out the [dedicated guide](./documentation/contributing.md) on contributing for more.\n\n## License\n\nTablecloth uses the [MIT](./LICENSE) license. Implementations of Tablecloth should\nuse the standard licenses used by libraries in their language's ecosystem.\n\n## Authors\n\nInitially written by [Darklang](https://darklang.com).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdarklang%2Ftablecloth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdarklang%2Ftablecloth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdarklang%2Ftablecloth/lists"}