# Tesseract Core v1.10.0 released

**URL:** <https://si-tesseract.discourse.group/t/tesseract-core-v1-10-0-released/140>\
**Category:** Release Notes\
**Created:** [June 17, 2026, 5:01pm UTC](https://si-tesseract.discourse.group/t/tesseract-core-v1-10-0-released/140 "2026-06-17T17:01:37Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![dionhaefner](https://yyz1.discourse-cdn.com/flex009/user_avatar/si-tesseract.discourse.group/dionhaefner/32/13_2.png) [@dionhaefner](https://si-tesseract.discourse.group/u/dionhaefner)\
**Post date:** [June 17, 2026, 5:01pm UTC](https://si-tesseract.discourse.group/t/tesseract-core-v1-10-0-released/140/1 "2026-06-17T17:01:37Z")

</div>

# Release v1.10.0

## Action required

### Regenerate JAX Tesseracts to pick up future recipe updates (optional)

Existing JAX Tesseracts keep working unchanged, so no action is strictly required. However, the gradient-endpoint logic that used to be inlined in each `tesseract_api.py` now lives in the `tesseract_core.runtime.jax_recipes` module, and old Tesseracts retain their own inlined copy. To benefit from future improvements and fixes to these endpoints, regenerate your Tesseract from the updated JAX template (`tesseract init --recipe jax`), or manually adapt `tesseract_api.py` to import and call `jax_apply`, `jax_jacobian`, `jax_jvp`, and `jax_vjp`. See the slimmer recipe under Highlights below.

## Highlights

### Configurable Python version

You can now pin the Python version used inside a Tesseract independently of the base image. UV bootstraps the requested version at build time, so you no longer need to find a base image that happens to ship the right interpreter.

Set it in `tesseract_config.yaml`:

```yaml
build_config:
python_version: "3.12"

```

The default remains `null`, which keeps using the base image’s system Python — so existing Tesseracts are unaffected. Note: `python_version` cannot be combined with conda requirements (set the version in `tesseract_environment.yaml` instead) or with `inherit_base_image_packages` (see below).

### Inherit packages from the base image

When building on a vendor-provided base image that already ships heavy Python dependencies (e.g. PyTorch, Firedrake, FEniCS), you can now reuse those packages instead of reinstalling them. Setting the new flag creates the virtual environment with `--system-site-packages`:

```yaml
build_config:
base_image: "firedrakeproject/firedrake:2026.4.0"
inherit_base_image_packages: true

```

Defaults to `false`. It cannot be combined with `python_version`, since the inherited packages are tied to the base image’s own interpreter. See the new `examples/inherit_base_image_packages` Tesseract for a complete setup.

### Slimmer JAX recipe (+ experimental VJP cache)

The JAX template’s gradient-endpoint boilerplate now lives in the new `tesseract_core.runtime.jax_recipes` module. A JAX-backed Tesseract is mostly your schemas plus an `apply_jit` function — `apply`, `jacobian`, `jvp`, and `vjp` are one-line calls into `jax_apply`, `jax_jacobian`, `jax_jvp`, and `jax_vjp`, with JIT compilation handled and cached internally. This only affects newly generated `tesseract_api.py` files — see the note under **Action required** above.

This also ships an opt-in, experimental VJP residual cache. When enabled, `jax_apply` stashes the backward function from the forward pass so a following `jax_vjp` on the same inputs can skip the redundant forward pass (the common pattern under `jax.value_and_grad` / `jax.jacrev`). It’s off by default and tuned via:

```python
from tesseract_core.runtime.experimental import set_jax_vjp_cache_size

set_jax_vjp_cache_size(1) # 0 = disabled (default); 1 covers the standard apply -> vjp pattern

```

The speedup is problem-dependent and scales with the cost of your forward pass — for trivially small models the cache overhead can outweigh the savings, so benchmark before turning it on. The interface is experimental and may change.

## Other changes

- Builds for `target_platform: native` now force the current host architecture and fail loudly if it’s unavailable, rather than silently pulling a mismatched arch (#615).

## What’s Changed

### Features

- Make Python version configurable (#592)
- Add `inherit_base_image_packages` flag to tesseract\_config.yaml (#600)
- Reduce boilerplate in JAX recipe, add experimental VJP cache (#577)

### Bug Fixes

- Force building for the current arch when platform is set to native (#615)

**Full diff** : [Comparing v1.9.0...v1.10.0 · pasteurlabs/tesseract-core · GitHub](https://github.com/pasteurlabs/tesseract-core/compare/v1.9.0...v1.10.0)
