Skip to content
Back to skills

Fused Runtime

ASecurity

What a Fused UDF can import and shell out to at run time — the Python packages and versions in the realtime and batch images, system binaries, DuckDB extensions, and how to get a package that isn't installed. Use before importing a library in a UDF, when a UDF fails with ModuleNotFoundError or a version-specific API error, or when choosing between libraries for a UDF.

  • 5 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
datapythongoshellbashsqlnodeawsgitapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 6, 2026

npx -y skills add fusedio/skills --skill fused-runtime --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Fused Runtime?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Fused Runtime
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/fusedio-fused-runtime/badge)](https://www.skillsdirectory.com/skills/fusedio-fused-runtime)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: fused-runtime
description: What a Fused UDF can import and shell out to at run time — the Python packages and versions in the realtime and batch images, system binaries, DuckDB extensions, and how to get a package that isn't installed. Use before importing a library in a UDF, when a UDF fails with ModuleNotFoundError or a version-specific API error, or when choosing between libraries for a UDF.
---

# The Fused UDF runtime

A UDF runs in one of two prebuilt images. Both are Python **3.12** on linux x86_64, CPU only. There is no per-UDF `requirements`; what the image has is what the UDF gets.

| Engine | Image | Notes |
|---|---|---|
| default (`engine` unset / `"realtime"`), `udf.map()` workers | **realtime** | ~700 packages; includes the AI extra (torch CPU, torchvision, onnxruntime, segment-geospatial, geoai) |
| `engine="medium"` / `"large"`, other instance jobs | **batch** | ~620 packages; no torchvision/onnxruntime/datasets/geoai |

## Checking a package

[`packages.md`](packages.md) lists every installed package with its version in each image, plus a by-category view and the packages whose versions differ between images. Grep it instead of reading it:

```bash
grep -iE "^\| (polars|rioxarray) \|" packages.md
```

A package absent from that file is not installed: `import` it and the UDF fails. To confirm from inside a UDF:

```python
from importlib.metadata import version
version("polars")
```

## Version traps

- **polars is 1.x in realtime and 0.20 in batch.** APIs renamed in polars 1.0 break on `engine="medium"/"large"`: `join(how="full")` is `how="outer"` in 0.20, and `pivot(on=...)` is `pivot(columns=...)`. In a UDF that may run on both engines, check `pl.__version__` or use pandas/DuckDB.
- **torch is the CPU build** in both images. There is no CUDA anywhere.
- Commonly assumed but **not installed**: tensorflow, keras, jax, lightgbm, catboost, langchain, altair, lonboard, h3ronpy, deltalake, pyiceberg, kerchunk, dask-geopandas, streamlit, pyspark. Pick an installed alternative (scikit-learn/xgboost, plotly/pydeck, `h3` + DuckDB, pyarrow).

## DuckDB extensions

None are preinstalled, and the default DuckDB home directory isn't reliably writable (Lambda allows writes only under `/tmp`). Point `home_directory` at `/tmp` before installing (needs outbound network):

```python
import duckdb
con = duckdb.connect()
con.sql("""
    SET home_directory='/tmp/duckdb/';
    INSTALL h3 FROM community; LOAD h3;
    INSTALL spatial; LOAD spatial;
    INSTALL httpfs; LOAD httpfs;
""")
```

The public `common` UDF module wraps this with caching: `fused.load("https://github.com/fusedio/udfs/tree/<sha>/public/common/").duckdb_connect()` loads h3, spatial and httpfs.

## System binaries

Both images ship the GDAL CLI (`gdalinfo`, `ogr2ogr`, `gdal_translate`, …), `ffmpeg`, `tippecanoe`, `pmtiles`, `wgrib2`, `pdal`, `git`, `node`/`npm`, `unrar`, and `uv`. Realtime also has `jq` and `aws`. Call them with `subprocess.run([...], check=True)`.

## A package isn't installed

1. **Use an installed alternative** (see the categories in `packages.md`). This is almost always the right move.
2. **Ask Fused to add it** to the image. Say which engine needs it.
3. **Install onto the shared mount (unofficial).** `/mount` is a disk shared across an org's UDFs, and `uv` is on the PATH. Pure-Python packages work best; compiled packages must match Python 3.12 and the pinned numpy/pyarrow:

   ```python
   @fused.udf
   def udf():
       import subprocess, sys
       target = "/mount/envs/my_env"
       subprocess.run(["uv", "pip", "install", "--python", sys.executable,
                       "--target", target, "some-package==1.2.3"], check=True)
       sys.path.insert(0, target)
       import some_package
   ```

   Install once, then keep only the `sys.path.insert`. docs.fused.io's Dependencies page shows a `python3.11` site-packages path; the runtime is 3.12, so build any env for 3.12.
4. **Custom batch image**: `image_name=` on batch jobs pulls a custom image, but only in environments where Fused has enabled custom images (otherwise the server returns 403). There is no custom image for realtime.

Files in this skill

  • SKILL.md4.1 KB
  • packages.md28.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…