ppxlib is the standard library for writing PPX rewriters in OCaml—compile-time preprocessors that transform the OCaml abstract syntax tree (AST). It provides a unified framework for defining extension points (`[%...]`), deriving generators (`[@@deriving ...]`), context‑free rewrite rules, and global transformations. The library abstracts over multiple OCaml compiler versions (4.08 through 5.06) via its own frozen AST definitions and bidirectional migration modules, insulating PPX authors from version-specific parsetree changes. The core architecture consists of a driver that orchestrates transformation phases (lint, preprocess, instrument, context‑free, global, last instrument) and can be compiled into standalone executables or used as a Dune build plugin. The codebase is actively maintained with extensive documentation, benchmark infrastructure (including a vendored ppx_sexp_conv for comparison), and a comprehensive test suite covering error embedding, code path tracking, and AST round‑tripping. Despite the complexity of cross‑version AST support, the internal APIs are cleanly separated into reusable components such as typed attribute handlers, composable deriving arguments, and a GADT‑based DSL for context‑free rules.
virt-v2v is a production-grade virtual machine conversion tool that converts guests from foreign hypervisors (VMware vSphere/ESXi, Xen, Hyper-V, OVA, disk images) to run on KVM/libvirt. It supports multiple input sources (local disk, libvirt-managed guests, OVA archives, VMware VMX, vCenter HTTPS, VDDK, NFC, Xen over SSH) and output targets (local disk, libvirt, QEMU, oVirt/RHV, OpenStack, KubeVirt, VDSM, Glance, null). The conversion process inspects the guest OS (Linux, Windows) using libguestfs, injects virtio drivers for Windows, adjusts boot configuration, remaps block devices and network interfaces, and generates appropriate metadata (OVF, libvirt XML, KubeVirt YAML). It uses nbdkit as a universal disk access layer, enabling parallel copy via nbdcopy and efficient sparse allocation. The codebase is written primarily in OCaml with C stubs and embedded Python scripts for oVirt API interactions. It features a modular architecture with well-defined input/output module signatures, shared library components (NBD_URI, nbdkit wrapper, OVF generation, YAML emitter), and an extensive test suite covering real and phony guest conversions. The project is part of the libguestfs ecosystem and is actively maintained with recent commits, CI/CD via GitHub Actions, and internationalization support.
Irmin is an OCaml library and ecosystem for building mergeable, branchable, version-controlled key-value stores inspired by Git's data model. It provides a core set of abstractions (content-addressable storage, atomic writes, indexed stores, tree-like nodes, merge combinators, watches, sync protocols) along with multiple backends: in-memory, filesystem, Git (bidirectional), and a custom on-disk pack format optimized for blockchain use cases (Tezos). The project includes a full CLI tool (`irmin`), a GraphQL server, a TCP/WebSocket client-server protocol, MirageOS support, C bindings, and a PPX deriver for automatic type representation. The architecture is heavily functor-based, enabling compositional reuse. The pack backend (`irmin-pack`) is a significant piece of engineering with garbage collection, incremental indexing, chunked suffix files, sparse file abstraction, versioned disk formats (V1–V5), and migration support. The codebase is well-tested with extensive integration and unit tests, and includes benchmarks for Tezos history replay and inode performance. The primary risk is the complexity of maintaining multiple backends and on-disk format versions, with some modules containing TODO comments or `assert false` placeholders.
KernelScript is a domain-specific language and compiler (OCaml) for developing eBPF-centric programs. The compiler translates a single `.ks` source file into multiple C outputs: idiomatic eBPF C code (for kernel execution via XDP, TC, kprobe, tracepoint, perf_event, struct_ops), userspace loader C code (managing maps, ring buffers, tail calls, and program lifetime), and optionally kernel module C code (for `@kfunc` functions). The compiler pipeline includes lexing, parsing, symbol table construction, type checking (including context-specific rules for eBPF program types), IR generation with control-flow and data-flow analysis, loop analysis (bound detection, bpf_loop optimization), tail-call detection and automatic progarry management, map assignment optimization, safety checking (null pointer, bounds, overflow), and multi-program optimization (map type changes, batching). It also supports BTF introspection for kernel type and kfunc extraction, a Python bridge, and a compile-time evaluator. The architecture is modular with pluggable context code generators per program type. The project includes an extensive test suite covering the full pipeline from parse to C output and specific features like perf_event attach, ring buffer dispatch, struct_ops, and multi-program scenario.
ts2ocaml is a CLI tool that generates OCaml and ReScript bindings from TypeScript type definitions. It parses TypeScript AST using the TypeScript compiler API (via Fable), transforms the AST into a language-agnostic internal representation, resolves types (including generics, subtyping, unions, intersections), and emits target-specific code for js_of_ocaml (.mli) or ReScript (.res/.resi). The tool is implemented in F#, compiled to JavaScript via Fable, and distributed as an npm package. It supports multiple backends via a pluggable ITarget interface, includes a comprehensive type resolver (Typer), and provides utilities for naming, text manipulation (rope), trie-based data structures, and dependency graph analysis (topological sort, SCC). The repository also ships a minimal standard library for each target to support emitted bindings. It is actively maintained with CI, frequent releases, and documentation for modeling subtyping and development setup.
This repository is a curated list of interesting open source projects organized by programming language. It contains markdown files with links and descriptions for each language. There is no application code, data pipelines, or analytical models. It serves as a reference directory for developers seeking open source projects to contribute to or learn from. The repository is well-maintained with recent updates and a large community following.