Import zx from zircon/vdso, and various other fixes

This CL enables `using zx` to work in fidlbolt. The zx library used to
be a fidlc built-in, but as of Ib026655c3e8133bb14c92d0a5a68e730e26b746d
it is an ordinary library. This means fidlbolt needs to search in
//zircon/vdso so find its .fidl files.

In addition, this CL:

* Restructures the deployment/ directory to put all FIDL libraries under
  deployment/fuchsia/. This fixes the info tooltips which say where the
  library was found (library.go searches for "/fuchsia/" in the path).

* Sources in so that users with multiple
  checkouts can simply run `FUCHSIA_DIR=... ./`.

* Changes the Makefile to use lowercase variable names, to distinguish
  them from user-configurable env variables which are in uppercase.

* Improves the error message when the fidlbolt_deployment.json file
  cannot be read or fails to parse.

* Updates the README to recommend installing npm instead of nodejs (both
  are required, and the former gets you both).

* Changes the frontend to use <html lang="en">.

Change-Id: I0ff7ebba77089e483a506e522f7fc5ba1b482e91
7 files changed
tree: fca69b46dc1aea619b566b964a5459904122fe29
  1. .dockerignore
  2. .gitignore
  6. Dockerfile
  8. Makefile
  11. backend/
  12. frontend/


fidlbolt is web app for exploring FIDL code and bytes, inspired by Matt Godbolt's Compiler Explorer.

Get started

To run a local fidlbolt server:

  1. Follow the Fuchsia: Get Started guide.
  2. Build FIDL tools: fx build host_x64/{fidlc,fidlgen_{llcpp,hlcpp,rust,go,dart}} zircon/tools.
  3. Ensure that you have Go and Node.js installed.
  4. Build and run with make run.
  5. View the app at http://localhost:8080.

If you don't want changes in the Fuchsia tree (e.g. rebuilding fidlc or changing FIDL libraries) to affect the running fidlbolt, run ./ and use make run DEPLOYMENT=1 instead.



The backend is written in Go 1.13. It uses net/http to serve static files and handle POST requests.


The frontend is written in Elm and TypeScript. It uses webpack for bundling.

To set up the frontend:

  1. Install Node.js and npm. On Debian-based systems, use sudo apt-get install npm.
  2. cd frontend && npm ci (using ci instead of install ensures a repeatable build).

Then, use one of the commands listed in npm run:

  • npm run dev: build in development mode
  • npm run watch: rebuild in development mode on every file change
  • npm run tc: typecheck TypeScript files
  • npm run lint: run eslint on TypeScript files
  • npm run fix: format and fix lint issues in TypeScript and Elm files
  • npm run build: build in production mode

The build commands read files in frontend/src/ and generate output in frontend/dist/.


If you are developing on Linux, ./ provides an easy workflow. It automatically watches code in the frontend (using npm run watch) and backend (using inotifywait), rebuilding and restarting the server as necessary. It does not perform hot/live reloading: you still need to refresh the browser manually to see changes.


Before making a CL, always run make format.


The project uses Docker for containerized deployment.

To build and run a new image locally:

  1. Install Docker. On Debian-based systems, use sudo apt-get install docker-ce.
  2. ./
  3. docker image build -t fidlbolt .
  4. docker container run --publish 8080:8080 --detach --name fb fidlbolt

You might need to use sudo with the Docker commands.