Pink + Purple == Fuchsia (a new Operating System)
Welcome to Fuchsia! This document has everything you need to get started with Fuchsia.
Prepare your build environment (once per build environment)
sudo apt-get install build-essential curl git python unzip
Install Command Line Tools:
In addition to Command Line Tools, you also need to install a recent version of Xcode.
Get the Source
Follow the instructions to get the Fuchsia source and then return to this document.
If you added
.jiri_root/bin to your path as part of getting the source code,
fx command should already be in your path. If not, the command is also
fx set core.x64 --with //bundles:kitchen_sink fx build
The first command selects the build configuration you wish to build and
generates the build system itself in an output directory (e.g.,
Fuchsia can ephemerally download packages over the network;
here we use the
--available flag to make the necessary packages covered in this guide
available for download.
The second command actually executes the build, transforming the source code in
build products. If you modify the source tree, you can do an incremental build
by re-running the
fx build command alone.
fx -i build starts a watcher
and automatically builds whenever a file is changed.
Alternatively, you can use the underlying build system directly.
[optional] Customize Build Environment
By default you will get a x64 debug build. You can skip this section unless you want something else.
fx set to see a list of build options. Some examples:
fx set workstation.x64 # x64 debug build fx set core.arm64 # arm64 debug build fx set core.x64 --release # x64 release build
[optional] Accelerate builds with
ccache accelerates builds by caching artifacts from previous builds.
is enabled automatically if the
CCACHE_DIR environment variable is set and
refers to a directory that exists.
goma accelerates builds by distributing compilation across
many machines. If you have
goma installed in
~/goma, it is used by default.
It is also used by default in preference to
To override the default behaviors, pass flags to
--ccache # force use of ccache even if goma is available --no-ccache # disable use of ccache --no-goma # disable use of goma
Installing and booting from hardware
To get Fuchsia running on hardware requires using the paver, which these instructions will help you get up and running with.
Boot from QEMU
If you don't have the supported hardware, you can run Fuchsia under emulation
Fuchsia includes prebuilt binaries for QEMU under
fx run command will launch Zircon within QEMU, using the locally built
There are various flags for
fx run to control QEMU's configuration:
-msets QEMU's memory size in MB.
-genables graphics (see below).
-Nenables networking (see below).
-kenables KVM acceleration on Linux.
fx run -h to see all available options.
ctrl+a xwill exit QEMU in text mode.
ctrl+a hprints all supported commands.
To enable graphics under QEMU, add the
-g flag to
fx run -g
First, configure a virtual interface for QEMU's use.
Once this is done you can add the
-u flags to
fx run -N -u scripts/start-dhcp-server.sh
-u flag runs a script that sets up a local DHCP server and NAT to
configure the IPv4 interface and routing.
In a separate shell, start the development update server, if it isn't already running:
fx serve -v
Boot Fuchsia with networking. This can be done either in QEMU via the
or on a paved hardware, both described above.
When Fuchsia has booted and displays the "$" shell prompt, you can run programs!
For example, to receive deep wisdom, run:
To shutdown or reboot Fuchsia, use the
dm help dm shutdown
Change some source
Almost everything that exists on a Fuchsia system is stored in a Fuchsia package. A typical development workflow involves re-building and pushing Fuchsia packages to a development device or QEMU virtual device.
Make a change to the rolldice binary in
Re-build and push the rolldice package to a running Fuchsia device with:
fx build-push rolldice
From a shell prompt on the Fuchsia device, run the updated rolldice component with:
Select a tab
Fuchsia shows multiple tabs after booting with graphics enabled. The currently selected tab is highlighted in yellow at the top of the screen. You can switch to the next tab using Alt-Tab on the keyboard.
- Tab zero is the console and displays the boot and component log.
- Tabs 1, 2 and 3 contain shells.
- Tabs 4 and higher contain components you've launched.
Launch a graphical component
QEMU does not support Vulkan and therefore cannot run our graphics stack.
Most graphical components in Fuchsia use the Scenic system
compositor. You can launch such components, commonly found in
Source code for Scenic example apps is here.
When you launch something that uses Scenic, uses hardware-accelerated graphics, or if you build the default package (which will boot into the Fuchsia System UI), Fuchsia will enter "graphics mode", which will not display any of the text shells. In order to use the text shell, you will need to enter "console mode" by pressing Alt-Escape. In console mode, Alt-Tab will have the behavior described in the previous section, and pressing Alt-Escape again will take you back to the graphical shell.
If you would like to use a text shell inside a terminal emulator from within the graphical shell
you can launch the term by selecting the
"Ask Anything" box and typing
Compiled test binaries are cached in pkgfs like other components, and are referenced by a URI. You can run a test by invoking it in the terminal. E.g.
If you want to leave Fuchsia running and recompile and re-run a test, run Fuchsia with networking enabled in one terminal, then in another terminal, run:
fx run-test <test name> [<test args>]
You may wish to peruse the testing FAQ.
- See CONTRIBUTING.md.
Additional helpful documents
- Fuchsia documentation hub
- Working with Zircon - copying files, network booting, log viewing, and more
- Documentation Standards - best practices for documentation
- Information on the system bootstrap component.
- Workflow tips and FAQ that help increase productivity.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.