Embeddabl consists of two components: an web widget that can be embedded into web pages and a server-side solution that deals with everything related to executing user-provided code. Internals of code execution are hidden from the end user and instead of copying text back and forth, it requires only a single click to run the code while not having to leave the web page.
Embeddabl's API is used by another project that accelerates and simplifies the grading process of programming assignments.
Motivation
- Copying code between browser and the host system is inconvenient, especially if multiple files are involved.
- The code may depend on many other programs that the user might not have installed or lacks skills to install.
Technologies used
Front-end
- Node.js
- Vue web framework
- Vuex for state management
- Webpack module bundler
- Babel to transpile ES6 to ES5
- Websockets for real-time communication
- Ace code editor
- Sass
Back-end
- AWS
- Linux
- Node.js to create HTTP and WebSockets API
- LXC containers to execute untrusted code in an isolated environment
- BTRFS copy-on-write filesystem
- OverlayFS to efficiently create LXC containers from a base image
- Python to create a BTRFS manager script
- Redis as a message queue
- systemd to manage services