App limitations
Use axis ranges and scales,
line-end labels and
chart animation controls for the settings available in
@astrato-io/visualizations 0.6.2. The remaining findings below were recorded with visualizations
0.5.1, @astrato/sdk 0.4.0 and @astrato/app-runtime 0.1.0. That runtime name records the package
actually tested; the current public name is @astrato-io/app-runtime. Findings explicitly labelled
0.5.1 have not been reverified on 0.6.2. Pages that need a missing capability link here.
Chart settings
Section titled “Chart settings”| Gap | Affects |
|---|---|
| No operation shows, hides or colours gridlines. | Styles, Tufte |
No operation moves the value axis. setInvertAxis reverses its direction; only the heat map has setShowAxisOnTop. |
Economist, Financial Times |
Axis labels, data labels and legends have no font-family operation, and axis labels have no font-size operation. number, simpleTextObject and table take a font family. |
All styles, Ops wall |
| No operation wraps or rotates category-axis labels, or sets the width of the category axis. A bar with long labels rotates them by itself, and horizontal bars in one row start at different positions. | Card grid, Economist |
| No operation or definition field sets the legend order; a categorical legend lists values A→Z, whatever order the bars are in. | Legend, Keep a value’s colour across charts |
| No colour for a named category value. Palettes assign colours by domain order or by hash; see Styling and theming. | Storytelling with data, Economist, Financial Times, Visual essay, Legend, Few |
histogram has no palette or series-colour operation, so it stays in the default colour. Recorded with visualizations 0.6.5. |
Theming |
| Data labels are shown per measure, not per category. | Storytelling with data |
| No text, arrows or reference lines anchored to data points inside the plot. Fixed shaded measure-axis bands are supported; see Axis ranges and scales. | All styles, Cairo, Kirk |
| No uncertainty interval that follows a series or error bars. Fixed measure-axis bands mark a range of measure values. | Explainer, Cairo |
Line size and line style operations exist on line only, not on combo or radar. |
Explainer, Showcase |
bar, combo and heatMap have no data-label text colour operation; bar and combo have only setMeasureDataLabelBackdropColor. |
Financial Times, Astrato default |
Axis charts, pie and number have no background operation. |
Financial Times, dark themes in all styles |
| Treemap and sankey labels take no text colour; radar spoke labels take no colour; word-cloud words take no font. | Information is Beautiful |
Charts do not automatically read prefers-reduced-motion; your app can apply it with animation controls. No operation sets animation duration or easing. |
Visual essay, Long-form |
The number comparison takes one colour (setComparisonFontColor); no operation colours it by sign. |
KPI card |
(0.6.5) number draws an empty value as 0, in its format, so a missing comparison reads as 0%. Show a value that can be empty in your own card. |
KPI card |
(0.5.2) scatter has no reference line or quadrant operation. Write the thresholds in the panel header or as a text overlay. |
Query performance |
| (0.5.2) No marker for a range of the dimension axis, such as a date or lap window. Draw it as a labelled band above the chart, aligned to the axis. | Narrative |
(0.5.2) heatMap data labels are configured but do not render. Add a colour-scale legend beside the chart. |
Legend |
Visualization types
Section titled “Visualization types”| Gap | Affects |
|---|---|
No map: map is a Workbook-only object; see Limitations. |
Map-led, Map |
| No bullet graph, chord, network, circle-packing, sunburst, beeswarm, pictogram or streamgraph type. | Few, Kirk, Information is Beautiful |
| No trellis panels, smoothers, quantile or Q-Q plots, and no aspect-ratio banking. | Cleveland |
number takes exactly one measure and no dimension, so it cannot draw a trend. |
KPI card |
| Sparklines exist only as table-column representations. | Tufte |
dot takes exactly two dimensions and one measure. |
Cleveland |
simpleTextObject takes no query data; your code sets its text. |
Narrative |
Interaction
Section titled “Interaction”| Gap | Affects |
|---|---|
| The visualization runtime has no click event; a mark reports a click only as a selection. | Drill-down, Drill-through |
| No operation makes a chart ignore clicks, so every chart needs a selection bar or another way back. | Filters and selections |
| (0.6.5) Clicking the only selected mark again leaves every mark pale until that empty selection is applied or cleared. | Filters and selections |
No operation replaces a chart’s dimension or switches a grouped dimension’s level; only table has changeColumnField to replace a column. |
Drill-down, Chart switcher |
sourceInstanceId is optional in the selection shape; see Selections. |
Drill-through |
| Selections are held in memory and a reload loses them; see Limitations to design around. | Drill-through, Detail, Period picker |
Filters and dates
Section titled “Filters and dates”| Gap | Affects |
|---|---|
filter modes are dropdown and listbox only. |
Quick filters |
| A selection group holds one selection per field and kind, so a current and a comparison period cannot both be selections on one date field; see Selections. | Period picker, KPI card |
In @astrato-io/visualizations 0.5.1 a filter object throws Cannot destructure property 'view' and stops rendering once a selection is applied in its group. |
Filter bar, Filter panel, Quick filters |
date-picker has no comparison period. |
Period picker |
| (0.5.2) A static definition filter on a raw date column, such as limiting a chart to the last 18 months, is silently ignored. Filter on a governed mapping dimension built over the date instead. | Period picker |
| (0.5.2) A click on a chart built on a layer-defined dimension does not filter other charts; the selection is dropped. Build charts that should cross-filter on raw view fields. | Filters and selections |
Data and objects
Section titled “Data and objects”| Gap | Affects |
|---|---|
| The visualization runtime has no refresh method or interval. | Ops wall |
(0.5.2) The runtime does not pass the requesting object’s id to engine.getData, so an app-side scheduler cannot tell which tile a request belongs to without matching field keys. |
Query performance |
| On a demo tenant (October 2026) the median engine round trip per query was 0.65–1 s while the warehouse answered from cache in about 80 ms, and it rose under tenant load. App code can reduce browser queueing but did not reduce the round trip. | Query performance |
Readiness reports rendered, error, unmounted or timeout; no status reports that a mounted object returned no rows. |
Object states |
query() takes no timeout, retry or cancellation option; see Queries. In a published App, the App runtime ends a query after 60 seconds with timed_out. |
Object states, Narrative |
The App runtime has no error code for a refused permission or an expired session; it reports an HTTP error response as runtime_request_failed with the response status. |
Page states |
| An App can read the semantic layer and execute queries; it has no text-generation service; see What a Data App can reach. | Narrative |