Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/scrape.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ jobs:
with:
title: '[scrape.yml] New OCaml blog posts and videos'
labels: scrape
branch: create-pull-request/patch-scrape-planet
add-paths: |
data/video-watch.yml
data/video-youtube.yml
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/scrape_changelog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ jobs:
with:
title: '[scrape_changelog.yml] New Platform Releases'
labels: scrape
branch: create-pull-request/patch-scrape-changelog
add-paths: |
data/changelog/*/*.md
commit-message: |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
title: "Emacs Integration for OCaml LSP Server: Introducing ocaml-eglot"
tags: [ocaml-lsp, platform]
---

# Emacs Integration for OCaml LSP Server: Introducing ocaml-eglot

## TL;DR

`ocaml-eglot` provides full OCaml language support in Emacs through the Language Server Protocol (LSP) instead of direct Merlin integration. It offers the same features as `merlin.el` with simplified setup and enhanced capabilities like project-wide search. If you're starting fresh or want a more standardized approach, try `ocaml-eglot`, which is actively maintained. If your current `merlin.el` setup works well, you can continue using it.

**Quick start**: [Install `ocaml-lsp-server`, add `ocaml-eglot` to your Emacs config](https://github.com/tarides/ocaml-eglot?tab=readme-ov-file#installation), and get the same OCaml development experience with less configuration.

## What is ocaml-eglot?

`ocaml-eglot` connects Emacs to `ocaml-lsp-server` using the Language Server Protocol, providing a standardized way to get OCaml language support.

Since the recent versions of Emacs (29), `eglot`, an LSP client, has been shipped with Emacs. However, `merlin.el` provides more features than LSP (which is designed to be generic), so relying solely on the features of LSP and `eglot` would limit functionality. Thus, we extended the LSP server to support more features, and `ocaml-eglot` allows you to benefit from these features in Emacs.

`ocaml-eglot` is a minor mode. It therefore works in conjunction with a major mode to edit Caml code. Examples of major modes include `tuareg`, `caml-mode` and the recent `neocaml`.

## Who Should Use ocaml-eglot?

**Use ocaml-eglot if you:**
- Are starting fresh with OCaml
- If you use or want to use Emacs
- Want simplified configuration with automatic setup
- Use multiple editors and want consistent OCaml support
- Want access to project-wide search and rename features
- Want to rely on an actively maintained project that evolves over time

If your current setup is working perfectly and is heavily customised, `merlin.el` will still keep working, so there's no immediate need to migrate. However, for the moment, we don't plan to actively maintain `merlin.el` -- unless we receive a lot of requests.

## Getting Started

Follow the [installation instructions in the ocaml-eglot README](https://github.com/tarides/ocaml-eglot?tab=readme-ov-file#installation).

When migrating from `merlin.el` to `ocaml-eglot`, your existing keybindings should work immediately!

## Features

**Error Navigation:** Quick jump to next/previous errors

**Type Information:** Display types under cursor with adjustable verbosity, navigate enclosing expressions

**Code Generation:** Pattern matching construction, case completion, wildcard refinement via "destruct" feature

**Navigation:** Jump between language constructs (let, module, function, match), navigate phrases and pattern cases

**Search:** Find definitions, declarations, and references

For a detailed list of features, see [the ocaml-eglot README](https://github.com/tarides/ocaml-eglot?tab=readme-ov-file#features).

## Next Steps

1. Try the basic setup with an existing OCaml project
2. Explore all the features of `ocaml-eglot`
3. Provide feedback at [ocaml-eglot's GitHub Issues](https://github.com/tarides/ocaml-eglot/issues)

## Documentation

- [ocaml-eglot README](https://github.com/tarides/ocaml-eglot)
- [OCaml.org editor setup tutorial](https://ocaml.org/docs/set-up-editor#emacs)

## Related Releases

On January 17, 2025, [ocaml-eglot version 1.0.0 was released](https://discuss.ocaml.org/t/ann-release-of-ocaml-eglot-1-0-0/15978/14), providing a new minor emacs mode to enable the editor features provided by **ocaml-lsp-server**. Subsequent releases [1.1.0](https://github.com/tarides/ocaml-eglot/releases/tag/1.1.0) and [1.2.0](https://discuss.ocaml.org/t/ann-release-of-ocaml-eglot-1-2-0/16515) enable support for `flycheck` as a configurable alternative to `flymake` (`1.0.0` release), Emacs `30.1` support, better user experience and error handling, as well as support for new features.
95 changes: 95 additions & 0 deletions data/changelog/releases/dune/2025-08-21-dune-3.20.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
---
title: Dune 3.20.0
tags:
- dune
- platform
authors:
contributors:
versions:
unstable: false
ignore: false
github_release_tags:
- 3.20.0
changelog: |
### Fixed

- Stop re-running cram tests after promotion when it's not necessary (#11994,
@rgrinberg)

- fix: `$ dune subst` should not fail when adding the version field in opam
files (#11801, fixes #11045, @btjorge)

- Kill all processes in the process group after the main process has
terminated; in particular this avoids background processes in cram tests to
stick around after the test finished (#11841, fixes #11820, @Alizter,
@Leonidas-from-XIV)

### Added

- `(tests)` stanzas now generate aliases with the test name. To run
`(test (name a))` you can do `dune build @runtest-a`. (#11558, grants part of #10239,
@Alizter)

- Inline test libraries now produce aliases `runtest-name_of_lib`
allowing users to run specific inline tests as `dune build
@runtest-name_of_lib`. (#11109, partially fixes #10239, @Alizter)

- feature: `$ dune subst` use version from `dune-project` when no version
control repository has been detected (#11801, @btjorge)

- Allow `dune exec` to run concurrently with another instance of dune in watch
mode (#11840, @gridbugs)

- Introduce `%{os}`, `%{os_version}`, `%{os_distribution}`, and `%{os_family}`
percent forms. These have the same values as their opam counterparts.
(#11863, @rgrinberg)

- Introduce option `(implicit_transitive_deps false-if-hidden-includes-supported)`
that is equivalent to `(implicit_transitive_deps false)` when `-H` is
supported by the compiler (OCaml >= 5.2) and equivalent to
`(implicit_transitive_deps true)` otherwise. (#11866, fixes #11212, @nojb)

- Add `dune describe location` for printing the path to the executable that
would be run (#11905, @gridbugs)

- `dune runtest` can now understand absolute paths as well as run tests in
specific build contexts (#11936, @Alizter).

- Added 'empty' alias which contains no targets. (#11556 #11952 #11955 #11956,
grants #4161, @Alizter and @rgrinberg)

- Allow `dune promote` to properly run while a watch mode server is running
(#12010, @ElectreAAS)

- Add `--alias` and `--alias-rec` flags as an alternative to the `@@` and `@`
syntax in the command line (#12043, fixes #5775, @rgrinberg)

- Added a `(timeout <float>)` field to the `(cram)` stanza to specify per-test
time limits. Tests exceeding the timeout are terminated with an error.
(#12041, @Alizter)

### Changed

- Format long lists in s-expressions to fill the line instead of
formatting them in a vertical way (#10892, fixes #10860, @nojb)

- Switch from MD5 to BLAKE3 for digesting targets and rules. BLAKE3 is both more
performant and difficult to break than MD5 (#11735, @rgrinberg, @Alizter)

- Print a warning when `dune build` runs over RPC (#11833, @gridbugs)

- Stop emitting empty module group wrapper `.js` file in `melange.emit`
(#11987, fixes #11986, @anmonteiro)
---

The Dune Team is happy to announce the release of Dune `3.20.0`.

This release contains some important bug fixes. It contains new features for
tests, such as the possibility to use an alias and the possibility to declare a
timeout for cram tests. This release also provides new possibilities for the
watch mode, like the ability to run an executable or promote files while the
watch mode is running.

A significant change in this release is how the dune file formatter
acts. It will now try to fill the line instead of using the vertical format.

32 changes: 32 additions & 0 deletions data/changelog/releases/dune/2025-08-26-dune.3.20.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
title: Dune 3.20.1
tags:
- dune
- platform
authors:
contributors:
versions:
unstable: false
ignore: false
github_release_tags:
- 3.20.1
changelog: |
### Fixed

- Fix `runtest-js` mistakenly depending on `byte` (fixes #12243, #12242,
@vouillon and @Alizter)

- Fix the interpretation of paths in `dune runtest` when running from within a
subdirectory. (#12251, fixes #12250, @Alizter)

### Changed

- Revert formatting change introduced in 3.20.0 making long lists in
s-expressions fill the line instead of formatting them in a vertical way
(#12245, reverts #10892, @nojb)
---

The Dune Team is happy to announce the release of Dune `3.20.1`.

This release introduces some minor fixes and reverts the dune file formatter
change.
2 changes: 1 addition & 1 deletion data/events/2024-09-16-fun-ocaml.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: "Fun OCaml 2024"
event_type: conference
country: "Germany"
city: "Berlin"
url: https://fun-ocaml.com
url: https://fun-ocaml.com/2024
starts:
yyyy_mm_dd: "2024-09-16"
---
9 changes: 9 additions & 0 deletions data/events/2025-09-15-fun-ocaml.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
title: "Fun OCaml 2025"
event_type: conference
country: "Poland"
city: "Warsaw"
url: https://fun-ocaml.com
starts:
yyyy_mm_dd: "2025-09-15"
---
6 changes: 4 additions & 2 deletions data/is_ocaml_yet/web.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,12 +164,13 @@ categories:
- name: Authentication
status: •
description: |
Packages for authentication-related functionality in OCaml Web applications.
Packages for authentication-related functionality in OCaml Web
applications. Note that `webauthn` can be used to implement passkey
authentication.
packages:
- name: jwt
- name: cookie
- name: FPauth
- name: u2f
- name: webauthn
- name: ssl
- name: twostep
Expand Down Expand Up @@ -409,6 +410,7 @@ allow you to program your Web and mobile application in a single code.
## Want to Help?

Here are some projects that would help make OCaml a stronger candidate for Web applications:

- Improve [ocaml-swagger](https://github.com/andrenth/ocaml-swagger) to be able to generate API for popular Web APIs like Stripe.
- Create an OAuth2 client library.
- Create clients to the Azure services APIs.
Loading
Loading