- Added support for automatically redirecting stderr to stdout of the running program with the configuration flag
redirect_stderr_to_stdout
. Added configuration variableREDIRECT_STDERR_TO_STDOUT
that can be used for setting default behaviour for every submission.- Commits: @8e6617aa
- Added configuration variable
DISALLOW_ORIGIN
that can be used for disabling CORS only for specific origins. - Added configuration variables
ALLOW_IP
andDISALLOW_IP
that can be used for allowing/disallowing only specific IP addresses that can use instance of Judge0 API.- Commits: @4fd0f34b
- Added support for built in maintenance mode that can be enabled with configuration variables
MAINTENANCE_MODE
andMAINTENANCE_MESSAGE
. In maintenance mode clients cannot create or delete submissions i.e. they cannot create new database changes.- Commits: @201221e2
- Added support for universal field
*
which returns all attributes of a submission.- Commits: @521cc2e2
- Added route
GET /statistics
which returns some basic and useful information about Judge0 API instance.- Commits: [@a24db632](https://github.com/judge0/api/commit/ a24db6326b793e093a64dea877c26402c585c680)
- Added basic support for callbacks which are called with HTTP verb
PUT
. - Added support for preseting custom files in sandbox.
- Added routes
GET /submissions/batch
andPOST /submissions/batch
batch create and show or submissions.
- Use Redis queue with name that corresponds with the current Judge0 API version. This allows multiple instances of different versions of Judge0 API to use the same Redis instance.
- Commits: @dd6b62d7
- Refactored submission field checking.
- Commits: @9acefdbc
- Fixed a bug that ignored custom setting of configuration variables
enable_per_process_and_thread_time_limit
andenable_per_process_and_thread_memory_limit
.- Commits: @a6f693a0
- Fixed a bug where cgroups flags for isolate were chosen in the wrong conditions.
- Commits: @4116b9cb
- Do not implicitly force wide open CORS settings when in development mode. I.e. variable
ALLOW_ORIGIN
can now also be used in development mode.- Commits: @a3a24c5c
- Removed output of configuration settings when server or worker starts.
- Commits: @7061de7a
- Updated all the gems except Rails to the latest versions.
- Changed default value of
enable_per_process_and_thread_memory_limit
tofalse
.- Commits: @4116b9cb
- Don't show total number of workers in
/workers
that is determined with configuration variableCOUNT
because that number is not relevant.- Commits: @99939b89
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.6.0/judge0-api-v1.6.0-https.zip
unzip judge0-api-v1.6.0-https.zip
- Change directory to
judge0-api-v1.6.0-https
:
cd judge0-api-v1.6.0-https
- Edit
docker-compose.yml
and change variablesVIRTUAL_HOST
,LETSENCRYPT_HOST
andLETSENCRYPT_EMAIL
. - Run all services and wait few seconds until everything is initialized:
docker-compose up -d db redis
sleep 10s
docker-compose up -d
sleep 5s
- Your instance of Judge0 API v1.6.0 is now available at
https://<YOUR DOMAIN>
.
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.6.0/judge0-api-v1.6.0.zip
unzip judge0-api-v1.6.0.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.6.0
docker-compose up -d db redis
sleep 10s
docker-compose up -d
sleep 5s
- Your instance of Judge0 API v1.6.0 is now available at
http://<IP ADDRESS OF YOUR SERVER>
.
- Added 30 new languages, archived 42 languages and kept active 2 languages from the last release. In total, there are now 32 active languages that can be used and all are updated to their latest versions as of the date of this release. Archived languages cannot be used anymore. Following table shows a status of every language that API supports.
ID | Name | Status |
---|---|---|
1 | Bash (4.4) | archived |
2 | Bash (4.0) | archived |
3 | Basic (fbc 1.05.0) | archived |
4 | C (gcc 7.2.0) | archived |
5 | C (gcc 6.4.0) | archived |
6 | C (gcc 6.3.0) | archived |
7 | C (gcc 5.4.0) | archived |
8 | C (gcc 4.9.4) | archived |
9 | C (gcc 4.8.5) | archived |
10 | C++ (g++ 7.2.0) | archived |
11 | C++ (g++ 6.4.0) | archived |
12 | C++ (g++ 6.3.0) | archived |
13 | C++ (g++ 5.4.0) | archived |
14 | C++ (g++ 4.9.4) | archived |
15 | C++ (g++ 4.8.5) | archived |
16 | C# (mono 5.4.0.167) | archived |
17 | C# (mono 5.2.0.224) | archived |
18 | Clojure (1.8.0) | archived |
19 | Crystal (0.23.1) | archived |
20 | Elixir (1.5.1) | archived |
21 | Erlang (OTP 20.0) | archived |
22 | Go (1.9) | archived |
23 | Haskell (ghc 8.2.1) | archived |
24 | Haskell (ghc 8.0.2) | archived |
25 | Insect (5.0.0) | archived |
26 | Java (OpenJDK 9 with Eclipse OpenJ9) | archived |
27 | Java (OpenJDK 8) | archived |
28 | Java (OpenJDK 7) | archived |
29 | JavaScript (nodejs 8.5.0) | archived |
30 | JavaScript (nodejs 7.10.1) | archived |
31 | OCaml (4.05.0) | archived |
32 | Octave (4.2.0) | archived |
33 | Pascal (fpc 3.0.0) | archived |
34 | Python (3.6.0) | archived |
35 | Python (3.5.3) | archived |
36 | Python (2.7.9) | archived |
37 | Python (2.6.9) | archived |
38 | Ruby (2.4.0) | archived |
39 | Ruby (2.3.3) | archived |
40 | Ruby (2.2.6) | archived |
41 | Ruby (2.1.9) | archived |
42 | Rust (1.20.0) | archived |
43 | Plain Text | Renamed from Text (plain text) . |
44 | Executable | Not changed. |
45 | Assembly (NASM 2.14.02) | NEW |
46 | Bash (5.0.0) | NEW |
47 | Basic (FBC 1.07.1) | NEW |
48 | C (GCC 7.4.0) | NEW |
49 | C (GCC 8.3.0) | NEW |
50 | C (GCC 9.2.0) | NEW |
51 | C# (Mono 6.6.0.161) | NEW |
52 | C++ (GCC 7.4.0) | NEW |
53 | C++ (GCC 8.3.0) | NEW |
54 | C++ (GCC 9.2.0) | NEW |
55 | Common Lisp (SBCL 2.0.0) | NEW |
56 | D (DMD 2.089.1) | NEW |
57 | Elixir (1.9.4) | NEW |
58 | Erlang (OTP 22.2) | NEW |
59 | Fortran (GFortran 9.2.0) | NEW |
60 | Go (1.13.5) | NEW |
61 | Haskell (GHC 8.8.1) | NEW |
62 | Java (OpenJDK 13.0.1) | NEW |
63 | JavaScript (Node.js 12.14.0) | NEW |
64 | Lua (5.3.5) | NEW |
65 | OCaml (4.09.0) | NEW |
66 | Octave (5.1.0) | NEW |
67 | Pascal (FPC 3.0.4) | NEW |
68 | PHP (7.4.1) | NEW |
69 | Prolog (GNU Prolog 1.4.5) | NEW |
70 | Python (2.7.17) | NEW |
71 | Python (3.8.1) | NEW |
72 | Ruby (2.7.0) | NEW |
73 | Rust (1.40.0) | NEW |
74 | TypeScript (3.7.4) | NEW |
- Added route
GET /languages/:id
for getting all attributes of specified language.- Commits: @2a31e963
- Added route
GET /languages/all
for getting a list of all languages (archived and active).- Commits: @2a31e963
- Added route
DELETE /submissions/:token
for deleting specified submission. Only authorized requests (users) are allowed to delete a submission.- Commits: @3365e3c8
- Added configuration variable
ENABLE_SUBMISSION_DELETE
with default value set tofalse
. By default you cannot delete a submission as long as this variable is set tofalse
. When set totrue
then only authorized requests (users) can delete specific submission.- Commits: @79e1de95
- Added info routes
GET /about
,GET /version
,GET /license
andGET /isolate
. Last routeGET /isolate
returns result fromisolate --version
command.- Commits: @9f5202a5
- Updated base image to
judge0/api-base:1.0.0
which uses Debian "buster" and has installed Ruby 2.7.0. - Improved handling of an server error when one or more submission attributes cannot be serialized to JSON without Base64 encoding. User now gets an error with instructions to use
base64_encoded=true
query parameter.
- Fixed example in configuration for using
ALLOW_ORIGIN
variable with multiple origins.- Commits: @21d0202a
- Fixed a bug where value of
MAX_MAX_PROCESSES_AND_OR_THREADS
was used as default value formax_processes_and_or_threads
attribute of submission, whereasMAX_PROCESSES_AND_OR_THREADS
should be used.- Commits: @563f8ea2
- Increased maximum allowed
compiler_options
andcommand_line_arguments
length to 512 characters. - Increased default value of
MAX_PROCESSES_AND_OR_THREADS
to 60.- Commits: @563f8ea2
- Increased default value of
MAX_MAX_PROCESSES_AND_OR_THREADS
to 120.- Commits: @563f8ea2
- Changed default value of
RAILS_ENV
toproduction
.- Commits: @be55ca65
- Changed default value of
INTERVAL
to 0.1.- Commits: @be55ca65
- Updated year in LICENSE.
- Commits: @679fb2ba
- Added environment variables
JUDGE0_{HOMEPAGE,SOURCE_CODE,MAINTAINER,VERSION}
. Isolate sandbox inherits these variables and they are now available for use in user code.- Commits: @9f5202a5
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.5.0/judge0-api-v1.5.0.zip
unzip judge0-api-v1.5.0.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.5.0
docker-compose up -d db redis
sleep 10s
docker-compose up -d
sleep 5s
- Your instance of Judge0 API v1.5.0 is now available at
http://<IP OF YOUR SERVER>:3000
.
- Added support for
compiler_options
andcommand_line_arguments
. - Added configuration variables
ENABLE_COMPILER_OPTIONS
,ALLOWED_LANGUAGES_FOR_COMPILER_OPTIONS
andENABLE_COMMAND_LINE_ARGUMENTS
for controlling usage of compiler options and command line arguments.
- Run compilation process for compiled languages inside sandbox and use values of limit configuration variables for controlling sandbox resources.
- Move application location from
/usr/src/api
to/api
to prevent untrusted code from reading it.- Commits: @0f1b07fe
- Don't link math library for C language by default. You now need to send
-lm
incompiler_options
.- Commits: @619a3bbe
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.4.0/judge0-api-v1.4.0.zip
unzip judge0-api-v1.4.0.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.4.0
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.4.0 is now available at
http://<IP OF YOUR SERVER>:3000
.
- Improved handling exec format error by introducing new status Exec Format Error.
- Commits: @93a60115
- Fixed bug where execution of Go code with no
main
package would induceexecve("./main"): No such file or directory
because Go compiler wouldn't createmain
binary.- Commits: @93a60115
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.3.1/judge0-api-v1.3.1.zip
unzip judge0-api-v1.3.1.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.3.1
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.3.1 is now available at
http://<IP OF YOUR SERVER>:3000
.
- Added
MAX_QUEUE_SIZE
variable that defines a maximum submission queue size. If there is a new submission request and the queue is full, then that submission will be rejected.- Commits: @a2bcdecb
- Improved worker shutdown procedure. Workers are now gracefully shutdown on
docker stop
.- Commits: @2ae0cd31
- Fixed a bug where authentication token was auto converted to integer.
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.3.0/judge0-api-v1.3.0.zip
unzip judge0-api-v1.3.0.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.3.0
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.3.0 is now available at
http://<IP OF YOUR SERVER>:3000
.
- Fixed a bug that allowed anybody to read
judge0-api.conf
file. This bug was introduced in version v1.2.1 when config was mounted into container. With this fix, config is still mounted into container but not in/usr/src/api
folder but rather in/
. Root folder is not binded in isolate sandbox, whereas/usr/src/api
is.- Commits: @121c8f9d
- Don't allow execution of scripts in
/usr/src/api
folder.- Commits: @121c8f9d
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.2.2/judge0-api-v1.2.2.zip
unzip judge0-api-v1.2.2.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.2.2
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.2.2 is now available at
http://<IP OF YOUR SERVER>:3000
.
- Improved config loading. Config can now be changed and reload just with
docker-compose restart
command.- Commits: @06fc37f1
- Fixed bug in
run-worker
script that didn't considerCOUNT
config variable.
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.2.1/judge0-api-v1.2.1.zip
unzip judge0-api-v1.2.1.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.2.1
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.2.1 is now available at
http://<IP OF YOUR SERVER>:3000
.
This image contains only The Nim Programming Language. Free public instance of this image is available on https://nim.api.judge0.com.
This image was build for the purpose of creating dedicated web playground for this language, and in the future I will add and deploy every new release of it. In the nim
branch of Judge0 API Base I will follow and install new releases of Nim, and in the nim
branch of Judge0 API I will maintain a Judge0 API that only has Nim available.
Free playground for the Nim programming language that uses Judge0 API is available at https://nim.ide.judge0.com.
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.2.0-nim0.20.0/judge0-api-v1.2.0-nim0.20.0.zip
unzip judge0-api-v1.2.0-nim0.20.0.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.2.0-nim0.20.0
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.2.0-nim0.20.0 is now available at
http://<IP OF YOUR SERVER>:3000
.
This image contains only The V Programming Language, specifically only V compiler built from commit @b00a47be. Free public instance of this image is available on https://vlang.api.judge0.com.
This image was build for the purpose of creating dedicated web playground for this new programming language, and in the future I will add and deploy every new release of it. In the vlang
branch of Judge0 API Base I will follow and install new releases of V, and in the vlang
branch of Judge0 API I will maintain a Judge0 API that only has V available.
Free playground for the V programming language that uses Judge0 API is available at https://vlang.ide.judge0.com.
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.2.0-vlang0.1.3/judge0-api-v1.2.0-vlang0.1.3.zip
unzip judge0-api-v1.2.0-vlang0.1.3.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.2.0-vlang0.1.3
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.2.0-vlang0.1.3 is now available at
http://<IP OF YOUR SERVER>:3000
.
- Added new language Executable that allows executing custom executable files.
- Commits: @0ab08351
- Added new configuration variables:
REDIS_PASSWORD
,REDIS_PORT
andPOSTGRES_PORT
.- Commits: @962d7d1d
- Improved
run-server
andrun-worker
scripts.- Commits: @e1b3564b
- Fixed
/etc/apt/sources.list
that prevented package update. - Fixed cleanup bug that didn't remove sandbox files if
tmp
directory was not empty.- Commits: @50ee4dbf
- Fixed another UTF-8 problem with Python that @nguyenvanquan7826 reported.
- Updated some gems that had security issues.
- Prepared Isolate Job for accepting custom compile flags.
- Commits: @4f2dde1f
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.2.0/judge0-api-v1.2.0.zip
unzip judge0-api-v1.2.0.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.2.0
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.2.0 is now available at
http://<IP OF YOUR SERVER>:3000
.
On @guvenim request I have built an Judge0 API image that contains just Python 3.6.8. This release also shows what changes are necessary in api-base and api when you only want to use languages that you need.
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.5-python3.6.8/judge0-api-v1.1.5-python3.6.8.zip
unzip judge0-api-v1.1.5-python3.6.8.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.5-python3.6.8
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.1.5-python3.6.8 is now available at
http://<IP OF YOUR SERVER>:3000
.
- Fixed problem with assigning compile output to submission when rerunning submission.
- Commits: @c3cd0232
- Remove unwanted newlines from compile output.
- Commits: @c3cd0232
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.5/judge0-api-v1.1.5.zip
unzip judge0-api-v1.1.5.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.5
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.1.5 is now available at
http://<IP OF YOUR SERVER>:3000
.
- Fixed problem with assigning compile output to submission when compile output is not empty.
- Commits: @22403707
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.4/judge0-api-v1.1.4.zip
unzip judge0-api-v1.1.4.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.4
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.1.4 is now available at
http://<IP OF YOUR SERVER>:3000
.
- Improved cleanup of sandbox by deleting stdin, stdout, stderr and meta file before running isolate cleanup.
- Commits: @1dcfaf98
- Fixed problem with compile output that contained invalid byte sequence in UTF-8.
- Commits: @37d46b14
- Fixed problem with submissions not changing their post-run attributes after rerun if compile error occured.
- Commits: @37d46b14
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.3/judge0-api-v1.1.3.zip
unzip judge0-api-v1.1.3.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.3
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.1.3 is now available at
http://<IP OF YOUR SERVER>:3000
.
- Improved reading from stdin and writing to stdout, stderr and meta. They are now not available in sandbox.
- Fixed writing of source code and stdin to disc, they are now written as binary files to avoid UTF-8 problems.
- Commits: @519efbea
- Fixed problem with stripping output that contained invalid byte sequence in UTF-8.
- Commits: @4c994c67
- Use
judge0/api-base:0.3.0
as base image which uses isolate@18554e83.- Commits: @350ff3a4
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.2/judge0-api-v1.1.2.zip
unzip judge0-api-v1.1.2.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.2
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.1.2 is now available at
http://<IP OF YOUR SERVER>:3000
.
- Fixed a problem when
strip
method was called on anil
class when expected output wasnil
.- Commits: @b25153e9
- Don't let worker update submission's
finished_at
attribute if it already exists. This allows Judge0 API administrators to manually rerun submissions from command line and preserve initial timestamps if some unexpected error occured.- Commits: @b25153e9
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.1/judge0-api-v1.1.1.zip
unzip judge0-api-v1.1.1.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.1
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.1.1 is now available at
http://<IP OF YOUR SERVER>:3000
.
- Added
-lm
compile flag to link with math library when compiling C source code.- Pull Requests: #60
- Added fixed time limit of 10 seconds for compilation.
- Improved procedure of seeding database with languages. Seeding is now idempotent.
- Commits: @72cff961
- Fixed versions of Postgres and Redis in Docker Compose files.
- Fixed problem with workers stopping when they lost connection with Postgres or Redis.
- Commits: @eee340b6
- Fixed problem of storing submission's stdout and stderr that contained invalid byte sequence in UTF-8.
- Commits: @ff63c1bc
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.1.0/judge0-api-v1.1.0.zip
unzip judge0-api-v1.1.0.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.1.0
docker-compose up -d
sleep 10s
This is the first production ready release of Judge0 API.
- Install Docker and Docker Compose.
- Download and extract release archive:
wget https://github.com/judge0/api/releases/download/v1.0.0/judge0-api-v1.0.0.zip
unzip judge0-api-v1.0.0.zip
- Run all services and wait few seconds until everything is initialized:
cd judge0-api-v1.0.0
docker-compose up -d
sleep 10s
- Your instance of Judge0 API v1.0.0 is now available at
http://<IP OF YOUR SERVER>:3000
.