---
slug: v0.24
title: moon v0.24 - Remote caching, interactive tasks, query improvements, and more
authors: [milesj, jpoz]
tags: [project, platform, moonbase, remote-cache]
image: ./img/v0.24.png
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import Button from '@site/src/ui/Button';

With this release, we've polished our CLI experience and improved task interoperability.

<!--truncate-->

## Remote caching now available

If you missed our announcement earlier this week,
[remote caching is now publicly available through our new service moonbase](/blog/moonbase)! If
you're looking to speed up your CI pipelines and share build artifacts between runs, moonbase can
help.

<div class="flex justify-center">
  <Button label="Try moonbase for free!" href="https://moonrepo.app" size="lg" />
</div>

## Project-level task platform

In our previous release, [v0.23](./v0.23#project-level-environment-variables), we added support for
project-level environment variables. This is great as it helps to reduce duplication for projects
with many tasks. On that note, we wondered which configuration field we could apply similar
treatment, and as such, we've added a project-level [`platform`](/docs/config/project#platform)
setting.

When this setting is defined, all task's within the current project that have _not explicitly_
configured their `platform`, will inherit the project-level platform. If neither settings are
defined, we'll attempt to detect the correct platform based on the state of the project.

```yaml title="<project>/moon.yml"
# Will set non-explicit task's platform to node
platform: 'node'

tasks:
  # Will be node
  dev: # ...

  # Will be node
  build: # ...

  # Will be system
  serve:
    # ...
    platform: 'system'
```

> This setting is _extremely useful_ for projects that contain multiple languages. Even more so once
> we land Bun and Deno support, as we'll need a way to differentiate JavaScript/TypeScript projects!

## Interactive tasks

When moon executes a task, it streams both stdout and stderr to the terminal _and_ captures the
output for later use. We do this for 2 reasons:

- We store stdout.log and stderr.log files in a tarball archive.
- We replay this captured output when executing a task that has been cached.

While this works, our approach is non-standard. Streams are either piped or inherited, not both!
Because of our custom abstraction around streams and output capturing, it disrupts stdin, breaking
all interactive commands. If you tried to run a task that prompted you with a question and were
unable to answer it, this is why!

To remedy this shortcoming, we're approaching this from 2 angles. The first is that all tasks marked
as [`local`](/docs/config/project#local) (or have caching disabled) will no longer capture streamed
output, and will instead stream natively, allowing interactivity out of the box, but only when
they're the only task being ran. This will cover the majority of use cases.

For the remaining use cases, we're introducing a new `--interactive` flag for
[`moon run`](/docs/commands/run). When this flag is provided, it will force the target into an
interactive mode.

```shell
$ moon run app:new --interactive
```

## Improved `moon query` commands (breaking)

The [`moon query projects`](/docs/commands/query/projects) and
[`moon query touched-files`](/docs/commands/query/changed-files) commands are useful for building
custom solutions and integrations on top of moon, but they weren't developer friendly as they output
large JSON blobs. To remedy this, we've updated both commands to output a simple human readable
format by default, and moved the JSON output behind a `--json` flag.

For example, `moon query touched-files` now outputs a list of absolute file paths separated by new
lines.

```
$ moon query touched-files
/moon/website/docs/commands/query/projects.mdx
/moon/crates/cli/tests/query_test.rs
/moon/crates/cli/src/commands/query.rs
/moon/website/blog/2023-02-13_v0.24.mdx
```

While `moon query projects` now outputs a list of project separated by new lines, where each line
contains the project name, source, type, and language.

```
$ moon query projects
report | packages/report | library | typescript
runtime | packages/runtime | library | typescript
types | packages/types | library | typescript
visualizer | packages/visualizer | library | typescript
website | website | application | typescript
```

We had 2 goals in mind for this change, the first was to make it easily readable, and the second was
for the default output to be easily parseable. We believe we've accomplished these goals!

## New `moon query tasks` command

To expand on the query improvements above, we wanted to provide a way to also query for tasks,
answering the question of "What tasks exists and for what projects?". And with this, we're
introducing a new [`moon query tasks`](/docs/commands/query/tasks) command!

```
$ moon query tasks
types
  :build | packemon
  :format | prettier
  :lint | eslint
  :test | jest
  :typecheck | tsc
report
  :build | packemon
  :format | prettier
  :lint | eslint
  :test | jest
  :typecheck | tsc
...
```

## Shell completions

Auto-completion in your terminal increases productivity, which we're a massive fan of. To help
support this, we're introducing the [`moon completions`](/docs/commands/completions) command, which
generates the appropriate command completions for your current shell.

This command writes to stdout, which can then be redirected to a file of your choice. Be sure to
configure your shell profile to load the completions!

```shell
$ moon completions > ~/.bash_completion.d/moon.sh
```

## Other changes

View the
[official release](https://github.com/moonrepo/moon/releases/tag/%40moonrepo%2Fcli%400.24.0) for a
full list of changes.

- Added [TypeScript v5](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/)
  support.
- Added a `hasher.walkStrategy` setting to `.moon/workspace.yml`.
- Updated task `outputs` to support token functions (`@group`, `@globs`, etc).
- Reworked our comparison/baseline estimations calculations.

## What's next?

Expect the following in the v0.25 release!

- Deno tier 2 support.
- CI insights and metrics within moonbase.
- Project-level TypeScript settings.
