# Creating a FIDL library

## Prerequisites

This tutorial expects that you have completed the [Getting Started][getting-started]
guide and are able to build and run Fuchsia (whether using `fx qemu` or on actual
hardware). You should be familiar with running components on Fuchsia using
`fx serve` and `fx shell run`, which are covered in [Run an example component][component].
This tutorial is the first of the sequence of FIDL tutorials listed in the [overview][overview]

## Overview

In this tutorial, we will define a FIDL library `fuchsia.examples`. Defining the
FIDL library lets us compile the `.fidl` files using `fx build` and check for any errors.
It also creates targets that can be included to depend on the bindings for the
new library. The bindings tutorials, as well as the prerequisites for this tutorial are
listed in the [FIDL tutorials overview].

## Define the FIDL library

The example code for this tutorial is in
[//examples/fidl/fuchsia.examples](/examples/fidl/fuchsia.examples).

We've chosen the directory name to match the library name, which is the
convention taken by the libraries defined in the Fuchsia IDK in
[`//sdk/fidl][sdk].

We can define some examples of the various FIDL language features in
`examples/fidl/fuchsia.examples/types.test.fidl`:

```fidl
{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/types.test.fidl" region_tag="lib" %}

{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/types.test.fidl" region_tag="consts" %}

{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/types.test.fidl" region_tag="bits" %}

{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/types.test.fidl" region_tag="enums" %}

{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/types.test.fidl" region_tag="structs" %}

{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/types.test.fidl" region_tag="unions" %}

{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/types.test.fidl" region_tag="tables" %}

{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/types.test.fidl" region_tag="protocols-preface" %}

{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/types.test.fidl" region_tag="protocols" %}
```

and also add a protocol to `examples/fidl/fuchsia.examples/echo.test.fidl`:

```fidl
{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/echo.test.fidl" %}
```

The `test.fidl` extension is used instead of just `.fidl`, since
exemptions to certain requirements like linting or API review are applied to
`test.fidl` files. You should use `.fidl` when writing your own FIDL files.

## Create a GN target for the FIDL library

Now we can define a target for our FIDL library that other code can depend on:

```gn
{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/BUILD.gn" %}
```

The bindings tutorials can use the bindings for our FIDL library
by depending on targets generated by the [GN `fidl` template][fidl-template].

## Compile the FIDL library

You can build the `.fidl` files and check for syntax errors by including the
target in your build config:

    fx set core.x64 --with //examples/fidl/fuchsia.examples

Then run `fx build examples/fidl/fuchsia.examples`.

Note: If you are rewriting the FIDL files yourself, don't forget to add the
Fuchsia copyright notice at the top of each file.

<!-- xrefs -->
[sdk]: /sdk/fidl
[fidl-template]: /build/fidl/fidl.gni
[overview]: /docs/development/languages/fidl/tutorials/overview.md
[getting-started]: /docs/getting_started.md
[component]: /docs/development/run/run-examples.md
