# .plan-26-10: Streaming TESSERA working, biodiversity action papers, and FPL takes off

*2026-03-08 — note*


## TESSERA streaming into the browser and OxCaml hacking

I've completed a working cut at a streaming interface for TESSERA embeddings, and it's unexpectedly addictive to zoom around the world staring at false colours!  The amazing thing about this interface is that it's _entirely_ browser based, using JavaScript, WebGPU and WASM to perform all the analysis on the client side. The Zarr embeddings are chunked and served over HTTP, using range requests to retrieve the minimum amount of data.

<div class="video-center"><iframe title="" width="100%" height="315px" src="https://crank.recoil.org/videos/embed/08aafc87-9aea-48e3-8c41-a2fe1b94fea4" frameborder="0" allowfullscreen sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe></div>

The video shows classification workflows, but I've also got [solar panel detection](https://toao.com/blog/can-we-really-see-brambles-from-space) working using Sadiq's patch based embeddings. You can try it for yourself when I release this properly next week\!

There are obvious limitations to how much we can do in the browser; for most serious work we will need a server running, but my goal here is to see if we can embed TESSERA into the [living dashboard](https://anil.recoil.org/ideas/living-iucn-redlist) that [Shane Weisz](https://shaneweisz.com) is working on. I've also just received a drop of [areas-of-habitats](https://digitalflapjack.com/weeknotes/fractional_life_progress/) from [Michael Dales](https://mynameismwd.org) which I'll have a go at integrating next week.

### It's TEE time with multiple browsers in development

What's blocking everyone from using Zarr and TESSERA? Well, we need to transcode a petabyte of embeddings from the old numpy format into Zarr, which is a difficult parallelisation problem. I'm making steady progress on an [OxCaml](https://oxcaml.org) pipeline for this with a from-scratch OxCaml-Zarr implementation that [Mark Elvers](https://www.tunbury.org/) helped me kick off.  Mark also published his [ocaml-tessera](https://github.com/mtelvers/ocaml-tessera) pipeline which I'm going to import to OxCaml next week as well, so that we can do both model training and tile inference in OCaml\!

For more production-oriented usecases, [Srinivasan Keshav](https://svr-sk818-web.cl.cam.ac.uk/keshav/wiki/index.php/Main_Page) has published a server with his excellent [Tessera Embeddings Explorer](https://tee.cl.cam.ac.uk). We've been building our implementations independently and swapping ideas for user interfaces and analyses, which has been a very productive way of experimenting for different users. His implementation is in use for several downstream tasks projects and should be what people use, while mine is heading towards more dynamic mobile/browser workflows. You can grab that code at <https://github.com/ucam-eo/tee>, complete with convenient Dockerfile.

### Discussing TESSERA programming models at WG2.8

<figure class="image-right-float"><img src="/images/wg28-26-2.webp" alt="Viana de Castelo had the loveliest venue and hotel this week" title="Viana de Castelo had the loveliest venue and hotel this week" loading="lazy" srcset="/images/wg28-26-2.768.webp 768w, /images/wg28-26-2.640.webp 640w, /images/wg28-26-2.480.webp 480w, /images/wg28-26-2.3840.webp 3840w, /images/wg28-26-2.320.webp 320w, /images/wg28-26-2.2560.webp 2560w, /images/wg28-26-2.1920.webp 1920w, /images/wg28-26-2.1600.webp 1600w, /images/wg28-26-2.1440.webp 1440w, /images/wg28-26-2.1280.webp 1280w, /images/wg28-26-2.1024.webp 1024w"><figcaption>Viana de Castelo had the loveliest venue and hotel this week</figcaption></figure>
I got invited to [WG2.8](https://ifip-wg28.github.io/) again, so [Simon Peyton Jones](https://simon.peytonjones.org/) and I trooped off there from Cambridge earlier in the week. I had to leave early due to some family matters, but I got to present 'planetary programming' to the assembled gods of functional programming\!

I began my [talk](https://www.cl.cam.ac.uk/~avsm2/slides/wg28-2026-tessera.pdf) by presenting the streaming browser demo above (which, thanks to the [perma caching httpz oxcaml proxy](https://github.com/avsm/oxmono/blob/main/avsm/httpz-perma-proxy) I hacked up lets the remote tiles be cached on my laptop so the app works offline too). I used the opportunity to posit a high-level programming design problem I've encountered when coding with TESSERA...

There's a contradictory tension in the styles of programming that we
conventionally embark on with the workflows needed by machine learning. In our
[FAIRground](https://anil.recoil.org/papers/2025-fairground) paper we describe a purely functional Python
variant that represents conventional 'forward programming'. You can do lots of
nice things when the language is pure, such as enabling incremental live
computations. This forward programming style would be good for building a global computational wiki for example.

However, when we program with observational embeddings like TESSERA, we're
doing 'backwards programming'. The units we're dealing with are 128-dimensional
self-supervised representations that have been learnt from primary satellite
data, and the job of the program is to help cluster these higher dimensional
structures into some semblance of useful meaning. We do this via downstream
classifiers, segmenters and regression tasks. This is a very different
programming style from forward programming even though it requires a similar
amount of CPU.

<figure class="image-right-float"><img src="/images/wg28-26-3.webp" alt="There was no danger of losing weight in Portugal" title="There was no danger of losing weight in Portugal" loading="lazy" srcset="/images/wg28-26-3.768.webp 768w, /images/wg28-26-3.640.webp 640w, /images/wg28-26-3.480.webp 480w, /images/wg28-26-3.3840.webp 3840w, /images/wg28-26-3.320.webp 320w, /images/wg28-26-3.2560.webp 2560w, /images/wg28-26-3.1920.webp 1920w, /images/wg28-26-3.1600.webp 1600w, /images/wg28-26-3.1440.webp 1440w, /images/wg28-26-3.1280.webp 1280w, /images/wg28-26-3.1024.webp 1024w"><figcaption>There was no danger of losing weight in Portugal</figcaption></figure>
The ultimate goal of _both_ of these scientific programming styles is to establish _causal_ relationships; that is, we want to form (or reinforce or falsify) a theory of how the world works that can be tested by the scientific method. So I wondered: how do we combine these three styles into a programming language? This is a very general question, but I figured there was no better place to ask than a room full of people who have designed dozens if not hundreds of languages between them.

<a href="https://www.cl.cam.ac.uk/~avsm2/slides/wg28-2026-tessera.pdf"> <figure class="image-center"><img src="/images/fwd-back-causal-ss-1.webp" alt="Three sorts of relations we are trying to program" title="Three sorts of relations we are trying to program" loading="lazy" srcset="/images/fwd-back-causal-ss-1.768.webp 768w, /images/fwd-back-causal-ss-1.640.webp 640w, /images/fwd-back-causal-ss-1.480.webp 480w, /images/fwd-back-causal-ss-1.320.webp 320w, /images/fwd-back-causal-ss-1.1600.webp 1600w, /images/fwd-back-causal-ss-1.1440.webp 1440w, /images/fwd-back-causal-ss-1.1280.webp 1280w, /images/fwd-back-causal-ss-1.1024.webp 1024w"><figcaption>Three sorts of relations we are trying to program</figcaption></figure> </a>

- [Amal Ahmed](http://www.ccs.neu.edu/home/amal/) said this really looked like a [multi-DSL problem](https://doi.org/10.1145/3609027.3609405) (i.e. implement all three different styles of programming in OCaml, and then examine the DSL properties/data structures). She also pointed me to [Multi-Language Probabilistic Programming](https://arxiv.org/abs/2502.19538) which allows for differently specialised probabilistic programming languages.
- [Sam Lindley](https://homepages.inf.ed.ac.uk/slindley/) also suggested this multi-DSL would be a good use of effects: could we write _one_ OCaml program to represent all three styles, but then interpret them completely differently using effects? We could get a set of points as program traces via sampling using effects, and then we could do reproducible simulations via effects for stochastic choice, and then for causal path tests effects that check program data structure invariants regularly to build up causal hypotheses.  I need to talk to [KC Sivaramakrishnan](https://kcsrk.info) and [Patrick Ferris](https://patrick.sirref.org) about this more, as with any effects based idea that involves more than just a Suspend effect.
- [Mary Sheeran](https://www.chalmers.se/en/persons/ms/) observed that this is somewhat like hardware programming, whereby we put the minimal structural constraints in and then try to discover layouts.
- [John Hughes](https://www.chalmers.se/en/persons/rjmh/) noted that the statistical testing combined with datastructures (the synthetic computation) is quite similar to quickcheck: can we posit causal relationships and 'quickcheck' them efficiently?
- [Gabriele Keller](https://www.uu.nl/staff/GKKeller) is working with spatial ecologists on saltmarshes using array programming to speed up their calculations, so we had a _very_ productive conversation that I will follow up on! Sounds remarkably similar to the work in the Cairngorms that [David Coomes](https://coomeslab.org) is leading in the [CLR](https://www.clr.conservation.cam.ac.uk/).
- [Manuel Chakravarthy](https://justtesting.org/) gave me a lot of tips on Mac/iOS approaches and also told me about [Volt Europa](https://volteuropa.org/) and their push for liberal sovereignty.
- [Nate Foster](https://www.cs.cornell.edu/~jnfoster/) and [Sam Lindley](https://homepages.inf.ed.ac.uk/slindley/) helped me simplify my thinking a lot: rather than worry about scale (millions of species), can we find the smallest possible example to work outwards from synthetically? I obviously thought of [hedgehog mapping](https://anil.recoil.org/ideas/hedgehog-mapping) as good one here. We also thought that viewing causality as a 'triangle' wasn't right: instead, we could use a combination of synthetic models + observational samples as bidirectional lenses, and then draw causal path diagrams across them to test the lenses (sort of like natural experiments). This is somewhat like [boomerang lenses](https://doi.org/10.1145/1328897.1328487) but for sample data instead of strings.
- [Richard Eisenberg](https://richarde.dev/) gave me practical OxCaml advice as it's a fast-moving target: layout polymorphism is a while away yet, so keep using `ppx_template` for now, but other features like float16 (useful for TESSERA) could be done fairly easily.
- [Andreas Rossberg](https://people.mpi-sws.org/~rossberg/) was impressed by the use of WASM for browser-based geospatial, and we discussed the difficulty of using wasm with the DOM for interactive interfaces. Machine learning workflows perform well because of the lack of DOM transitions, but hopefully [Mozilla is working on improving this](https://hacks.mozilla.org/2026/02/making-webassembly-a-first-class-language-on-the-web/).
- [Simon Peyton Jones](https://simon.peytonjones.org/) looked bemused by it all and thought it was too high level a concept to latch onto. I need a worked example like the above to convince him when I'm back at Cambridge\!

It was a short trip to Portugal in the end, but massively energising. I do love hanging with functional programmers\!

## Biodiversity action through technology

Two big perspective papers on global biodiversity are out in PNAS this week, which I [wrote up separately](https://anil.recoil.org/notes/nas-rs-biodiversity-papers) in a detailed note.
To follow up on these, [Cyrus Omar](https://web.eecs.umich.edu/~comar/) is chairing this year's [PROPL](https://propl.dev) (to be held at PLDI this summer), and we've been discussing doing something different this year to tie into a more 'action-oriented' workshop that combines the learnings from the last couple of years with the call to biodiversity action above.

Meanwhile, to followup on the [first TESSERA hackathon](https://anil.recoil.org/notes/first-tessera-hackathon) over in India a few weeks ago, [Aadi Seth](https://www.cse.iitd.ac.in/~aseth/) and [Srinivasan Keshav](https://svr-sk818-web.cl.cam.ac.uk/keshav/wiki/index.php/Main_Page) have put together a [call for students](https://www.linkedin.com/posts/core-stack_first-round-of-innovation-challenge-advances-activity-7436361754617552897-tyrD) to get involved. If you're interested then [apply here](https://docs.google.com/document/d/1vcYj6D_ReWE5xG51A7-Gdt2g6pqpZfw8/edit) and get going with TESSERA\!

<figure class="image-right-float"><img src="/images/iitm-campus-1.webp" alt="Life on the IIT-Madras campus is all about adorable dogs and deer roaming around" title="Life on the IIT-Madras campus is all about adorable dogs and deer roaming around" loading="lazy" srcset="/images/iitm-campus-1.768.webp 768w, /images/iitm-campus-1.640.webp 640w, /images/iitm-campus-1.480.webp 480w, /images/iitm-campus-1.320.webp 320w, /images/iitm-campus-1.2560.webp 2560w, /images/iitm-campus-1.1920.webp 1920w, /images/iitm-campus-1.1600.webp 1600w, /images/iitm-campus-1.1440.webp 1440w, /images/iitm-campus-1.1280.webp 1280w, /images/iitm-campus-1.1024.webp 1024w"><figcaption>Life on the IIT-Madras campus is all about adorable dogs and deer roaming around</figcaption></figure>
And not to be left behind by their Delhi counterparts, [KC Sivaramakrishnan](https://kcsrk.info) announced that applications [are now open](https://fplaunchpad.org/2026/03/06/applications-open-post-bacc-fellowship.html) for the [FP Launchpad](https://fplaunchpad.org) in IIT-Madras.
This should be of interest to computer scientists who want to get involved in environmental work; as I [mentioned](https://anil.recoil.org/notes/india-ai-summit) before, one of the illustrative projects to kick off the FPL is programming TESSERA embeddings more ergonomically:

> A programmable public infrastructure for environmental planning, combining
> TESSERA's satellite-derived representations with CoRE Stack data and
> compositional functional models in O(x)Caml to support auditable indicators
> and scenario analysis for India’s water and habitat systems.
> <cite>\-- [FP Launchpad Charter, 2026](https://fplaunchpad.org/charter/) </cite>

So it's action stations at both the IITs and I'm looking forward to working with them from Cambridge! This is a nice followup to our [Cambridge VC visiting India](https://www.cam.ac.uk/news/new-boost-for-historic-relationship-between-university-of-cambridge-and-india-announced) and kicking off a cricketing tour\!

## Docker buzz from the CACM article

Following the [CACM Docker article](https://anil.recoil.org/notes/cacm-docker-cover), there's been lots of positive online discussions about the article. [Hackernews](https://news.ycombinator.com/item?id=47289311) leads the way with typically split opinions. Some loved it, some hated it, some thought it should be replaced with a very small shell script, and others reminisced over our use of [SLIRP](https://en.wikipedia.org/wiki/Slirp). Overall though a lovely discussion and vibe.

<a href="https://news.ycombinator.com/item?id=47289311"> <figure class="image-center"><img src="/images/hn-docker-ss-1.webp" alt="Docker on top of HN again" title="Docker on top of HN again" loading="lazy" srcset="/images/hn-docker-ss-1.768.webp 768w, /images/hn-docker-ss-1.640.webp 640w, /images/hn-docker-ss-1.480.webp 480w, /images/hn-docker-ss-1.320.webp 320w, /images/hn-docker-ss-1.1280.webp 1280w, /images/hn-docker-ss-1.1024.webp 1024w"><figcaption>Docker on top of HN again</figcaption></figure> </a>

I also read two interesting papers while [researching](https://anil.recoil.org/notes/2026w9) more background for the [package calculus](https://anil.recoil.org/papers/2026-package-calculus) that [Ryan Gibb](https://ryan.freumh.org) has been working on:
- [Docker Does Not Guarantee Reproducibility](https://arxiv.org/abs/2601.12811) discusses some of the common pitfalls around building fully reproducible containers. While there's support at the lower levels for this in the Docker stack, I agree it's not kept up with modern needs. Luckily, [Patrick Ferris](https://patrick.sirref.org) is hacking on a new [shell interface with provenance](https://patrick.sirref.org/weekly-2025-w49/).
- [Does Functional Package Management Enable Reproducible Builds at Scale? Yes.](https://arxiv.org/abs/2501.15919v1): This is a complementary paper, and argues for a Nix-like approach. It's good to see that Nix (despite its constrained versioning) does a good job of supporting retrospective builds.

## Visitor from KTH

<figure class="image-right-float"><img src="/images/wg28-26-1.webp" alt="The Mill does the best fish and chips in Cambridge I reckon!" title="The Mill does the best fish and chips in Cambridge I reckon!" loading="lazy" srcset="/images/wg28-26-1.768.webp 768w, /images/wg28-26-1.640.webp 640w, /images/wg28-26-1.480.webp 480w, /images/wg28-26-1.3840.webp 3840w, /images/wg28-26-1.320.webp 320w, /images/wg28-26-1.2560.webp 2560w, /images/wg28-26-1.1920.webp 1920w, /images/wg28-26-1.1600.webp 1600w, /images/wg28-26-1.1440.webp 1440w, /images/wg28-26-1.1280.webp 1280w, /images/wg28-26-1.1024.webp 1024w"><figcaption>The Mill does the best fish and chips in Cambridge I reckon!</figcaption></figure>
We had a delightful visit from [Professor Yifang Ban](https://www.kth.se/profile/yifang) from KTH, who delivered this week's [EEG seminar](https://watch.eeg.cl.cam.ac.uk/w/dZNDoKiuH8sugfKLCWh8gS) on EO-AI4GlobalChange. We went to the pub after, and discussed a rather staggering number of [downstream tasks](https://anil.recoil.org/papers/2025-tessera-tasks) that Prof Ban works on:

> In this seminar, Professor Ban will discuss recent research at the
> intersection of EO and AI, with a focus on deep learning methods for
> monitoring environmental change at scale. She will present selected results
> from EO-AI4GlobalChange, a collaborative research project developing novel,
> globally-applicable deep learning approaches for analysing multi-sensor,
> multi-modal EO data. The talk will cover examples including 2D and 3D urban
> mapping, urban change detection, wildfire detection and near-real-time
> monitoring, flood mapping, and multi-hazard building damage detection.
> 
> The seminar will also briefly introduce PANGAEA, a global benchmark for
> Geospatial Foundation Models, and discuss insights from the systematic
> evaluation of widely used foundation models across multiple geospatial
> domains. Finally, Professor Ban will briefly outline the objectives of the
> recently established AI4EO Working Group within Group on Earth Observations
> (GEO), which aims to advance GEO’s vision of Earth Intelligence for All
> through AI-driven Earth observation research, innovation, and collaboration.
> <cite>\-- [Yifang Ban, EEG Seminar](https://watch.eeg.cl.cam.ac.uk/w/dZNDoKiuH8sugfKLCWh8gS), March 2026</cite>

But most importantly, we had excellent fish and chips to celebrate her [first visit](https://www.linkedin.com/feed/update/urn:li:activity:7434213135705694210/) to Cambridge\!

## Fun links

- Next OxCaml [vibespiling](https://anil.recoil.org/notes/aoah-2025-13) target: "[How we built the fastest regexp engine in F\#](https://iev.ee/blog/resharp-how-we-built-the-fastest-regex-in-fsharp/)" with code [here](https://github.com/ieviev/resharp-dotnet).
- The calls to [reform publishing](https://anil.recoil.org/notes/rs-future-of-publishing) are getting [louder and louder](https://www.experimental-history.com/p/the-one-science-reform-we-can-all). A new ATProto service called [Chive](https://chive.leaflet.pub/3mgb6k5pwsc2q) looks interesting here.
- New podcast on sci-fi is a lot of fun, called [Starship Alexandria](https://starshipalexandria.com/) with Emma Newman and Adrian Tchaikovsky. I've been [reminded](https://www.jonmsterling.com/2026-W10/) to pick up Adrian's latest series [City of Last Chances](https://www.goodreads.com/book/show/60147395-city-of-last-chances) which I'm enjoying so far. Great insect world building as always\!
- Extremely sad news is the passing of Prof [Alan Wilson](https://royalsociety.org/people/alan-wilson-10879/), who I was showing my [Botswana leopard pictures](https://www.flickr.com/photos/avsm/albums/72177720328187549/with/54709177736) and getting flying tips from just a few months ago. He passed away in a light aircraft crash while heading into the sand dunes of Namibia. Very, very sad news.
- More bad news of (a pretty bad) week is that [global warming has accelerated significantly](https://doi.org/10.21203/rs.3.rs-6079807/v1).
- **But the good news** is that I learnt of [lazarus taxon](https://en.wikipedia.org/wiki/Lazarus_taxon) that come back from extinction, such as this week's [adorable marsupial thought extinct for 6000 years](https://www.theguardian.com/environment/2026/mar/05/marsupials-discovered-new-guinea). Hurrah\!
Synopsis: TESSERA streaming in the browser, planetary programming at WG2.8, biodiversity action papers, FP Launchpad opens, and Docker CACM buzz
Words: 2094
DOI: 10.59350/re0zy-3rt26

Discussion:
- Bluesky: <https://bsky.app/profile/anil.recoil.org/post/3mgkxal5lak2i>
- LinkedIn: <https://www.linkedin.com/feed/update/urn:li:activity:7436474550151700480>
- Mastodon: <https://amok.recoil.org/@avsm/116194922952537592>
- Twitter: <https://x.com/avsm/status/2030707741518422024>

## Related

- [Streaming millions of TESSERA tiles over HTTP with Zarr v3](https://anil.recoil.org/notes/tessera-zarr-v3-layout) (note, 2026-03-14)
- [Weeknotes 2026 week 10](https://jon.recoil.org/blog/2026/03/weeknotes-2026-10.html) (feed, 2026-03-09)
- [Tessera Zarr streaming preview](https://anil.recoil.org/videos/08aafc87-9aea-48e3-8c41-a2fe1b94fea4) (video, 2026-03-08)
- [Connecting the dots for biodiversity action from the NAS/Royal Society Forum](https://anil.recoil.org/notes/nas-rs-biodiversity-papers) (note, 2026-03-07)
- [.plan-26-09: Browser TESSERA, package management and Docker in the CACM](https://anil.recoil.org/notes/2026w9) (note, 2026-03-01)
- [A Decade of Docker Containers on the CACM cover!](https://anil.recoil.org/notes/cacm-docker-cover) (note, 2026-02-24)
- [At the AI Impact Summit in Delhi: people, planet, progress](https://anil.recoil.org/notes/india-ai-summit) (note, 2026-02-21)
- [1st TESSERA/CoRE hackathon at the Indian AI Summit](https://anil.recoil.org/notes/first-tessera-hackathon) (note, 2026-02-19)
- [Applications of the TESSERA Geospatial Foundation Model to Diverse Environmental Mapping Tasks](https://anil.recoil.org/papers/2025-tessera-tasks) (paper, 2026-01-01)
- [Package Managers à la Carte: A Formal Model of Dependency Resolution](https://anil.recoil.org/papers/2026-package-calculus) (paper, 2026-01-01)
- [AoAH Day 13: Heckling an OCaml HTTP client from 50 implementations in 10 languages](https://anil.recoil.org/notes/aoah-2025-13) (note, 2025-12-13)
- [A FAIR Case for a Live Computational Commons](https://anil.recoil.org/papers/2025-fairground) (paper, 2025-10-01)
- [A Living IUCN Red List of the World's Species](https://anil.recoil.org/ideas/living-iucn-redlist) (idea, 2025-09-01)
- [Royal Society's Future of Scientific Publishing meeting](https://anil.recoil.org/notes/rs-future-of-publishing) (note, 2025-07-14)
- [Mapping urban and rural British hedgehogs](https://anil.recoil.org/ideas/hedgehog-mapping) (idea, 2025-06-01)
- [TESSERA, a pixelwise geospatial foundation model](https://anil.recoil.org/projects/tessera) (project, 2025-01-01)

---
Canonical: https://anil.recoil.org/notes/2026w10
Type: note
Tags: tessera, packages, opensource, docker, india, fplaunchpad, ocaml, oxcaml
