62 languages · v2.0.0 · Apache 2.0

Run any language.
Anywhere.

A polyglot execution engine, a standalone IDE, and a one-line embeddable component. The editor below is the real product — not a screenshot. Press Run.

pip install nishachar-ide && nishachar
hello.she running in your browser

No backend. No account. Your code never leaves this tab — the first run downloads a Python runtime (~3s), then she-lang straight from PyPI.

Three places to run code. One interface.

Every backend implements the same tiny contract and returns the same result shape, so nothing above them cares which one ran. auto picks per language.

Tier 0 · Browser

WebAssembly, no backend

Python, SHE and JavaScript execute in the visitor's own tab. This is what makes an embed on a static site free to run — forever.

  • Pyodide (CPython on WASM)
  • SHE installed from PyPI at runtime
  • JS in a terminable Worker
Tier 1 · Local

Your machine, your toolchains

A subprocess against whatever you have installed. Instant, offline, and exactly right for code you wrote yourself.

  • Wall-clock timeout
  • Output byte cap
  • Whole process tree killed
Tier 2 · Docker

Locked-down containers

For code you did not write. Every one of the 62 languages, with the network cut and the filesystem read-only.

  • --network none
  • --read-only --cap-drop ALL
  • memory · CPU · PID caps

A language is data, not code.

No language has an integration written for it. Each one is a single JSON file, which is why adding your favourite is an 8-line pull request that touches no source. Click any language to load it above.

runs in your browser, no backend everything else needs nishachar serve

That's the whole integration

// languages/ruby.json
{
  "id": "ruby",
  "name": "Ruby",
  "extensions": [".rb"],
  "image": "ruby:3.3-slim",
  "run": ["ruby", "{file}"],
  "template": "puts \"Hello!\"\n"
}

Compiled languages add one field

// languages/rust.json
{
  "id": "rust",
  "extensions": [".rs"],
  "image": "rust:1-slim",
  "compile": [["rustc", "{file}", "-o", "{bin}"]],
  "run": ["{bin}"]
}

Commands are argument vectors, never shell strings — so there is no quoting to get right and nothing to inject. Full field reference →

One line. Any framework.

It is a native custom element, not a React component — so there is no React port, no Vue port and no Svelte port to keep in sync. One file works unmodified everywhere.

<!-- anywhere in your page -->
<script type="module" src="https://cdn.jsdelivr.net/npm/@nishachar/ide"></script>

<nishachar-ide language="she"></nishachar-ide>

Works in

ReactVueSvelte AngularAstroNext.js Plain HTMLWordPress ElectronTauri

Shadow DOM keeps your CSS out of the editor and the editor's CSS out of your page. Theme it with custom properties and ::part().

Drive it from JavaScript

const ide = document.querySelector('nishachar-ide');

ide.value = 'print("hi")';
ide.language = 'python';
const result = await ide.run();

ide.addEventListener('result', e =>
  console.log(e.detail.stdout));

Want all 62 languages instead of the three that run in-browser? Point it at a backend: pip install nishachar-ide && nishachar serve, then set endpoint="http://localhost:8777".

Nobody's credit card is holding this up.

Every online IDE POSTs your code to somebody's server, runs it in somebody's container, and bills it to somebody's card. That works right until the free tier ends or the maintainer loses interest. This one inverts the architecture.

01 Nothing to abuse

There is no hosted "run this code" endpoint, so there is nothing to turn into a free botnet — the failure mode that kills projects like this within days.

02 Nothing to fund

Code runs on hardware already paid for: the visitor's tab or your own machine. The demo you just used costs its maintainer exactly nothing.

03 Nothing to shut down

No central service means no service to go away. The component keeps working from a CDN, or from a copy you vendored yourself.

04 Nothing to trust

In-browser execution means your code is never transmitted anywhere. Open the network tab during a run and watch nothing happen.

The servers are free. The evenings weren't.

This project costs nothing to run, and that is deliberate — so it will still be here in five years. It did cost a lot of evenings to build. If it saved you some of yours, a coffee is a kind way to say so. Starring the repo is free and helps just as much.

Buy me a coffee

Your favourite language is probably missing.

There are thousands of programming languages. We ship 62. The gap is the point — and closing a bit of it is the easiest first contribution this project has to offer.

Add one JSON file

Create languages/<id>.json with a name, extensions, a run command and a hello-world. No source code changes.

Check it locally

nishachar run -l yourlang -c '<hello world>'

Open the pull request

CI validates every registry file against a schema, so a typo fails before a human has to spot it.