In principle, any programming language can be used with Elody.
However, as this website is still in its beta phase, only Python has official library support. You could still upload programs in other languages if you want to, but you will have to take care of the input/output mappings yourself.
All uploaded Programs are wrapped in a Docker Image, and are run as isolated Containers.
The Docker Image of a Container is started, run, and then stopped each time the Program is executed. You can not keep the Container running. If you run a Program twice, this results in two separate instances of your Docker Image being run. (This may be optimized later, but it works this way for now for security reasons)
When the Docker Image is run, the Container receives data from Elody in the folder "/lod", and Elody expects the response in that same folder. We provide libraries to ensure that you can easily parse these inputs and outputs from within Docker.
If your Program uses Files as inputs, those files are copied and the copies are made available to the Docker Container.
It is not possible to change a File once it has been created, for security reasons.
This may be changed later. We are still weighing the pros and cons of this.
The Docker Container is given network access to any domains listed in the DOMAINS.txt file of the Docker Image. This file should list the domains, or the shortcut full_internet_access. The rules for giving internet access to a program are the same as those for giving internet access to an HTML Message, and are described here under external_domains. The user is asked to give permission before anything happens that accesses the internet.
Supported Programming Languages
You can display any arbitrary HTML code to the user by using a html_message_component. The documentation of this element explains the details: html_message_component
You can even embed entire external websites into Elody in this way.
You can use the library 'lod', as shown in the examples of the tutorial.
Documentation for this library can be found here.
This library supports Python 2.7 and Python 3 and above.