A jq playground, powered by WebAssembly.
jqkungfu was built by compiling jq to WebAssembly, so that it runs in the browser.
The advantages of this approach are:
- Speed: After the initial load time, jq queries are very fast because there are no round trips to a server
- Security: This approach runs jq within the browser; otherwise, we would need to carefully secure the app so that users can't run arbitrary commands on the server!
- Convenience: The app is purely front-end and is hosted as static files on a cloud storage provider
To launch jqkungfu locally:
python3 -m http.server 9999
Then open http://localhost:9999 in your browser.
To compile jq to WebAssembly, run the compile.sh
code within an environment that includes Emscripten.
To set up your environment:
# Make sure to use "--recursive" so the jq submodule is initialized
$ git clone --recursive https://github.com/robertaboukhalil/jqkungfu.git
# Build the Docker image with needed dependencies
$ docker buildx build -t jqkungfu .
# Compile to WebAssembly
$ docker run --rm -it -v .:/src --entrypoint ./compile.sh jqkungfu
This app is part of an example built for my book Level up with WebAssembly. Check it out if you're interested in more details, or to learn how to create similar applications.