# Fuchsia getting started

Welcome to Fuchsia! This guide walks you through the steps to get Fuchsia source code,
build Fuchsia, and run Fuchsia on an emulator or hardware device.

## Get Fuchsia source and build Fuchsia

To download the Fuchsia source code and set up your build environment, follow
these instructions:

 * [Get Fuchsia source code](/docs/get-started/get_fuchsia_source.md)
 * [Build Fuchsia](/docs/get-started/build_fuchsia.md)

## Set up Fuchsia 

### Fuchsia emulator (FEMU)

To set up and run the Fuchsia emulator (FEMU), see
[Set up the Fuchsia emulator (FEMU)](/docs/get-started/set_up_femu.md).

### Fuchsia on a device

To set up a hardware device, follow the steps in
[Installing Fuchsia on a device](/docs/development/hardware/paving.md)
and [Build and pave quickstart](/docs/development/build/build_and_pave_quickstart.md).

## Explore Fuchsia

You can explore Fuchsia further in the following guides:

 *   [Explore Fuchsia basics](/docs/get-started/explore_fuchsia.md)
 *   [Run an example Fuchsia component](/docs/development/run/run-examples.md)
 *   [Fuchsia workflow tips and questions](/docs/development/source_code/workflow_tips_and_faq.md)
 *   [Configure editors](/docs/development/editors/)
 *   [Contribute to Fuchsia source code](/docs/development/source_code/contribute_changes.md)
 *   [Find a starter project](/docs/contribute/open_projects/)

## Contribute to Zircon

Fuchsia source code includes [Zircon](/docs/concepts/kernel/README.md), the core platform
that underpins Fuchsia. To work on Zircon, see
[Getting started with Zircon](/docs/development/kernel/getting_started.md).
