# mlgpx is the first Tangled-hosted package available on opam

*2025-08-17 — note*


Since I wrote about the new [ATProto-powered Tangled Git forge](https://anil.recoil.org/notes/disentangling-git-with-bluesky) a few months ago, it's come along by leaps and bounds\!

First, and most excitingly, they've added [continuous integration via Spindles](https://blog.tangled.sh/ci) which are built in a nice ATProto style:
> When you push code or open a pull request, the knot hosting your repository
> emits a pipeline event (sh.tangled.pipeline). Running as a dedicated service,
> spindle subscribes to these events via websocket connections to your knot.

The pipelines are Nix-only right now, so I braved using it[^1] for a new [GPS Exchange Format library in OCaml](https://tangled.sh/@anil.recoil.org/ocaml-gpx) that I wrote. The [pipelines](https://tangled.sh/@anil.recoil.org/ocaml-gpx/pipelines) should look familiar, and the [description format](https://tangled.sh/@anil.recoil.org/ocaml-gpx/blob/main/.tangled/workflows/build.yml) very straightforward.

Secondly, the service has [added](https://blog.tangled.sh/stacking) support for [JJ](https://github.com/jj-vcs/jj) stacked pull requests, which are the closest I've seen to the [Jane Street Iron diff workflow](https://blog.janestreet.com/ironing-out-your-release-process/) which I've been wanting to try in open source for ages.  You can see the interdiff review process on a recent PR by [Winter](https://tangled.sh/@winter.bsky.social) who add support for [engine-agnostic Spindle workflows](https://tangled.sh/@tangled.sh/core/pulls/423), which should pave the path for a Docker or BuildKit engine alongside the existing Nixery-based one.

And thirdly, the general quality-of-life of the web frontend has improved dramatically, with a nice [timeline](https://tangled.sh/), [repo list](https://tangled.sh/@anil.recoil.org?tab=repos), and [profile pages](https://tangled.sh/@anil.recoil.org). I'm running two knots right now (one on Recoil, and one in the Cambridge Computer Lab), and both have been very painfree. I wrote one of the earliest [Dockerfiles](https://tangled.sh/@anil.recoil.org/knot-docker) for it, but there's now a [community-maintained Knot Docker](https://tangled.sh/@tangled.sh/knot-docker) setup which I've switched to. Doesn't take very long at all; give it a try\!

Because I've been using Tangled so much, I [added support for Tangled metadata](https://github.com/ocaml/dune/pull/12197) to Dune to make OCaml package maintainence easier. This will appear in Dune 3.21 in a few months, but in the meanwhile enjoy the first [Tangled.sh package on opam](https://ocaml.org/p/mlgpx/latest). It's a simple GPX library I used in my [recent trip](https://anil.recoil.org/notes/owntracks-and-lifecycle) to Botswana. All you need in your `dune-project` will be:

```
(lang dune 3.21)
(name mlgpx)
(generate_opam_files true)
(source (tangled @anil.recoil.org/ocaml-gpx))
```

The only major thing I'm missing from Tangled is support for private repositories now, but I'm very content using it for public content today. Beware as usual that it's still in alpha, so don't trust super-ultra-mega-important stuff to it unless you've git mirrored elsewhere.

[^1]: ...with the help of my trusty local Nixer [Ryan Gibb](https://ryan.freumh.org). Noone should ever Nix by themselves.

## References

1. Madhavapeddy (2025). Tracking locations with OwnTracks, Life Cycle and Home Assistant. <https://doi.org/10.59350/13ras-yd957>
2. Madhavapeddy (2025). Socially self-hosting source code with Tangled on Bluesky. <https://doi.org/10.59350/r80vb-7b441>

Synopsis: The Tangled git forge has recently gained support for CI, stacked pull requests and also the Dune build system can generate Tangled metadata easily now for OCaml packages hosted there.
Words: 391
DOI: 10.59350/7267y-nj702

## Related

- [.plan-26-36: Ground control to major MODIS](https://anil.recoil.org/notes/2026w36) (note, 2026-09-06)
  Tessera v2 beta2 smooths space at the cost of time, new Pembroke Associate Scholars, Scrutineer's git remediation workflow, paying the Windows tax, and retiring AI disclosure metadata.
- [.plan-26-17: Unwedging kernels, dogfood deployments, and managing beef leakage](https://anil.recoil.org/notes/2026w17) (note, 2026-04-26)
  Welcoming Akshay to Cambridge, TESSERA AWS sync done, oi now self-hosts this site, and a new 4C forest leakage preprint appears.
- [AI, science and the UK–EU relationship at the Royal Society](https://anil.recoil.org/notes/rs-eu-ai-science) (note, 2026-04-21)
  Notes from a Royal Society policy meeting with the European Commission on responsible AI, interoperable data and UK–EU alignment in AI for science; covering AI-poisoned literature, federated TESSERA-scale infrastructure, disclosure standards and the practical value of sustained UK–EU dialogue.
- [.plan-26-15: Banyan trees, (anti)botnets and Bose-Einstein bases](https://anil.recoil.org/notes/2026w15) (note, 2026-04-12)
  Travelling from Ireland to IIT Madras for the FP Launchpad launch, mirroring half a petabyte of TESSERA embeddings to AWS Open Data, antibotty discussions, and Tangled trust boundaries for AI code review.
- [.plan-26-13: Oxidised, standardised, and syndicated](https://anil.recoil.org/notes/2026w13) (note, 2026-03-29)
  Publishing the OxCaml Labs year-one review, POSSE and AI content disclosure for the web, adopting the geo-embeddings Zarr convention for TESSERA, action PROPL at PLDI, the death of the grant application, and NASA's new swathe lidar mission.
- [.plan-26-12: Zarr across space and TESSERA time](https://anil.recoil.org/notes/2026w12) (note, 2026-03-22)
  Reworking the TESSERA Zarr store layout after community feedback, Springer's API woes for evidence synthesis, vibecoding introspection, and git remote helpers for ATProto.
- [Four Ps for Building Massive Collective Knowledge Systems](https://anil.recoil.org/notes/principles-for-collective-knowledge) (note, 2025-11-23)
  Design principles for collective knowledge systems—permanence, provenance, permission, and placement—that enable robust networks for evidence-based decision making.
- [Tracking locations with OwnTracks, Life Cycle and Home Assistant](https://anil.recoil.org/notes/owntracks-and-lifecycle) (note, 2025-08-14)
  Setting up self-hosted location tracking using OwnTracks and reverse engineering Life Cycle app data with Claude Code for field work in Botswana.
- [Socially self-hosting source code with Tangled on Bluesky](https://anil.recoil.org/notes/disentangling-git-with-bluesky) (note, 2025-03-08)
  Self-host source code with Tangled on Bluesky for decentralized Git repositories.
- [OxCaml Labs](https://anil.recoil.org/projects/oxcaml) (project, 2025-01-01)

---
Canonical: https://anil.recoil.org/notes/tangled-and-ci
Type: note
License: CC BY 4.0 <https://creativecommons.org/licenses/by/4.0/>
Tags: bluesky, tangled, ocaml, oxcaml, git
