ocaml

Stars and mentions

Last 30 days, Oct 5 – Nov 3

GitHub stars48
mentions10
02468Oct 5Oct 19Nov 3
UTC days · repositories ocaml owns9 repositories

Package downloads

No package download history available yet.

Top repositories

ocaml’s repositories ranked by new stars, as on trending.

Loading

Contributes to

Repositories outside ocaml’s account where ocaml opened or reviewed pull requests in the past 365 days.

Who noticed ocaml

Everyone who starred or forked ocaml’s repositories since the archive began in 2011.

Notable accounts

Ordered by the stars their own repositories have received.

Biggest fans

Accounts that starred the most of these repositories.

Breakout weeks

Each repository’s best week of new stars, with the release published around it.

Mentions

10posts
Nov 40 posts
  1. Aborting cleanly in C code when `caml_callback*_exn()` returns an exception Hi, I am maintaining a binding for the GLFW library, which provides an API for registering callback functions to be used for event handling. In order to make these kind of features available in OCaml, I use closures provided by the user in the C stubs with the caml_callback family of functions. An issue arises when the user-provided code raises an exception that it does not handle. In that case, the exception is propagated to the OCaml code where the user called the GLFW event-polling function, skipping over the C code, and possibly leaving it in an incoherent state or leaking resources. In order to handle this problem, I would like to handle exceptions raised by a callback function the same way the OCaml runtime would handle an uncaught exception (print it to stderr, optionally with a backtrace, and abort). My current solution is to use the caml_fatal_uncaught_exception function found in the printexc.h header, but I am wondering if it is valid to call this function like that given its definition is guarded with #ifdef CAML_INTERNALS. A GitHub PR added those guards a few years ago and it seems to be implied that the choice was made somewhat by default for lack of users outside the runtime at that point, so maybe using it in user code might actually be fine? I would like to hear the thoughts of someone with better knowledge of the OCaml internals about this so that we can figure out whether this approach is correct, needs refinement, or is not viable. Cheers!

  2. @leostera @kartikb753 Sometimes you find bugs that have been in the oracle for 27 years. ocaml#15157

    1 like · 16 views
  3. Discourse · · OCaml · on [BLOG] dune tracing · @raphael-proust · ocaml/dune

    [BLOG] dune tracing Over the summer, @NatKarmios worked on dune for his internship at [Ahrefs](ahrefs.com). He got a couple of PRs merged into dune. Then he wrote a new backend for traces and a matching perfetto extension. All of the details in his blog post: Tracing Dune, with a side of graphs TL;DR: you get a graph view of the build, some SQL querying capabilities, it scales to handle Ahrefs' monorepo We're using the new tracing capability internally. And we're planning on upstreaming it too.

    10 likes
  4. Got bored of distributed systems, started hunting compiler bugs. ocaml#15202

    32 likes · 1 repost · 1,067 views
  5. Do you want to go on a camel-ride to explore the world of OCaml? ![hongbin-heNpLRaLDNw-unsplash|666x500](upload://2Xqw65rwjcCLz0AopXMBqShe4YJ.jpeg) Photo by Hongbin on Unsplash Have you ever opened a new code repository and wondered where to begin? What do all these folders and files mean? Where should I look first? And how do I start contributing? I had similar questions when I began exploring OCaml and the geocaml/ocaml-tiff repository. While exploring the codebase, a few fellow contributors also reached out to me for help understanding its structure. So, I thought, why not put together everything I've learned in one place and share it with everyone? Our friendly camel 🐪 would be really happy to take you on this exploration journey! So, hop on! Let's go for a ride! Meet OCaml and its camel 🐪 OCaml is a high-level, statically typed programming language that supports functional, imperative, and object-oriented programming. The OCaml community contributes to the implementation of the language, as well as its growing ecosystem of tools and libraries. What did I find interesting about OCaml? I explored videos from the FUN OCaml conference, where I learned about how OCaml is used in academic research, industry, and software development, along with the scientific ideas behind the language. One interesting talk was Frameworks: No, Libraries: Yes. Developing a Product in OCaml from Scratch - FUN OCaml 2025 by Malcolm Matalka and the playlist OCaml Unboxed by the wonderful folks at Jane Street. Coming from a background in R, Python, and scientific data analysis, I was curious to explore how OCaml is used in research and software. That's how I found myself exploring `ocaml-tiff` `` - a library for reading and writing TIFF image data, including geospatial applications. Getting started with OCaml Before diving into the code, let's get familiar with a few tools. The ocaml-tiff project uses the Dune build system and the opam package manager. - Dune helps build and test OCaml projects. - opam helps manage OCaml packages and development environments. - utop provides an interactive environment for experimenting with OCaml code right into your terminal window. If you're new to OCaml, these resources are a great starting point: - How to Install OCaml - Take a Tour of OCaml - Write Your First OCaml Program I also experimented with OCaml using utop in my VS Code terminal. It was a useful way to understand the syntax and observe how the language behaves. To try it yourself, paste the following commands in your terminal: opam install utop utop And here's a small experiment: let square x = x * x;; square 5;; You should get 25 as the result! Let's explore the ocaml-tiff repository! Are you already feeling inspired to contribute? Start with the project's CONTRIBUTING.md guide and follow the setup instructions. Once your local environment is ready, let's understand how the repository is organised. What's inside the folders? Here are five important folders in the root directory. | Sr. No. | Folder name | Folder Content | What does the folder do? (Layman edition/Newcomer edition) | What do these files do? | |----|----|----|----|----| | 1 | src/ | Main source code | Builds the functionality | Contains the OCaml code responsible for understanding TIFF files and their contents. | | 2 | test/ | Tests | Checks that the functionality works | Contains tests and sample TIFF files that help catch errors when code changes. | | 3 | examples/ | Example programs | Shows how to use it | Demonstrates how other programs can use the library. | | 4 | bench/ | Benchmarks | Measures performance | Measures how efficiently the library performs operations. | | 5 | fuzz/ | Robustness testing | Finds problems with unusual inputs | Helps identify crashes and unexpected behaviour. | My tip: Start with the README.md, then explore examples/ and test/ before diving into the source code. What are the other files in the root directory? | Sr. No. | File | What it does? | |----|----|----| | 1 | README.md | Introduces the project and its usage. | | 2 | HACKING.md | Explains technical and development details. | | 3 | CONTRIBUTING.md | Provides instructions for contributors. | | 4 | dune-project | Defines the project and package configuration. | | 5 | dune | Configures build behaviour. | | 6 | tiff.opam | Contains package metadata and dependencies. | | 7 | tiff.opam.template | Template for package metadata. | | 8 | .ocamlformat | Defines OCaml code formatting rules. | | 9 | .gitignore | Tells Git which files to ignore. | | 10 | .gitattributes | Configures how Git handles certain files. | | 11 | LICENSE | Specifies the software's licensing terms. | What do the different file extensions mean? This was one of the first things I wanted to understand when exploring the repository. | Sr. No. | File type | Meaning | Familiar comparison with a Python project | |----|----|----|----| | 1 | .ml | OCaml implementation code | .py in Python or .R in R | | 2 | .mli | Defines a module's public interface | Similar to an API declaration or header file | | 3 | .md | Markdown documentation | GitHub README | | 4 | .tiff | Image file, often used for testing | Sample dataset | | 5 | .opam | Package metadata and dependencies | Package manifest | | 6 | .ocamlformat | Code formatting configuration | Python formatter configuration | | 7 | .gitignore | Git ignore rules | Same concept in Python projects | | 8 | .gitattributes | Git file-handling rules | Git configuration | You don't need to understand every file immediately. Recognising what each file is for is already a useful first step! From exploration to contribution: A little about my journey Once I understood the repository structure, I began exploring Issue #81: Structured Error Reporting. The issue involved improving how the library handles and reports errors. I started by asking questions: Where are errors raised? How are they handled? Which files contain the relevant code? This helped me identify the relevant parts of the codebase and gradually understand how they worked. Interestingly, while setting up the project, I also encountered a problem that turned out to be a bug. I reported it, worked on a 1-line fix, and submitted Pull Request #94, which was merged! I shared the fix with other contributors, hoping it would make their setup experience easier. I also started working on structured error reporting and documentation improvements. My biggest takeaway? You don't always need to understand an entire codebase before contributing. Sometimes, the process of getting started reveals something useful that you can improve for everyone. Your turn! Where will the camel take you next? 🐪 Now that you've explored the language, its tools, and the repository structure, why not try something yourself? Here's a small challenge: 1. Reproduce existing examples: Check out the Your First Program learning page from the ocaml.org official website and write your first program using the OCaml language. 2. Explore: Open the ocaml-tiff repository and find a function inside src/. 3. Experiment: Try running a small OCaml program using utop. 4. Investigate: Look at the tests and see how the project checks that its functions work. 5. Contribute: Browse the open issues. Is there something you'd like to explore further? And remember, your journey doesn't need to stop at this repository! Explore the OCaml community, browse the OCaml GitHub organization, or discover more learning resources on ocaml.org. You might find an interesting project, learn a new programming concept, or meet people who are exploring similar questions. One last thought When I first started exploring OCaml, I had more questions than answers. And I still have plenty of questions! But every question has helped me discover something new, whether about the language, the repository, or the people contributing to it. > You don't have to understand everything to get started. Start small, stay curious, and share what you learn along the way. So, where will your next camel ride take you? ![maintenance-open-source (1)|658x500](upload://2PQ3mYK4L6Z6Y7t3v0ERuicqg2v.jpeg) The Turing Way Community, & Scriberia. (2023). Illustrations from The Turing Way: Shared under CC-BY 4.0 for reuse [Figure]. Zenodo. doi.org Happy exploring! 🐪📚

    1 like
  6. [Caml-list] OCaml 5.5.2 released Dear OCaml users, We have the pleasure of celebrating the anniversary of the first powered flight in Europe by announcing the release of OCaml 5.5.2. OCaml 5.5.2 fixes six minor security issues, two rare miscompilations, a configuration issue with future versions of macOS, and one runtime events library issue. Overall, if you were already using any versions of OCaml 5.5, we are advising you to switch to OCaml 5.5.2 . The full list of bug fixes is available below for more details. Happy hacking, -- Florian Angeletti, for the OCaml team. Installation Instructions ----------------------------------- The base compiler can be installed as an opam switch with the following commands: opam update opam switch create 5.5.2 The source code for the release is also directly available on: * GitHub: github.com/ocaml/ocaml/archive/5.5.2.tar.gz * Inria archive: caml.inria.fr Bug Fixes -------------- - #15045(ocaml#15045): Atomic loads whose results are unused should not be removed during dead-code elimination. (Xavier Clerc, review by Steven Dolan and KC Sivaramakrishnan) - #15067(ocaml#15067), [#15071](ocaml#15071): Fix detection of functions available in the future on macOS. (Antonin Décimo, review by Nicolás Ojeda Bär and Damien Doligez) - #15112(ocaml#15112), OSEC-2026-22: `Unix.map_file`: protect against overflow when computing the data size. (Xavier Leroy and Nicolás Ojeda Bär, review by Nicolás Ojeda Bär and Edwin Török) - #15113(ocaml#15113), OSEC-2026-21: `Str.string_partial_match`: make sure captured groups are valid. (Xavier Leroy, review by Nicolás Ojeda Bär and Edwin Török) - #15115(ocaml#15115), OSEC-2026-23: Fix multiple issues in demarshaling (`Marshal.from_{channel,string,bytes}`) (Xavier Leroy, review by Nicolás Ojeda Bär) - #15133(ocaml#15133), OSEC 2026-24: Multiple issues in command quoting on Windows (Xavier Leroy and Nicolás Ojeda Bär, review by Nicolás Ojeda Bär) - #15119(ocaml#15119), OSEC-2026-25: Harden decoding of runtime events messages from ring buffers. (Sadiq Jaffer, report by Hannes Mehnert, review by Olivier Nicole and Edwin Török) - #15177(ocaml#15177), OSEC-2026-26: Maintain custom events cache integrity. (Sadiq Jaffer, report by Hannes Mehnert, review by Edwin Török) - #15043(ocaml#15043), [#15076](ocaml#15076): runtime events library, fix an infinite loop when a user event is larger than half the ring buffer. (Tim McGilchrist, review by Sadiq Jaffer) - #15185(ocaml#15185), [#15187](ocaml#15187): fix a pattern-matching miscompilation on certain combinations of immediate ranges and redundant patterns (Gabriel Scherer, report by Alperer Keleş, review by Vincent Laviron and Florian Angeletti) github.com/ocaml/ocaml/archive/5.5.2.tar.gz: github.com/ocaml/ocaml/archive/5.5.2.tar.gz ocaml#15045: ocaml#15045 ocaml#15067: ocaml#15067 ocaml#15071: ocaml#15071 ocaml#15112: ocaml#15112 ocaml#15113: ocaml#15113 ocaml#15115: ocaml#15115 ocaml#15133: ocaml#15133 ocaml#15119: ocaml#15119 ocaml#15177: ocaml#15177 ocaml#15043: ocaml#15043 ocaml#15076: ocaml#15076 ocaml#15185: ocaml#15185 ocaml#15187: ocaml#15187

  7. Discourse · · OCaml · on OCaml 5.5.2 released · @octachron · ocaml/ocaml

    OCaml 5.5.2 released We have the pleasure of celebrating the anniversary of the first powered flight in Europe by announcing the release of OCaml 5.5.2. OCaml 5.5.2 fixes various minor security issues, two rare miscompilations, a configuration issue with future versions of macOS, and one runtime events library issue. Overall, if you were already using any versions of OCaml 5.5, we are advising you to switch to OCaml 5.5.2 . The full list of bug fixes is available below for more details. Happy hacking, -- Florian Angeletti, for the OCaml team. Installation Instructions ------------------------------- The base compiler can be installed as an opam switch with the following commands: opam update opam switch create 5.5.2 The source code for the release is also directly available on: - GitHub: github.com/ocaml/ocaml/archive/5.5.2.tar.gz - Inria archive: caml.inria.fr Bug Fixes ----------- - #15045: Atomic loads whose results are unused should not be removed during dead-code elimination. (Xavier Clerc, review by Steven Dolan and KC Sivaramakrishnan) - #15067, #15071: Fix detection of functions available in the future on macOS. (Antonin Décimo, review by Nicolás Ojeda Bär and Damien Doligez) - #15112, OSEC-2026-22: Unix.map_file: protect against overflow when computing the data size. (Xavier Leroy and Nicolás Ojeda Bär, review by Nicolás Ojeda Bär and Edwin Török) - #15113, OSEC-2026-21: Str.string_partial_match: make sure captured groups are valid. (Xavier Leroy, review by Nicolás Ojeda Bär and Edwin Török) - #15115, OSEC-2026-23: Fix multiple issues in demarshaling (Marshal.from_{channel,string,bytes}) (Xavier Leroy, review by Nicolás Ojeda Bär) - #15133, OSEC 2026-24: Multiple issues in command quoting on Windows (Xavier Leroy and Nicolás Ojeda Bär, review by Nicolás Ojeda Bär) - #15119, OSEC-2026-25: Harden decoding of runtime events messages from ring buffers. (Sadiq Jaffer, report by Hannes Mehnert, review by Olivier Nicole and Edwin Török) - #15177, OSEC-2026-26: Maintain custom events cache integrity. (Sadiq Jaffer, report by Hannes Mehnert, review by Edwin Török) - #15043, #15076: runtime events library, fix an infinite loop when a user event is larger than half the ring buffer. (Tim McGilchrist, review by Sadiq Jaffer) - #15185, #15187: fix a pattern-matching miscompilation on certain combinations of immediate ranges and redundant patterns (Gabriel Scherer, report by Alperer Keleş, review by Vincent Laviron and Florian Angeletti)

    23 likes
  8. [ANN] Js_of_ocaml / Wasm_of_ocaml 6.5 I'm pleased to announce the joint release of js_of_ocaml and wasm_of_ocaml 6.5.0, compilers from OCaml bytecode to JavaScript and WebAssembly. This release brings together more than 130 pull requests (about 400 commits) from 7 contributors since 6.4.0. Highlights: - OCaml 5.6 support. - OxCaml: improved support. - Introcaml: experimental support for Introcaml (OCaml values shown in OCaml syntax in Chrome DevTools). - Faster compilation: about 25–30% faster on large programs. - Smaller output: binary constants are emitted as base64 and the generated JavaScript is tighter (the toplevel example goes from 13.6 MB to 9.0 MB). - wasm_of_ocaml: BLAKE2 and zstd (Digest.BLAKE2*, compressed marshaled values) no longer require multi-memory support, so they work in Safari; plus faster runtime primitives and better sourcemaps. - Effects: better code with --effects=cps and --effects=double-translation - New web API bindings: WebGL2, Web Crypto, Service Workers, Clipboard, Notification, FontFace, and more. The toplevel can run in a Web Worker. - Many bug fixes ... Breaking changes: js_of_ocaml-lwt.logger is removed (lwt_log is deprecated), the Typed_array.float{32,64}Array_fromArray signatures changed. Contributors to this release: Vincent Balat, Frédéric Bour, Shon Feder, habakan, Hugo Heuzard, Robin Ricard and Jérôme Vouillon. Thank you all! See the documentation and the full changelog. Please report any issue on GitHub. It should soon be avaible on opam (opam-repository#30987)

    21 likes · 1 comment
Trending awards, every completed day and week
Gold
01st place finishes
Silver
02nd place finishes
Bronze
03rd place finishes
Awarded repositories
0Owned by ocaml now

No trending awards yet

None of the repositories ocaml owns has finished in the top three of a completed trending day or week, by stars, forks or PR authors. See who is trending now.

A repository earns an award for finishing first, second or third in a completed trending day or week, ranked by new stars, new forks or pull request authors. Awards follow a repository through renames and transfers and count toward its current owner. Weeks run Monday to Sunday, UTC.