# fluent-tooling

> Tree-sitter grammar, linter, and editor tooling for the [Fluent localization system](https://projectfluent.org/) from Mozilla.

![doc](https://img.shields.io/badge/doc-outskirtslabs-orange.svg)
![status: experimental](https://img.shields.io/badge/status-experimental-red.svg)
![alt=nixbot](https://ci.outskirtslabs.com/repos/github/outskirtslabs/fluent-tooling/badge.svg)

This repository contains:

* [`ftl-lint`](https://docs.outskirtslabs.com/fluent-tooling/0.0.1/ftl-lint), a command-line linter with compiler-style diagnostics;
* [`tree-sitter-fluent`](https://docs.outskirtslabs.com/fluent-tooling/0.0.1/tree-sitter), an error-tolerant Tree-sitter grammar with Rust bindings; and
* [`fluent-ts-mode`](https://docs.outskirtslabs.com/fluent-tooling/0.0.1/emacs), a native Tree-sitter major mode for Emacs.

Project status: **[Experimental](https://docs.outskirtslabs.com/open-source-vital-signs#experimental)**.

## Quick start

Run the linter from this checkout:

```bash
nix run . -- path/to/messages.ftl
```

See the [`ftl-lint` guide](https://docs.outskirtslabs.com/fluent-tooling/0.0.1/ftl-lint) for installation, command-line options, diagnostic codes, and editor integration.

## Documentation

* [Docs](https://docs.outskirtslabs.com/fluent-tooling/0.0.1/)
* [API Reference](https://docs.outskirtslabs.com/fluent-tooling/0.0.1/api)
* [Support via GitHub Issues](https://github.com/outskirtslabs/fluent-tooling/issues)

## Nix packages

The flake exports two named packages and selects `ftl-lint` by default:

| Command | Package |
| --- | --- |
| `nix build` or `nix build .#ftl-lint` | The `ftl-lint` executable |
| `nix build .#tree-sitter-fluent` | The compiled Tree-sitter grammar |

See the [`tree-sitter-fluent` guide](https://docs.outskirtslabs.com/fluent-tooling/0.0.1/tree-sitter) for the grammar package’s layout and integration options.

## Development

Enter the reproducible development shell and run the complete quality gate:

```bash
nix develop
bb ci
```

The [development guide](https://docs.outskirtslabs.com/fluent-tooling/0.0.1/development) covers repository structure, parser generation, individual checks, and fixture provenance.

## Licensing

Copyright © 2017-present David Rios for the original Tree-sitter grammar.

Copyright © 2026 mailto:casey@outskirtslabs.com[Casey Link].

Distributed under the [MIT](https://spdx.org/licenses/MIT.html) license.

Copied grammar provenance and third-party fixture licenses are documented in [`NOTICE.md`](https://github.com/outskirtslabs/fluent-tooling/blob/main/NOTICE.md) and [`test/fixtures/UPSTREAM.md`](https://github.com/outskirtslabs/fluent-tooling/blob/main/test/fixtures/UPSTREAM.md).
