> For the complete documentation index, see [llms.txt](https://docs.heisenware.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.heisenware.com/release-notes/v88-almost-forever.md).

# v88 — Almost forever

12 Oct 2025

<div align="left"><figure><img src="https://3495989837-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE5Ketpww1s7TauSAJrJ8%2Fuploads%2Fgit-blob-31bb232de7b9388eae6f9fdf96a6da0bbf542333%2Fimage%20(49).png?alt=media" alt="" width="285"><figcaption></figcaption></figure></div>

## Features

* Added table management, direct writes, and automatic downsampling to the [timeseries database](/app-builder/build-backend/functions/storage/timeseries-database.md).
* Configure photo resolution directly within the [photo](/app-builder/build-frontend/widgets/input-widgets/photo.md) widget.
* Introduced [Docker Extensions](/app-builder/build-backend/functions/extensions.md) to run custom code for your Apps, both in the cloud or on-premises. (Made the [Industrial Blockchain](/app-builder/build-backend/functions/extensions/industrial-blockchain.md), [Process Simulations](/app-builder/build-backend/functions/extensions/process-simulations.md), and [RAG AI](/app-builder/build-backend/functions/extensions/rag-ai.md) Docker Extensions.
* Added a single-command script for [on-premise installation](/tutorials/on-premise-installation.md).
* Released the [Docker Agent](/app-builder/build-backend/agents/docker-agent.md), which lets you run connectors on any hardware that supports Docker.
* The [upload](/app-builder/build-frontend/widgets/input-widgets/upload.md) widget now directly supports uploading photos.
* The [barcode / QR](/app-builder/build-frontend/widgets/input-widgets/barcode-qr.md) widget now supports scanning multiple barcodes sequentially without closing the camera preview.

## Fixes

* Fixed multi-file upload behavior in the [upload](/app-builder/build-frontend/widgets/input-widgets/upload.md) widget when utilizing buffer storage.
* Resolved a positioning discrepancy between the [App Builder](/app-builder/overview.md) preview and [Production Apps](/production-apps/overview.md) when using the Top Bar or Top Bar and Bottom Tabs in the [Page Explorer](/app-builder/build-frontend/page-explorer.md). Widgets in Production Apps no longer render too low on the y-axis.
* Fixed a bug where the `fontSize` property on the [button](/app-builder/build-frontend/widgets/trigger-widgets/button.md) did not apply correctly.
* Duplicating canvas sections now correctly clears all pre-existing widget connections.
* Fixed an issue where the `onJsonMessage` and `onStringMessage` events inside the [MQTT Client](/app-builder/build-backend/functions/connectors/mqtt-client.md) connector failed to trigger correctly when registered multiple times.
* Resolved a dependency issue with serial data transfer that caused the [Modbus](/app-builder/build-backend/functions/connectors/modbus.md) connector to crash on startup.
* Fixed a rendering bug in the [Backend Builder](/app-builder/build-backend.md) flow interface where the connection arrow was missing when linking event handlers to function inputs.
* Fixed an issue where the incorrect initial page loaded when an App used programmatic page switching.

## Changes

* Renamed the file widget to [upload](/app-builder/build-frontend/widgets/input-widgets/upload.md), and added new filtering categories including photo.
* Configured backend event flows to only activate when running in test mode.

## Breaking changes

* If your App uses a top bar or top bar and bottom tabs navigation layout, you may need to adjust your widget positions to align with the new layout rendering (see [Fixes](#fixes)).
* The `readXlsx` function in the [File I/O](/app-builder/build-backend/functions/connectors/file-i-o.md) connector no longer returns an object containing the sheet name as the sole key when processing a single sheet. It now returns the array of rows directly.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.heisenware.com/release-notes/v88-almost-forever.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
