# Changelog

The changes that affect people who use GizStack, newest first. Toolchain releases and their files are on the [install](../quickstart.md#platforms) page and in the [release catalog](https://gizstack.com/api/releases).

Each entry is the `Changelog:` trailer of the commit that made the change, listed when the site is
deployed. The entries up to 2026-10-20 were written here before the trailers.

:::changes
:::

## 2026-10-20

- **Image and video generation.** `gizlang:diffusion` runs FLUX.3 klein (text to image, image edits and its prompt upsampler) and MiniMax H3 (text to video with sound, including its 4-bit W4A8 checkpoint as stored) on NVIDIA GPUs with INT8 matrix cores. An H3 request of 832 x 480, 124 frames and 6 steps takes about 31.5 s warm on one 16 GB RTX 4070 Ti SUPER; a FLUX.3 klein step at 1024 x 1024 takes 0.175 s on an RTX 4080 SUPER. `Model.prepare` makes a schedule's tables once for a long-running service. See [Tensors, GPU kernels and AI models](../guides/compute.md#image-and-video-pipelines).
- **Shared operations for generative models in `gizlang:tensor`.** `attentionRows` (attention over packed rows in BF16 or 8 bits, with the head norm and rotary in its quantizing pass), `modulatedNorm` (AdaLN), `int8Rows` and `modulatedInt8RowsInto` (rows rotated and quantized to INT8, fused with the norm), and `lazyConv` (3 x 3 convolutions whose patches the product reads as it copies). Kernels get `Kernel.hadamard(..., regular)` and `Kernel.mmaHalf` (8-bit products with F16 sums).
- **Language model servers.** `Engine.warm` runs each first step shape before `serve` takes requests, so the first answer does not wait for kernels to compile. `serve` takes OpenAI `tools` and answers with `tool_calls`. Drafts run where they give tokens faster for that count of sequences (8 sequences on a 16 GB GPU: 395 tokens a second, was 228), and the KV pool of an engine of 4 slots on a 16 GB GPU holds 103.6K positions at 4 bits (was 49.2K), or 135.8K at 4-bit keys and 2-bit values (`kv: "4/2"`).
- **FLUX.3 klein worker.** `serve-flux` serves FLUX.3 klein (text to image and edits of up to four reference images) as an inference worker; `gizlang:worker` gains `serve`, `invalid`, `failed`, `progress`, `uploadedImages` and `seed`.

## 2026-10-19

- **Operators on your own types.** An operator on a record calls its method of that name: `a + b` is `a.add(b)`, and `- * / < <= > >=` and unary `-` call `sub mul div lt le gt ge neg`. Vectors, decimals and tiles read as math. See the [language guide](../guides/language.md#records-and-unions).
- **GPU kernels and language models.** A new guide, [Tensors, GPU kernels and AI models](../guides/compute.md): tensors on the CPU and the GPU, your own kernels as tile programs that run on NVIDIA and AMD GPUs and on the CPU, gradients, and Qwen, Llama and Mistral models with `gizlang:llm`. `Tensor.text()` prints a tensor as nested lists.
- **`lookup` replaces `lookup16`.** `lookup(table, i)` takes a table of any width and each index modulo its lane count: a `u16x32` table is one `vpermw`, a `u8x64` table one `vpermb`. Rename `lookup16` to `lookup`; a 16-lane table works as before.
- **Faster batches of a few rows on AMD RDNA 3.** On gfx11 GPUs a step of 2 to 32 rows reads 4-bit weights straight into the matrix cores: a 16-row step of Qwen3.8-27B on a Radeon 8060S takes 105 ms instead of 161, and decoding with MTP drafts runs at 33 tokens a second for one sequence (was 27) and 94 for four (was 71). Kernels get `Kernel.shuffle` (read any lane of the warp) and `Kernel.mmaWords` (an RDNA 3 matrix tile from registers).
- **Language models on the CPU draft too.** An engine without a GPU drafts with the model's MTP layer as one on a GPU does, and its 4- and 6-bit layers read memory at its full speed: Qwen3.8-27B decodes 4.3 tokens a second on 8 Zen 4 cores, against 2.5.

## 2026-10-17

- **Permissions and the default app follow the model.** A `Data.Scoped` (`Data.as(db, space, actor, now)`) reads and writes a Shape's rows as that actor may: the Policy is added to the query (a row without a grant is never selected), `@Model.Read` and `@Model.Write` set the role of a field, `@Model.Within` places a row below its parent, and a write is decided and placed in one transaction. `Admin.admin` now takes `open` (the actor of a request) and its list filters, sorts and pages in the database, shows reference labels and `@Model.Computed` fields, and lists the records that refer to a record; `Admin.routes` serves its actions too, so `Admin.dispatch` is gone. A key of an admin Shape may be an integer or several fields.

## 2026-10-16

- **No generated model files.** `Model.shape<T>()` reads a record type while the program runs, so `gizstack derive` and the `*.gen.giz` files are gone. An app lists its actions with `Model.action` and `Model.dispatch`. See [Model your data](../guides/model.md). The `Memory.describe`, `Memory.flatten` and `Memory.unflatten` functions read any type or value in the same way.

## 2026-10-13

- **Console addresses.** Projects open at `gizstack.com/{organization}/{project}/{area}`. The old `/o/...` and `/p/...` addresses redirect permanently.
- **Hosted apps move to `giz.sh`.** Apps and previews are served at `{slug}.giz.sh`. Old `{slug}.gizstack.com` addresses redirect permanently with their path and query.
- **Account recovery.** Email verification and password reset by email.
- **Trust pages.** [Security](https://gizstack.com/security), [status](https://gizstack.com/status), [pricing](https://gizstack.com/pricing) and [benchmarks](benchmarks.md).

## 2026-10-12

- **Developer preview.** The Gizlang toolchain for Linux x86-64, the Playground, the documentation and the package registry.
