X_eTaL extensions

Libraries extend the vocabulary; macros extend the language; native extensions extend the machine. These are X_eTaL's native extensions: Rust shared libraries that X_eTaL programs load at run time through a small C ABI, behind ordinary typed X_eTaL libraries -- a database, a clock, a window. They run on your machine, so this page shows them running; the commands under each recording run them yourself.

git clone https://github.com/softwarewrighter/X_eTaL-extensions
cd X_eTaL-extensions
just xetal                  # X_eTaL at its known-good commit (work/xetal)
cargo build --workspace
just demos                  # the demos; then: just demo EXT NAME

audio facade docs

Audio files for X_eTaL: decode Ogg Vorbis, MP3 and WAV, play them on the sound device, and read what is playing as arrays -- the window of samples under the playhead, for analysis and pictures (the visualizer).

audio / scope source and docs

A live oscilloscope: the synthesizer's music (Instruments.xtl) plays while a window draws the samples under the playhead -- the left channel above, the right below -- each frame, triggered on the left channel's rising zero crossing so a steady chord stands still.

just demo audio scope

audio / spectrum source and docs

The music visualizer: an Ogg Vorbis (or MP3, WAV) file plays while X_eTaL turns what is playing into a spectrum and the spectrum into 16 spokes in a 3D window -- Rust decodes, plays and draws; the analysis and the picture's geometry are X_eTaL arrays.

just demo audio spectrum

audio / synth source and docs

A synthesizer made of arrays: X_eTaL computes every sample of a little piece -- notes from equal temperament, harmonics, envelopes, chords, stereo (the instruments are in Instruments.xtl, beside this file) -- and the audio extension plays them as they are made.

just demo audio synth

canvas facade docs

A native window showing X_eTaL arrays as pixels, with keys, clicks and frame ticks back -- the first extension served by the UI host (crates/xetal-ext-ui), and the base of the media saga's visualizer.

canvas / life source and docs

Conway's Life in a native window: the board is an X_eTaL array, each generation one array expression, drawn by Rust with every frame.

just demo canvas life

clock facade docs

Wall-clock and monotonic time: timestamps for programs (as Unix seconds or ISO 8601 text), and timing for benchmarks -- including the cost of the bridge itself. X_eTaL itself now has the time of day ([]TS) and a delay ([]D_L), but no monotonic clock yet (docs/xetal-asks.md in the repository, E4).

clock / bridge-cost source and docs

What the text bridge costs (docs/bridge.md): calls per second, and Floats per second carried out and back (it uses hello too).

just demo clock bridge-cost

digest facade docs

SHA-256 and CRC-32 for X_eTaL, of text and of files: to check that content is what it should be -- a downloaded feed against the digest recorded when it was saved, a file against a checksum published beside it.

No demo yet.

hello facade docs

The smallest X_eTaL native extension. It exists to prove the boundary: each function exercises one thing a real extension needs.

hello / tour source and docs

A tour of the hello extension: X_eTaL arrays handed to Rust and back.

just demo hello tour

http facade docs

<p align="center"> <img src="../videos/quakes.webp" alt="The earthquake report at the command line" width="640"> </p>

http / quakes-live source and docs

Earthquakes of the past week, live: the USGS feed of magnitude 2.5 and up, fetched now (the network: run it only when you mean to), its SHA-256 shown, then the same report as quakes.xtl.

(no recording yet)

just demo http quakes-live

http / quakes source and docs

Earthquakes of a week: the USGS feed of magnitude 2.5 and up, saved 2026-10-06 (demos/data/PROVENANCE.txt), checked against its SHA-256, into SQLite; SQL selects and groups, X_eTaL computes (the magnitude-frequency law), pictures show it.

just demo http quakes

image facade docs

<p align="center"> <img src="../videos/photo-lab.webp" alt="The photo lab: filters, the SVD at three ranks, sepia" width="640"> </p>

image / photo-lab source and docs

The photo lab: a photo is an array. Buzz Aldrin on the Moon (Apollo 11, NASA, public domain: demos/data/PROVENANCE.txt) read as numbers; filters and edges by rotating the array (the Life idiom), a color toning by an inner product, and the SVD compressing it at several ranks -- the native code reads, writes and decomposes, X_eTaL does the rest. Pictures go to work/photo-lab/.

just demo image photo-lab

linalg facade docs

Numerical linear algebra for X_eTaL, through nalgebra: solving systems, inverses, determinants, least squares, symmetric eigenvalues and the singular value decomposition -- the algorithms an array language should call, not reinvent. Matrices are Float arrays, rows by columns.

No demo yet.

scene facade docs

