# 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 a Fuchsia device

To run Fuchsia on a device, install Fuchsia on hardware or use an emulator.

### Launch Fuchsia on an emulator

To launch Fuchsia on an emulator, see the
[Set up Fuchsia emulator](/docs/get-started/set_up_femu.md) guide.

### Install Fuchsia on hardware

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

Further explore Fuchisia in the following guides:

 *   [Explore Fuchsia basics](/docs/get-started/explore_fuchsia.md)
 *   [Fuchsia workflow tips and questions](/docs/development/source_code/workflow_tips_and_faq.md)
 *   [Configure editors](/docs/development/editors/)
 *   [Fuchsia source code layout](/docs/concepts/source_code/layout.md)
 *   [Contribute to Fuchsia source code](/docs/development/source_code/contribute_changes.md).
 
## 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).