# 0.31 released - Hazelcast, MongoDb and a new onboarding experience

> Orbital 0.31.0 - "Alf" - MongoDB support, Hazelcast datasources and onboarding

Source: https://orbitalhq.com/changelog/2024-04-05-release-announcement-0-31-0
Date: 2024-04-05
Version: 0.31.0

## Orbital 0.31.0 - "Alf" Edition
We're excited
to announce the release of Orbital [0.31.0](https://hub.docker.com/layers/orbitalhq/orbital/0.31.0/images/sha256-62c195eed42025fec0d22debcdbc6c0d9e250425eeb37b34a92e825ffae4f416?context=explore) -
with a large focus on helping new users feel comfortable -- which reminded us of a certain '80s friend.
So, we present Orbital 0.31.0 - The "Alf" edition. 👽🛸🏡

## Highlights

 - New connectors: [MongoDB](#mongodb-support) and [Hazelcast](#hazelcast-support)
 - [New onboarding flow](#new-onboarding-experience), and [improved UX for projects and data sources](#improved-ux-for-managing-projects-and-data-sources)
 - [Filtering streams of data](#filtering-a-stream)
 - [Controlling the services called in a query](#controlling-services-used-in-a-query-preview)

### MongoDB support (Preview)
We now support [MongoDB](/docs/describing-data-sources/mongodb) as a datasource, including support for both 
[querying](/docs/describing-data-sources/mongodb#querying-collections) and [writing](/docs/describing-data-sources/mongodb#writing-data-to-a-collection)

### Hazelcast support (Preview)
Building on top of our support for [Hazelcast](https://hazelcast.com) as a [cache](/docs/querying/caching),
Hazelcast is now available as a data source, supporting reads, writes and streams.

Use a Hazelcast Map as a [high speed data store](/docs/describing-data-sources/hazelcast#writing-data-to-hazelcast),
or use a Map as the basis for a [Stream of data](/docs/describing-data-sources/hazelcast#streaming-data-from-hazelcast), 
giving you the best of both worlds. 

### New onboarding experience
For those wanting to dip their toes into the world of Taxi and Orbital, we've built an onboarding flow which should help
get you up to speed in no time! And remember, just like Alf trying to fit in with the Tanners, you might feel a bit out
of place at first, but with our guidance, you'll be navigating through like a pro in no time!

You'll see this screen automatically when you don't have any data sources declared, but you can also view it manually by
going to /onboarding.
_Image: The new onboarding flow_
We welcome feedback in this area of the app, so please take it for a spin and let us know what you think.

### Improved UX for managing projects and data sources
Now that you're familiar with adding projects and data sources after completing the onboarding steps, you'll be happy to
hear that those same project import and data source creation steps are available to you outside the onboarding flow.
Consistency FTW!

We've completely reworked the Connections page, allowing a more streamlined view of all connections, and their related
data sources.
_Image: Viewing connections and data sources all from one screen_

If you want to add a new data source, then the same flow that was created for the onboarding flow is now used here as
well. It's like having Alf in charge of the kitchen - he sticks to his recipes with that good 'ol fashioned consistency
that we're all about here at the house of Orbital.
_Image: Adding a new data source_

### Sliding Sidebars
Ever needed a few more cm's of screen space and thought, gee that sidebar is taking up a bunch of space? Well, now you
can collapse it with a click of the mouse, and regain all that space you've been desperately hankering for. We'll
remember your preference as well, and restore things how you left them.
_Image: Optimise your screen real estate, all with one click!_

### Controlling services used in a query (preview)
By popular demand, one of our most requested features is the ability to control which services are called in a query.
After all - if Alf taught us anything - given a universe of possibilities, a little navigation can save you landing in a whole world of trouble.

While designing this feature, we wanted to ensure that Taxi remains declarative - and find a balance between giving
users control over which services are called, while remaining resilient and self-adapting as services evolve.

You can now limit a query to **only call specified services**, with the `using` keyword:

```taxi
find { Film[] } as {
  filmId : FilmId
  reviews : ReviewScore
}
using { FilmsDb, NetflixApi::getReviews }
```

The list of allowed endpoints can be a mixture of services (`FilmsDb`), or even specific operations on services
(`NetflixApi::getReviews`).

Similarly, you can allow Orbital to call any services *except* some, using the `excluding` keyword:

```taxi
find { Film[] } as {
  filmId : FilmId
  reviews : ReviewScore
}
excluding { ImdbApi, RottenTomatoes::getReviews }
```

This too allows combining services and specific operations to exclude.

This feature is considered in preview, and the syntax may change, so we're actively seeking feedback.

Please [reach out](https://join.slack.com/t/orbitalapi/shared_invite/zt-697laanr-DHGXXak5slqsY9DqwrkzHg) to share your thoughts.

### Filtering a stream
We've added new support for [filtering streams of data](/docs/querying/streaming-data#filtering-streams) server-side (ie., on Orbital).

Imagine you have a Kafka stream of stock quotes, and you only want
quotes for a specific symbol - this is now possible using `.filterEach()`.

```taxi
stream { StockQuotes.filterEach( Symbol -> Symbol == 'AAPL' ) }
```

### Http headers now visible
We now display HTTP headers in the Profiler view of queries
_Image: Http headers now visible_

### Updates to Stream UX
The Endpoints page now shows the current status of individual streams.

The Stream Page allows enabling & disabling of individual streams.
_Image: Stream status now shown_

### Streams now disabled by default
When a stream appears for the first time in the schema, it's now disabled by default, and required
manually enabling -- for the first time only.

This is to prevent streams - which can be mutating - starting accidentally, because as Alf would say, 'Hey, no one wants
accidental mutations on their hands... or their planet!

### Streams now automatically updated
Whenever changes are found in a running streaming query, the stream
is now automatically updated. Previously, this was buggy...Suboptimal.

### CVE Updates
This build bumps our internal dependencies, addressing the following CVE's:

 * [CVE-2024-22257](https://nvd.nist.gov/vuln/detail/CVE-2024-22257) Possible Broken Access Control in Spring Security With Direct Use of AuthenticatedVoter
 * [CVE-2024-22234](https://nvd.nist.gov/vuln/detail/CVE-2024-22234) Broken Access Control in Spring Security With Direct Use of isFullyAuthenticated
 * [CVE-2024-22259](https://nvd.nist.gov/vuln/detail/CVE-2024-22259) Spring Framework URL Parsing with Host Validation (2nd report)
 * [CVE-2024-22243](https://nvd.nist.gov/vuln/detail/CVE-2024-22243) Spring Framework URL Parsing with Host Validation
 * [CVE-2023-52425](https://nvd.nist.gov/vuln/detail/CVE-2023-52425) libexpat through 2.5.0 allows a denial of service

**Note: Info**
We upgrade our dependencies regularly to address published CVE's. Based on our independent research, Orbital 
    was not affected by these vulnerabilities.