Retained 3D scenes in a native window: an X_eTaL program puts objects under ids it chooses (a polyline, segments, dots, filled quads) and patches them later; Rust draws them in perspective from an orbit camera, which the mouse turns -- quads shaded and depth-tested, lines over them. The base of the visualizer and of the voxel demos.

scene / cube source and docs

A wireframe cube turning in a native 3D window: its corners and edges are X_eTaL arrays; Rust draws them.

just demo scene cube

scene / voxels-chunk source and docs

Voxels, 1: a chunk is an array. 16 by 16 by 16 block numbers built from a height field in a few array expressions -- grass, dirt, stone, water below a level, sand at its shore, one tree -- then counted, cut and seen from above. (docs/voxels.md; the next demos draw it.)

just demo scene voxels-chunk

scene / voxels-endless source and docs

Voxels, 6: an endless world. Walk in any direction and it never ends: the land comes from value noise hashed from the coordinates (vx:h_eightsAt), so any column of 16 by 16 blocks can be made by itself and fits its neighbors; columns are made around the player as it walks -- the nearest missing one each frame -- and dropped behind it; fog hides the edge of what is made, and a curved horizon (scene lowers the world by d^2 / 2R) makes it look like a small planet. Collision asks the columns themselves. The world and the player are the library Endless.xtl, shared with voxels-fly: each column is made over three frames, so no frame waits long.

just demo scene voxels-endless

scene / voxels-faces source and docs

Voxels, 2: which faces to draw. A face shows where a solid block's neighbor is not solid: six rotations of the solid mask, each compared with the mask itself (the idiom of Life), give every exposed face of the chunk at once; the faces become a list, one row each: x y z direction block. Checked on shapes with known answers, then the chunk's faces drawn as outlines in a 3D window, turning.

just demo scene voxels-faces

scene / voxels-fly source and docs

Voxels, 7: flying. The endless world of voxels-endless, now from the air: F switches between walking and flying. Flying moves level whatever you look at -- W forward, S back, A and D sideways -- Space rises and Shift sinks, with no gravity, the blocks still stopping you; so you can look down at the land as you cross it. F again drops you back to walking wherever you are. The columns are made ahead, one a frame, and dropped behind, under fog and a curved horizon.

just demo scene voxels-fly

scene / voxels-solid source and docs

Voxels, 3: the chunk drawn solid. The same faces as voxels-faces, each now a filled quad -- its four corners from a 6 by 4 table by direction -- one object per kind of block; scene shades each by how it faces the light and hides the farther ones behind the nearer (a depth buffer), with a little fog. All the array work is X_eTaL's; Rust only draws.

just demo scene voxels-solid

scene / voxels-walk source and docs

Voxels, 5: walking. The island of voxels-world, seen from inside it. The player is nine numbers -- x y z (feet), vx vy vz, yaw, pitch, on the ground -- and every frame X_eTaL reads the keys and the mouse, turns, falls, jumps, and moves one axis at a time against the solid blocks the player's box would overlap, stopping at the face of the block it hits (a swept box per axis, as the APL game collides); then it sets scene's first-person camera. It also tests the 32 chunks against the planes of the view, as the APL game culls (key c).

just demo scene voxels-walk

scene / voxels-world source and docs

Voxels, 4: a world of chunks. An island 64 by 32 by 64 -- 32 chunks of 16 cubed -- from value noise made by linear algebra (random heights on grids every 16, 8 and 4 blocks, each interpolated as M G M'), shaped by the chunk's rules over the whole world at once, with trees planted by folding one tree over a list of places. Its faces are found over the whole array (so faces between chunks hide each other), then sent to scene chunk by chunk, each chunk's kinds of block under their own ids -- the ids a later demo patches when a block changes.

just demo scene voxels-world

sqlite facade docs

SQLite databases for X_eTaL: run statements, and bring query results back as X_eTaL arrays -- numbers as a matrix to compute on, text as a Char matrix -- through rusqlite with SQLite compiled in.

sqlite / notebook source and docs

The data notebook: a CSV in SQLite, SQL to select and group, X_eTaL arrays to compute, pictures to see it. Atmospheric CO2 at Mauna Loa, 1959-2025 (NOAA GML and Scripps; demos/data/PROVENANCE.txt).

just demo sqlite notebook

web facade docs

<p align="center"> <img src="../videos/todomvc.webp" alt="TodoMVC served by an X_eTaL program" width="420"> <img src="../videos/life.webp" alt="Life computed in X_eTaL, one generation per request" width="320"> </p>

web / life source and docs

A live page: Conway's Life kept by an X_eTaL program and drawn as SVG, one generation per request. The program is the server's request loop.

just demo web life

web / todomvc source and docs

TodoMVC on the web: the todos live in SQLite, the X_eTaL program is the server -- it routes each request, keeps the filter, counts what is left, and writes the page; forms post and are redirected back.

just demo web todomvc