1<!doctype html> 2<html> 3 <head> 4 <link rel="icon" type="image/x-icon" href="favicon.ico"> 5 <link rel="stylesheet" href="style.css" /> 6 <link 7 rel="stylesheet" 8 href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" 9 /> 10 <title>Interpret Esolangs Online</title> 11 </head> 12 <body> 13 <meta charset="UTF-8" /> 14 <meta name="viewport" content="width=device-width,initial-scale=1.0" /> 15 <!-- PyScript CSS --> 16 <link 17 rel="stylesheet" 18 href_="https://pyscript.net/releases/2025.5.1/core.css" 19 id="pyscss" 20 /> 21 <!-- This script tag bootstraps PyScript --> 22
22<script 23 type="module" 24 src_="https://pyscript.net/releases/2025.5.1/core.js" 25 id="pysjs" 26 ></script>
26 27 <button 28 class="right" 29 onclick=" 30 (document.documentElement.classList.toggle('dark-mode'), 31 document.getElementById('mode').classList.toggle('fa-sun'), 32 document.getElementById('mode').classList.toggle('fa-moon'), 33 localStorage.setItem( 34 'mode', 35 localStorage.getItem('mode') == 'dark' ? 'light' : 'dark', 36 )) 37 " 38 > 39 <i id="mode" class="fa fa-sun"></i> 40 </button> 41 <h2 style="display:none" id="aug16"></h2> 42 <h3>Welcome to Interpret Esolangs Online</h3> 43 <p> 44 Interpret Esolangs Online allows you to run programs in various esoteric 45 languages, including brainfuck, Deadfish, etc. 46 </p> 47 <!-- Script for python execution --> 48
48<script defer src="pyexec.js"></script>
48 49 <!-- Load WASM modules --> 50
50<script defer src="brain-crack/bc_em.js"></script>
50 51
51<script defer src="ibf/ibf_em.js"></script>
51 52
52<script> 53 document.addEventListener("DOMContentLoaded", async function () { 54 window.wasmReady = Promise.all([createBrainFlak(), createIBF()]).then( 55 ([brainFlakModule, ibfModule]) => { 56 window.BrainFlakModule = brainFlakModule; 57 window.IBFModule = ibfModule; 58 }, 59 ); 60 }); 61 </script>
61 62 <!-- Script for esolangs --> 63
63<script defer src="abcdxyz.js"></script>
63 64
64<script defer src="actionlang.js"></script>
64 65
65<script defer src="alphuck.js"></script>
65 66
66<script defer src="aplwsi.js"></script>
66 67
67<script defer src="arithmetic.js"></script>
67 68
68<script defer src="b2c.js"></script>
68 69
69<script defer src="befunge.js"></script>
69 70
70<script defer src="bfp2.js"></script>
70 71
71<script defer src="brainalpha.js"></script>
71 72
72<script defer src="brainfeed.js"></script>
72 73
73<script defer src="brainflak.js"></script>
73 74
74<script defer src="brainfuck.js"></script>
74 75
75<script defer src="bx.js"></script>
75 76
76<script defer src="ccccc.js"></script>
76 77
77<script defer src="chicken.js"></script>
77 78
78<script defer src="dead_fish.js"></script>
78 79
79<script defer src="deadfish.js"></script>
79 80
80<script defer src="deadfisht.js"></script>
80 81
81<script defer src="galax.js"></script>
81 82
82<script defer src="gofe.js"></script>
82 83
83<script defer src="hello.js"></script>
83 84
84<script defer src="hellopp.js"></script>
84 85
85<script defer src="hq9p.js"></script>
85 86
86<script defer src="hworld.js"></script>
86 87
87<script defer src="ibf.js"></script>
87 88
88<script defer src="kipple.js"></script>
88 89
89<script defer src="lstackg.js"></script>
89 90
90<script defer src="methemetics.js"></script>
90 91
91<script defer src="nil.js"></script>
91 92
92<script defer src="no.js"></script>
92 93
93<script defer src="nope.js"></script>
93 94
94<script defer src="ooocode.js"></script>
94 95
95<script defer src="ork.js"></script>
95 96
96<script defer src="plusintminus.js"></script>
96 97
97<script defer src="plusorminus.js"></script>
97 98
98<script defer src="plusintoutput.js"></script>
98 99
99<script defer src="plusoroutput.js"></script>
99 100
100<script defer src="poetic.js"></script>
100 101
101<script defer src="print.js"></script>
101 102
102<script defer src="quine.js"></script>
102 103
103<script defer src="rbf.js"></script>
103 104
104<script defer src="reversefuck.js"></script>
104 105
105<script defer src="six.js"></script>
105 106
106<script defer src="slet.js"></script>
106 107
107<script defer src="smbf.js"></script>
107 108
108<script defer src="smbf_sharp.js"></script>
108 109
109<script defer src="text.js"></script>
109 110
110<script defer src="trigbf.js"></script>
110 111
111<script defer src="trigbf_improved.js"></script>
111 112
112<script defer src="typeid.js"></script>
112 113
113<script defer src="underload.js"></script>
113 114
114<script defer src="wee.js"></script>
114 115
115<script defer src="wte_teplw.js"></script>
115 116
116<script defer src="wizzcake.js"></script>
116 117
117<script defer src="wizzcakep.js"></script>
117 118 <code id="pysout" style="display: none"></code> 119 <code id="pyserr" style="display: none"></code> 120 <select id="lang"> 121 <option>6</option> 122 <option>ABCDXYZ</option> 123 <option>ActionLang</option> 124 <option>Alphuck</option> 125 <option>APLWSI</option> 126 <option>Arithmetic</option> 127 <option>B2C</option> 128 <option>Befunge-93</option> 129 <option>Brain-Flak (Add 'a' before code to enable ASCII mode)</option> 130 <option>Brainfuck+2</option> 131 <option>Brainalpha</option> 132 <option>!!brainfeed</option> 133 <option>brainfuck</option> 134 <option>Brainfuck extended</option> 135 <option>ccc:cc (Add 'v' before code to enable verbose mode)</option> 136 <option>Chicken</option> 137 <option>><x></option> 138 <option>Deadfish</option> 139 <option>Deadfish~</option> 140 <option>âº*&«&^</option> 141 <option>Gofe</option> 142 <option>Hello</option> 143 <option>Hello++</option> 144 <option>HQ9+</option> 145 <option>HWorld</option> 146 <option>Immutable Brainfuck</option> 147 <option>Kipple</option> 148 <option><stack></option> 149 <option>Methemetics</option> 150 <option>Nil</option> 151 <option>No.</option> 152 <option>Nope.</option> 153 <option>oOo CODE</option> 154 <option>ORK</option> 155 <option>PlusIntMinus</option> 156 <option>PlusIntOutput</option> 157 <option>PlusOrMinus</option> 158 <option>PlusOrOutput</option> 159 <option>Poetic</option> 160 <option>pRINT</option> 161 <option>Quine</option> 162 <option>Random Brainfuck</option> 163 <option>ReverseFuck</option> 164 <option>Self-modifying Brainfuck</option> 165 <option>Self-modifying Brainfuck#</option> 166 <option>SLet</option> 167 <option>Text</option> 168 <option>Trigbf</option> 169 <option>Trigbf improved</option> 170 <option>Typeid</option> 171 <option>Underload</option> 172 <option>Weeeeeeeeeeeeeeeeeeeeeeeeeeeeee</option> 173 <option> 174 Welcome to Esolang, the esoteric programming languages wiki! 175 </option> 176 <option>Wizzcake</option> 177 <option>Wizzcake+</option> 178 </select> 179
179<script> 180 if (localStorage.getItem("mode") === null) { 181 localStorage.setItem("mode", "light"); 182 } 183 if (localStorage.getItem("mode") === "dark") { 184 document.documentElement.classList.add("dark-mode"); 185 document.getElementById("mode").classList.add("fa-moon"); 186 document.getElementById("mode").classList.remove("fa-sun"); 187 } 188 if(new Date().getMonth()===7&&new Date().getDate()===16){ 189 document.getElementById("aug16").style.display="block"; 190 document.getElementById("aug16").style.color='red'; 191 document.getElementById("aug16").innerText=`Interpret Esolangs Online is ${new Date().getFullYear() - 2023} years old today!`; 192 } 193 document.addEventListener("DOMContentLoaded", function () { 194 window.run = async function () { 195 var funcs = {}; 196 var langname = document.getElementById("lang").value; 197 var code = document.getElementById("program").value; 198 var input = document.getElementById("input").value; 199 if ( 200 langname === "Brain-Flak (Add 'a' before code to enable ASCII mode)" || 201 langname === "Immutable Brainfuck" 202 ) { 203 await window.wasmReady; 204 } 205 funcs["\u203a*&\u00ab&^"] = galax; 206 funcs["6"] = six; 207 funcs["ABCDXYZ"] = abcdxyz; 208 funcs["ActionLang"] = actionlang; 209 funcs["Alphuck"] = alphuck; 210 funcs["APLWSI"] = aplwsi; 211 funcs["Arithmetic"] = arithmetic; 212 funcs["B2C"] = b2c; 213 funcs["Befunge-93"] = befunge; 214 funcs["Brainfuck+2"] = bfp2; 215 funcs["Brainalpha"] = brainalpha; 216 funcs["!!brainfeed"] = brainfeed; 217 funcs["Brain-Flak (Add 'a' before code to enable ASCII mode)"] = brainflak; 218 funcs["brainfuck"] = brainfuck; 219 funcs["Brainfuck extended"] = bx; 220 funcs["ccc:cc (Add 'v' before code to enable verbose mode)"] = ccccc; 221 funcs["Chicken"] = chicken; 222 funcs["><x>"] = dead_fish; 223 funcs["Deadfish"] = deadfish; 224 funcs["Deadfish~"] = deadfisht; 225 funcs["Gofe"] = gofe; 226 funcs["Hello"] = hello; 227 funcs["Hello++"] = hellopp; 228 funcs["HQ9+"] = hq9p; 229 funcs["HWorld"] = hworld; 230 funcs["Immutable Brainfuck"] = ibf;
231 funcs["Kipple"] = kipple; 232 funcs["<stack>"] = lstackg; 233 funcs["Methemetics"] = methemetics; 234 funcs["Nil"] = nil; 235 funcs["No."] = no; 236 funcs["Nope."] = nope; 237 funcs["ORK"] = ork; 238 funcs["oOo CODE"] = ooocode; 239 funcs["PlusIntMinus"] = plusintminus; 240 funcs["PlusIntOutput"] = plusintoutput; 241 funcs["PlusOrMinus"] = plusorminus; 242 funcs["PlusOrOutput"] = plusoroutput; 243 funcs["Poetic"] = poetic; 244 funcs["pRINT"] = print; 245 funcs["Quine"] = quine; 246 funcs["Random Brainfuck"] = rbf; 247 funcs["ReverseFuck"] = reversefuck; 248 funcs["Self-modifying Brainfuck"] = smbf; 249 funcs["Self-modifying Brainfuck#"] = smbf_sharp; 250 funcs["SLet"] = slet; 251 funcs["Text"] = text; 252 funcs["Trigbf"] = trigbf; 253 funcs["Trigbf improved"] = trigbf_improved; 254 funcs["Typeid"] = typeid; 255 funcs["Underload"] = underload; 256 funcs["Weeeeeeeeeeeeeeeeeeeeeeeeeeeeee"] = wee; 257 funcs[ 258 "Welcome to Esolang, the esoteric programming languages wiki!" 259 ] = wte_teplw; 260 funcs["Wizzcake"] = wizzcake; 261 funcs["Wizzcake+"] = wizzcakep; 262 var func = funcs[langname]; 263 document.getElementById("log").value = ""; 264 const s = new Date().getTime(); 265 var erroc = false, 266 f = false;
267 try { 268 var output = func(code, input); 269 if (output === undefined) f = true; 270 } catch (err) { 271 document.getElementById("log").value = err.message + "\n"; 272 erroc = true; 273 } 274 const e = new Date().getTime(); 275 if (!f) { 276 if (erroc) { 277 document.getElementById("log").value = 278 document.getElementById("log").value + 279 `Program terminates in ${e - s} ms and raises an error.`; 280 document.getElementById("output").value = ''; 281 } else { 282 document.getElementById("log").value = 283 document.getElementById("log").value + 284 `Program terminates in ${e - s} ms successfully.`; 285 document.getElementById("output").value = output; 286 } 287 } 288 }; 289 window.upload = function () { 290 var ev = window.event || event; 291 var file = ev.target.files[0]; 292 var reader = new FileReader(); 293 reader.onload = function () { 294 document.getElementById("program").value = reader.result; 295 }; 296 reader.readAsText(file); 297 }; 298 window.store = function () { 299 var link = document.createElement("a"); 300 link.setAttribute( 301 "href", 302 "data:text/plain;charset=utf-8," + 303 encodeURIComponent(document.getElementById("program").value), 304 ); 305 link.setAttribute( 306 "download", 307 "program-" + Math.floor(Math.random() * 1000000000) + ".txt", 308 ); 309 link.click(); 310 }; 311 window.create_link = function () { 312 var prog = encodeURIComponent( 313 document.getElementById("program").value, 314 ) 315 .replaceAll("=", "_") 316 .replaceAll("+", "@") 317 .replaceAll("/", "$"); 318 var input = encodeURIComponent(document.getElementById("input").value) 319 .replaceAll("=", "_") 320 .replaceAll("+", "@") 321 .replaceAll("/", "$"); 322 var lang = encodeURIComponent(document.getElementById("lang").value) 323 .replaceAll("=", "_") 324 .replaceAll("+", "@") 325 .replaceAll("/", "$"); 326 var urlname = 327 window.location.href.split("#")[0] + 328 "#" + 329 btoa(lang + "\x00" + prog + "\x00" + input); 330 var encoded = btoa(urlname) 331 .replaceAll("=", "_") 332 .replaceAll("+", "@") 333 .replaceAll("/", "$"); 334 var link = document.createElement("a"); 335 link.setAttribute("href", "link.html#" + encoded); 336 link.setAttribute("target", "_blank"); 337 link.click(); 338 }; 339 if (!window.location.hash) { 340 // old permalink encoding method 341 var args = new URLSearchParams(window.location.search); 342 var flag = 0; 343 if (args.has("lang")) { 344 document.getElementById("lang").value = atob( 345 args 346 .get("lang") 347 .replaceAll("_", "=") 348 .replaceAll("@", "+") 349 .replaceAll("$", "/"), 350 ); 351 flag = 1; 352 } 353 if (args.has("code")) { 354 document.getElementById("program").value = atob( 355 args 356 .get("code") 357 .replaceAll("_", "=") 358 .replaceAll("@", "+") 359 .replaceAll("$", "/"), 360 ); 361 flag = 1; 362 } 363 if (args.has("input")) { 364 document.getElementById("input").value = atob( 365 args 366 .get("input") 367 .replaceAll("_", "=") 368 .replaceAll("@", "+") 369 .replaceAll("$", "/"), 370 ); 371 flag = 1; 372 } 373 if (flag) { 374 run(); 375 } 376 } else { 377 if (window.location.hash.slice(1)) { 378 var debase64 = atob( 379 window.location.hash 380 .slice(1) 381 .replaceAll("_", "/") 382 .replaceAll("-", "+"), 383 ).split("\x00"); 384 document.getElementById("lang").value = decodeURIComponent( 385 debase64[0], 386 ); 387 document.getElementById("program").value = decodeURIComponent( 388 debase64[1], 389 ); 390 document.getElementById("input").value = decodeURIComponent( 391 debase64[2], 392 ); 393 run(); 394 } 395 } 396 }); 397 </script>
397 398 <br /> 399 <textarea id="program" cols="80" rows="20" placeholder="code"></textarea> 400 <textarea id="input" cols="80" rows="20" placeholder="input"></textarea> 401 <textarea 402 id="output" 403 cols="80" 404 rows="20" 405 readonly 406 placeholder="output" 407 ></textarea> 408 <textarea 409 id="log" 410 cols="80" 411 rows="20" 412 readonly 413 placeholder="log" 414 ></textarea> 415 <br /> 416 <button onclick="run()" title="Executes the program">Run</button> 417 <button 418 onclick="create_link()" 419 title="Creates a permanent link that can later be used to execute the same program" 420 > 421 Create permanent link 422 </button> 423 <button onclick="store()" title="Download the program as a text file"> 424 Download code as text file 425 </button> 426 <input 427 type="file" 428 onchange="upload()" 429 title="Upload a local file to the webpage" 430 /> 431 <br /> 432 <a href="https://github.com/none-None1/Interpret-Esolangs-Online" 433 >The source code</a 434 > 435 of this webpage. 436 <br /> 437 <a href="contribute.html">Contribution Guide</a> 438 <hr /> 439 <a href="about.html">About</a> 440 <br /> 441 <small>The whole project is licensed under <a href="http://creativecommons.org/publicdomain/zero/1.0/">CC0-1.0</a>.</small> 442 <br /> 443 <small>Your code is executed locally and is never uploaded anywhere.</small> 444 </body> 445</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.