Changes:
- Remove github gist
- Allow subpath deployment e.g.
/rust
How to deploy:
- Write
ui/.env
like this:
PLAYGROUND_UI_ROOT=./frontend/build
# unused, write anything here
PLAYGROUND_GITHUB_TOKEN=unused
PLAYGROUND_UI_ADDRESS=0.0.0.0
PLAYGROUND_PUBLIC_URL=/rust
- Build frontend & backend:
cd compiler
./fetch.sh
cd ../ui
cargo build --release
cd frontend
PUBLIC_URL=/rust yarn build
- Run playground backend as systemd service:
[Unit]
Description=The Rust Playground
[Service]
Environment=RUST_LOG=info
WorkingDirectory=/path/to/rust-playground/ui
LimitNOFILE=65536
User=play
Group=play
ExecStart=/path/to/rust-playground/ui/target/release/ui
[Install]
WantedBy=multi-user.target
This is the home of the Rust Playground, also hosted by Integer 32.
The playground allows you to experiment with Rust before you install it locally, or in any other case where you might not have the compiler available.
It has a number of features, including:
- A nice, unobtrusive editor with syntax highlighting.
- The ability to compile in debug or release mode against the current stable, beta, or nightly version of Rust.
- The top 100 popular crates (ranked by all-time downloads), crates that are part of the Rust Cookbook and all of their dependencies are available for use!
- The ability to quickly load and save your code to a GitHub Gist and share it with your friends.
- rustfmt and Clippy can be run against the source code.
- The ability to see the LLVM IR, assembly, or Rust MIR for the source code.
A React frontend communicates with an Axum backend. Docker containers are used to provide the various compilers and tools as well as to help isolate them.
We hope that this frontend and backend stack is comfortable to potential contributors! If you are interested in contributing, please feel free to ask a question and we might even be able to point out some useful resources.
There is no network connection between the compiler container and the outside world.
The amount of memory the compiler and resulting executable use is limited by the container.
The total compilation and execution time is limited by the container.
This sandbox does not provide any disk space limits. It is suggested to run the server such that the temp directory is a space-limited. One bad actor may fill up this shared space, but it should be cleaned when that request ends.
A large set of thanks go to those individuals who have helped by reporting security holes or other attack vectors against the Playground. Each report helps us make the Playground better!
- Preliminary sandbox testing (PID limit) by Stefan O'Rear.
If you'd like to perform tests that you think might disrupt service of the Playground, get in touch and we can create an isolated clone to perform tests on! Once fixed, you can choose to be credited here.
cd ui/frontend
yarn
yarn run watch # Will rebuild and watch for changes
If you don't need the backend running because you are only making
basic HTML/CSS/JS changes, directly open in your browser the built
ui/frontend/build/index.html
.
cd ui
cargo run
There are some optional configuration parameters described in the
ui README which you may set in a .env
file. The server will
run with no configuration, but in order to load and save gists a GitHub token
must be configured.
cd compiler
./build.sh # If you want to test changes to the containers
./fetch.sh # If you just want the current playground
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) at your option.