0.37.0-M3 - Preflight exports, parseJson, and observability improvements
- Date
Orbital 0.37.0-M3 is the third milestone release of 0.37.
We haven’t published release notes on 0.37.0-M1 or -M2, we’ll cover off those releases too.
The headline features are a new parseJson() standard library function, the ability to export query history
as Preflight test specs, and a significant improvement to observability — with request
parameters now captured on every remote call across all connectors.
There’s also a crop of reliability improvements: better git sync resilience, a fix for a stack overflow in the query engine, and an internal overhaul that removes a class of thread-pool starvation under concurrent load.
As a milestone release, 0.37.0-M3 is intended for early adopters and teams that want to test ahead of the GA release. Feedback welcome.
New Features
parseJson() stdlib function
Available since 0.37.0-M3You can now use parseJson() in your queries and projections to parse a JSON string into a typed value.
This is useful when JSON arrives embedded in a field as a string — a common pattern in event-driven systems where a message envelope wraps a serialized payload.
Using parseJson()
Preflight test spec export
Available since 0.37.0-M2Query history can now be exported as a Preflight test spec, in addition to the existing ZIP regression pack format.
When downloading a regression pack from query history, you can now choose between Zip (the original format)
and Preflight spec files.
Preflight Spec Files are markdown files that describe a test scenario, along with all the information to stub out query services:
---
spec-version: 0.1
---
# Test name
Optional description paragraph.
## Query
```taxiql
find { Customer( CustomerId == "C-100" ) } as CustomerProfile
```
## Data Sources
### Customer API
<!-- operation: getCustomer -->
Response:
```json
{ "id": "C-100", "name": "Alice Smith", "age": 30 }
```
## Expected Result
```json
{ "id": "C-100", "name": "Alice Smith", "age": 30, "isAdult": true }
```By capturing these using the data from your queries, you can very quickly build test suites for your taxi projects.
Preflight tests are runnable using Gradle, so works great with established build tooling and CI/CD.
Observability
Request parameters captured on trace events
The capture of input parameters for events shown in the Trace View has been extended, capturing inputs across all connectors.
JFR flight recorder
Available since 0.37.0-M1Orbital now supports capturing Java Flight Recorder traces for capturing diagnostic data. This feature is disabled by default, but can be enabled through configuration
0.37.0-M3 extends this to further capture exception data.
Reliability & Performance
Query engine: fix for circular operation types (ORB-1081)
Available since 0.37.0-M2Fixed a bug where an operation whose return type also appeared as an input parameter type would trigger recursive parameter construction, ultimately causing a stack overflow. Type-level cycle detection is now applied during object building, so these circular type graphs are handled cleanly.
Git sync failures are no longer fatal
Available since 0.37.0-M3A git repository sync failure at startup is now treated as a warning rather than an error. If a
locally-cached copy of the schema is available, Orbital will use it and continue running — reporting a
WARNING state in the UI rather than refusing to start.
The UI also now distinguishes between ERROR (schema could not be loaded at all) and WARNING (schema
loaded from local cache), with separate alerts and colour-coded severity badges, so it’s clearer what’s
actually happening.
A rate limiter (via resilience4j) has also been introduced on git repository polling, to prevent remote git servers from denying requests when Orbital is polling frequently.
Eliminated blocking calls from the query engine
Available since 0.37.0-M1The internal TaxiQL query engine has been refactored to remove blocking calls. Under specific conditions, it was previously possible for the query engine to get into thread starvation, waiting for I/O calls to complete.
By migrating the core query engine away from blocking, this removes the risk