blob: c3a03d7a7f8cb68b3a462be0af833d3b1fa311a8 [file] [log] [blame] [view]
# fidlbolt
fidlbolt is web app for exploring FIDL code and bytes, inspired by Matt Godbolt's [Compiler Explorer][godbolt].
## Get started
To run a local fidlbolt server:
1. Follow the [Fuchsia: Get Started][fuchsia] guide.
2. Build FIDL tools: `fx build host_x64/{fidlc,fidlgen_{cpp,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 `./prepare_deployment.sh` and use `make run DEPLOYMENT=1` instead.
## Contributing
### Backend
The backend is written in Go. It uses [net/http][] to serve static files and handle POST requests.
### Frontend
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/`.
### Workflow
If you are developing on Linux, `./watch.sh` 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.
### Style
Before making a CL, always run `make format`.
## Deployment
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. `./prepare_deployment.sh`
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.
[Docker]: https://www.docker.com/
[Elm]: https://elm-lang.org/
[Go]: https://golang.org/
[Node.js]: https://nodejs.org/
[npm]: https://www.npmjs.com/get-npm
[TypeScript]: https://www.typescriptlang.org/
[fuchsia]: https://fuchsia.dev/fuchsia-src/getting_started
[godbolt]: https://godbolt.org/
[net/http]: https://golang.org/pkg/net/http/
[webpack]: https://webpack.js.org/