{"id":13484471,"url":"https://github.com/ocaml/merlin","last_synced_at":"2026-04-09T04:31:32.413Z","repository":{"id":6800709,"uuid":"8048400","full_name":"ocaml/merlin","owner":"ocaml","description":"Context sensitive completion for OCaml in Vim and Emacs","archived":false,"fork":false,"pushed_at":"2026-04-01T12:35:13.000Z","size":52496,"stargazers_count":1674,"open_issues_count":296,"forks_count":251,"subscribers_count":34,"default_branch":"main","last_synced_at":"2026-04-03T04:21:25.388Z","etag":null,"topics":["atom","emacs","ocaml","vim"],"latest_commit_sha":null,"homepage":"https://ocaml.github.io/merlin/","language":"OCaml","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.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":"CONTRIBUTING.md","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,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2013-02-06T09:38:04.000Z","updated_at":"2026-04-01T12:35:21.000Z","dependencies_parsed_at":"2023-12-18T11:31:03.399Z","dependency_job_id":"e5e15f7b-9422-4b5e-bd64-3329c66381db","html_url":"https://github.com/ocaml/merlin","commit_stats":{"total_commits":5069,"total_committers":132,"mean_commits":38.40151515151515,"dds":0.5748668376405603,"last_synced_commit":"005b42c50b450a4930d5cea25aab271ed5b88cc3"},"previous_names":[],"tags_count":131,"template":false,"template_full_name":null,"purl":"pkg:github/ocaml/merlin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml%2Fmerlin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml%2Fmerlin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml%2Fmerlin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml%2Fmerlin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ocaml","download_url":"https://codeload.github.com/ocaml/merlin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocaml%2Fmerlin/sbom","scorecard":{"id":701308,"data":{"date":"2025-08-11","repo":{"name":"github.com/ocaml/merlin","commit":"8b88b89ee7431a23eaf95e4e02e45dc65595aa74"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"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":"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":1,"reason":"Found 1/7 approved changesets -- score normalized to 1","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":10,"reason":"30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/changelog.yml:1","Warn: no topLevel permission defined: .github/workflows/emacs-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/fuzzy-ci-privileged.yml:1","Warn: no topLevel permission defined: .github/workflows/fuzzy-ci.yml:1","Warn: no topLevel permission defined: .github/workflows/main.yml:1","Warn: no topLevel permission defined: .github/workflows/nix.yml:1","Warn: no topLevel permission defined: .github/workflows/ocaml-lsp-compat.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":"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":"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":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/changelog.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/changelog.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/emacs-lint.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/emacs-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/emacs-lint.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/emacs-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci-privileged.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci-privileged.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:70: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:90: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:109: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:207: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:221: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:238: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:244: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:253: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:297: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:312: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:316: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:374: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:457: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fuzzy-ci.yml:502: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/fuzzy-ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/main.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/nix.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/nix.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/nix.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/nix.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ocaml-lsp-compat.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/ocaml-lsp-compat.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ocaml-lsp-compat.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/ocaml/merlin/ocaml-lsp-compat.yml/main?enable=pin","Warn: containerImage not pinned by hash: bench.Dockerfile:1: pin your Docker image by updating ocaml/opam:ubuntu-20.04-ocaml-5.3 to ocaml/opam:ubuntu-20.04-ocaml-5.3@sha256:4a941b106a5ae7590eac593112321146d2113379d15ba93f739c40243e70eb43","Info:   0 out of  19 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   6 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage 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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v5.5-503 not signed: https://api.github.com/repos/ocaml/merlin/releases/227378982","Warn: release artifact v4.19-414 not signed: https://api.github.com/repos/ocaml/merlin/releases/226986330","Warn: release artifact v5.4.1-503 not signed: https://api.github.com/repos/ocaml/merlin/releases/194383106","Warn: release artifact v5.4-503 not signed: https://api.github.com/repos/ocaml/merlin/releases/194152464","Warn: release artifact v5.3-502 not signed: https://api.github.com/repos/ocaml/merlin/releases/187577223","Warn: release artifact v5.5-503 does not have provenance: https://api.github.com/repos/ocaml/merlin/releases/227378982","Warn: release artifact v4.19-414 does not have provenance: https://api.github.com/repos/ocaml/merlin/releases/226986330","Warn: release artifact v5.4.1-503 does not have provenance: https://api.github.com/repos/ocaml/merlin/releases/194383106","Warn: release artifact v5.4-503 does not have provenance: https://api.github.com/repos/ocaml/merlin/releases/194152464","Warn: release artifact v5.3-502 does not have provenance: https://api.github.com/repos/ocaml/merlin/releases/187577223"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 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-22T05:16:23.290Z","repository_id":6800709,"created_at":"2025-08-22T05:16:23.290Z","updated_at":"2025-08-22T05:16:23.290Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31586403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"online","status_checked_at":"2026-04-09T02:00:06.848Z","response_time":112,"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":["atom","emacs","ocaml","vim"],"created_at":"2024-07-31T17:01:24.915Z","updated_at":"2026-04-09T04:31:32.393Z","avatar_url":"https://github.com/ocaml.png","language":"OCaml","funding_links":[],"categories":["OCaml","Tools","Developer Tools"],"sub_categories":["Graphics and Visualization"],"readme":"⚠️ Default branch recently renamed to `main`\n=======================\nYou can update your local clones using the following procedure:\n```\ngit branch -m master main\ngit fetch origin\ngit branch -u origin/main main\ngit remote set-head origin -a\n```\nWhere `origin` is the name of the upstream remote.\n\n----\n\n\n![merlin completion in vim](https://github.com/ocaml/merlin/wiki/vim_complete.png)\n\n[Merlin](https://ocaml.github.io/merlin/) is an editor service that provides modern IDE features for OCaml.\n\nEmacs and Vim support is provided out-of-the-box. To get editor support with Merlin in\nother editors, see [this](#other-editors).\n\nEasy Installation With opam\n===========================\n\nIf you have a working [opam](https://opam.ocaml.org/) installation, install Merlin running the following two commands in terminal:\n\n```shell\nopam install merlin\nopam user-setup install\n```\n\n[opam-user-setup](https://github.com/OCamlPro/opam-user-setup) takes care of configuring Emacs and Vim to make best use of your current install. You can also [configure the editor](#editor-setup) yourself, if you prefer.\n\nManually Building and Installing Merlin\n=======================================\n\nSince version 4.0, Merlin's repository has a dedicated branch for each version of\nOCaml, and the branch name consists of the concatenation of OCaml major versions\nand minor versions. So, for instance, `OCaml 4.11.*` maps to branch `411`.\nThe main branch is usually synchronised with the branch compatible with the\nlatest (almost-)released version of OCaml.\n\nNote: if you're using an older version of OCaml (between 4.02 and 4.10), you will\nwant to build the 3.4 branch, although it won't contain the most recent\nfeatures.\n\nCompilation\n-----------\n\nDependencies: `ocamlfind`, `yojson` \u003e= 2.0.0, `dune` \u003e= 2.7.\n\n```shell\ndune build -p dot-merlin-reader,merlin\n```\n\nNote: if you want to work on Merlin, you'll want to avoid the `-p merlin` to\nbuild in dev mode, with some extra warnings enabled. In that case, you'll also\nneed an extra dependency: Menhir. We recommend that you pin it to version 20201216\nwhich was used to generate the parser currently present in the sources.\n```shell\nopam pin menhir 20201216\n```\n\nInstallation\n------------\n\nIf you haven't encountered any errors in the previous step, just run:\n\n```shell\ndune install -p dot-merlin-reader,merlin\n```\n\nYou can pass an explicit prefix to Dune, using `--prefix`. It defaults to\nyour current opam switch.\n\nEditor Setup\n============\n\nTo set up Emacs and Vim, you need to instruct them to run the appropriate script when an OCaml file is opened.\n\nIn the rest of the document, \\\u003cSHARE\\_DIR\\\u003e refers to the directory where Merlin data files are installed.\n\nIt will usually be:\n\n- printed by the command `opam var share`, if you used opam\n- \"\\\u003cprefix\\\u003e/share\" if you explicitly specified a prefix when configuring Merlin\n\n### Vim Setup\n\nMakes sure that `ocamlmerlin` binary can be found in PATH.\n\nThe only setup needed is to have the following directory in the Vim runtime path (append this to your `.vimrc`):\n\n    :set rtp+=\u003cSHARE_DIR\u003e/merlin/vim\n\nThe default configuration can be seen in:\n\n    \u003cSHARE_DIR\u003e/merlin/vim/plugin/merlin.vim\n\nAfter adding Merlin to Vim's runtime path, you will probably want to run `:helptags \u003cSHARE_DIR\u003e/merlin/vim/doc` to register Merlin documentation inside Vim.\n\nA more comprehensive documentation can be found on the [vim-from-scratch wiki](https://github.com/ocaml/merlin/wiki/vim-from-scratch).\n\n### Emacs Setup\n\n#### Manual Setup\n\nMerlin comes with an Emacs library (file: emacs/merlin.el) that implements a *minor-mode* that is supposed to be used on top of *tuareg-mode*.\n\nJust add the following to your *.emacs* file:\n\n```emacs\n(push \"\u003cSHARE_DIR\u003e/emacs/site-lisp\" load-path) ; directory containing merlin.el\n(setq merlin-command \"\u003cBIN_DIR\u003e/ocamlmerlin\")  ; needed only if ocamlmerlin not already in your PATH\n(autoload 'merlin-mode \"merlin\" \"Merlin mode\" t)\n(add-hook 'tuareg-mode-hook #'merlin-mode)\n(add-hook 'caml-mode-hook #'merlin-mode)\n;; Uncomment these lines if you want to enable integration with the corresponding packages\n;; (require 'merlin-iedit)       ; iedit.el editing of occurrences\n;; (require 'merlin-company)     ; company.el completion\n;; (require 'merlin-ac)          ; auto-complete.el completion\n;; To easily change opam switches and pick the ocamlmerlin binary accordingly,\n;; you can use the minor mode https://github.com/ProofGeneral/opam-switch-mode\n```\n\nMore comprehensive documentation can be found on the [emacs-from-scratch wiki](https://github.com/ocaml/merlin/wiki/emacs-from-scratch).\n\n#### Setup via `package.el`\n\nAn installable core Merlin package is available via\n[MELPA](https://melpa.org), along with further small integration\npackages `merlin-company`, `merlin-iedit`, and `merlin-ac`, which users\ncan install according to their needs.\n\nHaving installed the required packages, the following code in your\nEmacs startup file is sufficient:\n\n```el\n(setq merlin-command \"\u003cBIN_DIR\u003e/ocamlmerlin\")  ; needed only if ocamlmerlin not already in your PATH\n(add-hook 'tuareg-mode-hook #'merlin-mode)\n(add-hook 'caml-mode-hook #'merlin-mode)\n;; Uncomment these lines if you want to enable integration with the corresponding packages\n;; (require 'merlin-iedit)       ; iedit.el editing of occurrences\n;; (require 'merlin-company)     ; company.el completion\n;; (require 'merlin-ac)          ; auto-complete.el completion\n;; To easily change opam switches and pick the ocamlmerlin binary accordingly,\n;; you can use the minor mode https://github.com/ProofGeneral/opam-switch-mode\n```\n\n### Other Editors\n\nMerlin only supports Vim and Emacs out-of-the-box. This section describes shortly how to get\nMerlin-based editor support in other editors.\n\n#### Visual Studio Code\n\nOCaml has official support for Visual Studio Code through an extension called \"OCaml Platform,\" available in the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ocamllabs.ocaml-platform). Project source is available [here](https://github.com/ocamllabs/vscode-ocaml-platform).\n*Note* that it requires [OCaml-LSP](https://github.com/ocaml/ocaml-lsp), an official\n[Language Server Protocol(LSP)](https://microsoft.github.io/language-server-protocol/specifications/specification-current/)\nimplementation for OCaml based on Merlin. It can be installed by running `opam install ocaml-lsp-server`.\n\n#### Editors Without Official Support\n\nConsider using [OCaml-LSP](https://github.com/ocaml/ocaml-lsp) along with your editor's\nplugin for LSP if there is one.\n\nThe wiki also contains pages for:\n\n- [Acme](https://github.com/ocaml/merlin/wiki/acme-from-scratch)\n- [Atom](https://github.com/ocaml/merlin/wiki/atom-from-scratch)\n- [Spacemacs](https://github.com/ocaml/merlin/wiki/spacemacs-from-scratch)\n\nExternal contributors have implemented modes for more editors:\n\n- [ocaml-merlin package for Atom](https://atom.io/packages/ocaml-merlin)\n- [Nuclide for Atom](https://nuclide.io/) includes Merlin support\n- [Sublime Text 3](https://github.com/cynddl/sublime-text-merlin)\n\n\nMerlin as a library\n===================\n\nMerlin can also be used as a library. Some projects already rely on this:\n\n- [OCaml LSP](https://github.com/ocaml/ocaml-lsp) - The official OCaml's Language Server Protocol implementation\n\nIf you're building editor tools, you might also want to use Merlin as a library!\n\nNote, however, that Merlin's public API is not stable, and we don't guarantee backward-compatibility between releases.\nIf you're a Merlin user and depend on our public API, we recommend that you contact us or open an issue.\n\nNext Steps\n==========\n\nTo use Merlin with a multi-file project, it is necessary to have a [.merlin](https://github.com/ocaml/merlin/wiki/project-configuration) file,\nunless your project is built using Dune.\nNote that, in a project using Dune, user-created `.merlin` files will take precedence over the configuration provided by Dune to Merlin.\n\nRead more in the [wiki](https://github.com/ocaml/merlin/wiki) to learn how to make full use of Merlin in your projects.\n\nDevelopment of Merlin\n=====================\n\nMost of the development happens through the [GitHub page](https://github.com/ocaml/merlin).\n\nThe [mailing list](https://lists.forge.ocamlcore.org/cgi-bin/listinfo/merlin-discuss) welcomes general questions and discussions.\n\nMerlin Labels\n-------------\n\n[Area/Emacs](https://github.com/ocaml/merlin/labels/Area%2FEmacs): Related to Emacs\n\n[Area/Vim](https://github.com/ocaml/merlin/labels/Area%2FVim): Related to Vim\n\n[Kind/Bug](https://github.com/ocaml/merlin/labels/Kind%2FBug): This issue describes a problem.\n\n[Kind/Docs](https://github.com/ocaml/merlin/labels/Kind%2FDocs): This issue describes a documentation change.\n\n[Kind/Feature-Request](https://github.com/ocaml/merlin/labels/Kind%2FFeature-request): Solving this issue requires implementing a new feature.\n\n[Kind/To-discuss](https://github.com/ocaml/merlin/labels/Kind%2FTo-discuss): Discussion needed to converge on a solution, often aesthetic. See mailing list for discussion.\n\n[Status/0-More-info-needed](https://github.com/ocaml/merlin/labels/Status%2F0-More-info-needed): More information is needed before this issue can be triaged.\n\n[Status/0-Triage](https://github.com/ocaml/merlin/labels/Status%2F0-Triage): This issue needs triaging.\n\n[Status/1-Acknowledged](https://github.com/ocaml/merlin/labels/Status%2F1-Acknowledged): This issue has been triaged and is being investigated.\n\n[Status/2-Regression](https://github.com/ocaml/merlin/labels/Status%2F2-Regression): Known workaround to be applied and tested.\n\n[Status/3-Fixed-need-test](https://github.com/ocaml/merlin/labels/Status%2F3-Fixed-need-test): This issue has been fixed and needs checking.\n\n[Status/4-Fixed](https://github.com/ocaml/merlin/labels/Status%2F4-Fixed): This issue has been fixed!\n\n[Status/5-Awaiting-feedback](https://github.com/ocaml/merlin/labels/Status%2F5-Awaiting-feedback): This issue requires feedback on a previous fix.\n\nYou can see current areas of development in our [Merlin Project Roadmaps](https://github.com/ocaml/merlin/projects) that we keep up to date.\n\nContributing to Merlin\n----------------------\n\nMerlin needs your help and contributions!\n\n### Reporting Issues\n\nWhen you encounter an issue, please report it with as much detail as possible. A thorough bug report is always appreciated :)\n\nCheck that our issue database doesn't already include that problem/suggestion. You can click \"subscribe\" on issues to follow their progress and updates.\n\nWhen reporting issues, please include:\n\n- Steps to reproduce the problem, if possible with some code triggering the issue\n- Version of the tools you are using: operating system, editor, OCaml\n\nTry to be as specific as possible:\n\n- Avoid generic phrasing such as \"doesn't work.\" Explain *what* is happening (editor is freezing, you got an error message, the answer is not what was expected, etc.).\n- Include the content of error messages if there are any.\n\nIf it seems relevant, also include information about your development environment:\n\n- The opam version and switch in use\n- Other toolchains involved (OCaml flavors, Cygwin, C compiler, shell, ...)\n- How the editor was setup\n\n### Pull Requests\n\nFound a bug and know how to fix it? Or have a feature you can implement directly? We appreciate pull requests to improve Merlin. Please note: any significant fix should start life as an issue first.\n\n#### Changelog\n\nUser-visible changes should come with an entry in the changelog under\nthe appropriate part of the unreleased section. PR that doesn't\nprovide an entry will fail CI check. This behavior can be overridden\nby using the \"no changelog\" label, which is used for changes that are\nnot user-visible.\n\n### Documentation and Wiki\nHelp is greatly appreciated, the wiki needs love.\n\nIf the wiki didn't cover a topic and you found out the answer, updating the page or pointing out the issue will be very useful for future users.\n\n### Discussing With Other Merlin Users and Contributors\n\nTogether with commenting on issues with direct feedback and relevant information, we use the [mailing list](https://lists.forge.ocamlcore.org/cgi-bin/listinfo/merlin-discuss) to discuss ideas and current designs/implementations. User input helps us to converge on solutions, especially those for aesthetic and user-oriented topics.\n\nList of Contributors\n--------------------\n\nWe would like to thank all people who contributed to Merlin.\n\nMain collaborators:\n* [Frédéric Bour](https://github.com/let-def), main developer\n* [Thomas Refis](https://github.com/trefis), main developer\n* [Gemma Gordon](https://github.com/GemmaG), project manager\n* [Simon Castellan](https://github.com/asmanur), contributed the initial Emacs mode\n\nContributors:\n* [Andrew Noyes](https://github.com/atn34)\n* [Andrey Popp](https://github.com/andreypopp)\n* [Anil Madhavapeddy](https://github.com/avsm)\n* [Anton Bachin](https://github.com/aantron)\n* [Armaël Guéneau](https://github.com/Armael)\n* [Arthur Wendling](https://github.com/art-w)\n* [Benjamin San Souci](https://github.com/bsansouci)\n* [Bernhard Schommer](https://github.com/bschommer)\n* [Bobby Priambodo](https://github.com/bobbypriambodo)\n* [Bryan Phelps](https://github.com/bryphe)\n* [Chris Konstad](https://github.com/chriskonstad)\n* [Christopher Reichert](https://github.com/creichert)\n* [Christophe Troestler](https://github.com/Chris00)\n* [David Allsopp](https://github.com/dra27)\n* [Fabian Hemmer](https://github.com/copy)\n* [Fourchaux](https://github.com/Fourchaux)\n* [Gabriel Scherer](https://github.com/gasche)\n* [Geoff Gole](https://github.com/gsg)\n* [Gerd Stolpmann](https://github.com/gerdstolpmann)\n* [Gregory Nisbet](https://github.com/gregory-nisbet)\n* [Jacob Bass](https://github.com/bassjacob)\n* [Jacques-Pascal Deplaix](https://github.com/jpdeplaix)\n* [Jah Rehders](https://github.com/sheijk)\n* [Jason Staten](https://github.com/statianzo)\n* [Jochen Bartl](https://github.com/verbosemode)\n* [Jordan Walke](https://github.com/jordwalke)\n* [Keigo Imai](https://github.com/keigoi)\n* [Leandro Ostera](https://github.com/ostera)\n* [Leo White](https://github.com/lpw25])\n* [Madroach](https://github.com/madroach)\n* [Malcolm Matalka](https://github.com/orbitz)\n* [Marc Weber](https://github.com/MarcWeber)\n* [Mario Rodas](https://github.com/marsam)\n* [Markus Mottl](https://github.com/mmottl)\n* [Milo Davis](https://github.com/MiloDavis)\n* [Nick Borden](https://github.com/hcwndbyw)\n* [Nicolás Ojeda Bar](https://github.com/nojb)\n* [Olivier Andrieu](https://github.com/oandrieu)\n* [Philipp Haselwarter](https://github.com/haselwarter)\n* [Pierre Chambart](https://github.com/chambart)\n* [Raman Varabets](https://github.com/cyberhuman)\n* [Raphaël Proust](https://github.com/raphael-proust)\n* [Ronan Le Hy](https://github.com/lehy-probayes) [(2)](https://github.com/lehy)\n* [Rudi Grinberg](https://github.com/rgrinberg)\n* [Steve Purcell](https://github.com/purcell)\n* [Syohei Yoshida](https://github.com/syohex)\n* [\"tddsg\"](https://github.com/tddsg)\n* [Tomasz Kołodziejski](https://github.com/neojski)\n* [Velichko Vsevolod](https://github.com/torkve)\n* [Vincent / Twinside](https://github.com/Twinside)\n* [Xavier Guérin](https://github.com/xguerin)\n* [Ximin Luo](https://github.com/infinity0)\n* [Yotam Barnoy](https://github.com/bluddy)\n\n### Sponsoring and Donations\n\nWe would like to thank [Jane Street](https://www.janestreet.com) for sponsoring and [OCaml Labs](https://github.com/ocamllabs) for providing support and management.\n\nAnd many thanks to our [Bountysource](https://www.bountysource.com/teams/the-lambda-church/backers) backers.\n\n### Other Acknowledgements\n\nDistribution and configuration:\n* [Louis Gesbert](https://github.com/AltGr), [opam-user-setup](https://github.com/OCamlPro/opam-user-setup), out-of-the-box setup for Vim and Emacs\n* [Edgar Aroutinian](https://github.com/fxfactorial), [ocaml-starterkit](https://github.com/fxfactorial/ocaml-starterkit), collection of tools for beginners in OCaml\n\nSupport for other editors:\n* [Luc Rocher](https://github.com/cynddl), [Sublime Text 3](https://github.com/cynddl/sublime-text-merlin)\n* [Pieter Goetschalckx](https://github.com/314eter), [ocaml-merlin package for Atom](https://atom.io/packages/ocaml-merlin)\n* various contributors, [nuclide package for Atom](https://nuclide.io/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Focaml%2Fmerlin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Focaml%2Fmerlin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Focaml%2Fmerlin/lists"}