{"id":13713267,"url":"https://github.com/ocaml-sf/learn-ocaml","last_synced_at":"2025-05-16T00:00:29.780Z","repository":{"id":12238747,"uuid":"60344509","full_name":"ocaml-sf/learn-ocaml","owner":"ocaml-sf","description":"A Web Application for Learning OCaml","archived":false,"fork":false,"pushed_at":"2025-05-03T08:18:30.000Z","size":5171,"stargazers_count":310,"open_issues_count":119,"forks_count":66,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-05-03T09:28:38.435Z","etag":null,"topics":["learn-ocaml","ocaml","teaching"],"latest_commit_sha":null,"homepage":"https://ocaml-sf.org/learn-ocaml/","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/ocaml-sf.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"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}},"created_at":"2016-06-03T12:00:51.000Z","updated_at":"2025-04-18T08:13:44.000Z","dependencies_parsed_at":"2023-02-18T15:01:40.323Z","dependency_job_id":"a674d4fa-0eee-41a0-866c-f48f840fe9a2","html_url":"https://github.com/ocaml-sf/learn-ocaml","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml-sf%2Flearn-ocaml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml-sf%2Flearn-ocaml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml-sf%2Flearn-ocaml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml-sf%2Flearn-ocaml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ocaml-sf","download_url":"https://codeload.github.com/ocaml-sf/learn-ocaml/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254442854,"owners_count":22071877,"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":["learn-ocaml","ocaml","teaching"],"created_at":"2024-08-02T23:01:31.169Z","updated_at":"2025-05-16T00:00:29.725Z","avatar_url":"https://github.com/ocaml-sf.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Developer Tools"],"sub_categories":[],"readme":"Learn-OCaml\n===========\n\nThis is Learn-OCaml, a platform for learning the OCaml language,\nfeaturing a Web toplevel, an exercise environment, and a directory of\nlessons and tutorials.\n\nA demo is available [online](https://ocaml-sf.org/learn-ocaml-public/).\n\n[![CI](https://github.com/ocaml-sf/learn-ocaml/actions/workflows/build-and-test.yml/badge.svg?branch=master)](https://github.com/ocaml-sf/learn-ocaml/actions/workflows/build-and-test.yml)\n[![macOS](https://github.com/ocaml-sf/learn-ocaml/actions/workflows/build-macos.yml/badge.svg?branch=master)](https://github.com/ocaml-sf/learn-ocaml/actions/workflows/build-macos.yml)\n[![learn-ocaml](https://img.shields.io/badge/docker-ocamlsf%2Flearn--ocaml-blue.svg)](https://hub.docker.com/r/ocamlsf/learn-ocaml \"Docker image of learn-ocaml\")\n[![learn-ocaml-client](https://img.shields.io/badge/docker-ocamlsf%2Flearn--ocaml--client-blue.svg)](https://hub.docker.com/r/ocamlsf/learn-ocaml-client \"Docker image of learn-ocaml-client\")\n\nHowtos\n------\n\n* [How to set up an environment to develop exercises?](https://github.com/ocaml-sf/learn-ocaml/blob/master/docs/howto-setup-exercise-development-environment.md)\n* [How to write exercises?](https://github.com/ocaml-sf/learn-ocaml/blob/master/docs/howto-write-exercises.md)\n* [How to submit an exercise to the global corpus?](https://github.com/ocaml-sf/learn-ocaml/blob/master/docs/howto-submit-an-exercise.md)\n* [How to deploy an instance of Learn OCaml?](https://github.com/ocaml-sf/learn-ocaml/blob/master/docs/howto-deploy-a-learn-ocaml-instance.md)\n* [How to deploy Learn-OCaml statically?](https://github.com/ocaml-sf/learn-ocaml/blob/master/docs/howto-deploy-learn-ocaml-statically.md)\n* [How to practice OCaml with Learn-OCaml?](https://github.com/ocaml-sf/learn-ocaml/blob/master/docs/howto-practice-ocaml.md)\n* [How to classify students answers?](https://github.com/ocaml-sf/learn-ocaml/blob/master/docs/howto-classify-students-answers.md)\n\nContacts\n--------\n\nTo ask any question about how to use Learn-OCaml, subscribe to\nthe mailing-list [learn-ocaml-club](https://sympa.inria.fr/sympa/subscribe/learn-ocaml-club).\n\nTo discuss about the development of Learn-OCaml, subscribe to\nthe mailing-list [learn-ocaml-dev](https://sympa.inria.fr/sympa/subscribe/learn-ocaml-dev).\n\nLicense and copyright\n---------------------\n\nUnless explicitly written below or in the files themselves, the source\ncode for the app, images, static files, course content and exercises\nare placed under the MIT license.\n\nLightly modified third party components ACE and ppx_metaquot are\nincluded, under their original licenses (respectively BSD and MIT).\n\nThe OCamlPro logo images are (c) OCamlPro. Redistribution is\npermitted, alteration requires prior written authorization by\nOCamlPro.\n\nThe OCaml / ocaml.org logo is released under the very liberal UNLICENSE.\nSee [https://github.com/ocaml/ocaml.org/blob/master/LICENSE.md](https://github.com/ocaml/ocaml.org/blob/master/LICENSE.md).\n\nThe Inconsolata font is released under the Open Font License.\nSee [http://www.levien.com/type/myfonts/inconsolata.html](http://www.levien.com/type/myfonts/inconsolata.html).\n\nThe Biolinum font is licensed under the GNU General Public License with\na 'Font-Exception'.\nSee [http://www.linuxlibertine.org](http://www.linuxlibertine.org).\n\nThe public instance of Learn OCaml uses the Fontin font instead of\nBiolinum. This font is licensed under the exljbris Font Foundry Free\nFont License Agreement, which, to our understanding, does not allow us\nto redistribute it. See [http://www.exljbris.com/eula.html](http://www.exljbris.com/eula.html). You will\noptionally have to procure the files by yourself while building the\napp. If not, the CSS provides a reasonable fallback font.\n\nContributions to this repository are placed under the MIT\nlicense. This means that we can merge them with the same license as\nthe rest of the codebase, while you keep all the rights on your code.\nAnd we will not have to bother you with any future license update.\nSee [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT).\n\nAuthors and Acknowledgements\n----------------------------\n\nLearn-OCaml is a free software by the [OCaml Software Foundation](https://ocaml-sf.org).\n\nIt was written by OCamlPro from 2015 to 2018.\n\nThe current main contributors are Érik Martin-Dorel, Yann Régis-Gianas, and Louis Gesbert.\n\nThe initial authors were Benjamin Canou, Çağdaş Bozman, Grégoire Henry, and Louis Gesbert.\n\nIt builds on the previous experience of Try OCaml, by Çağdaş Bozman and Fabrice Le Fessant.\n\nWe heavily use js_of_ocaml, so thanks to the Ocsigen team.\n\nThe text editing component is a customized version of ACE.\n\nWe also include a derivative of ppx_metaquot by Alain Frisch.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Focaml-sf%2Flearn-ocaml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Focaml-sf%2Flearn-ocaml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Focaml-sf%2Flearn-ocaml/lists"}