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
No backend. No account. Your code never leaves this tab — the first run downloads a
Python runtime (~3s), then she-lang straight from PyPI.
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.
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.
A subprocess against whatever you have installed. Instant, offline, and exactly right for code you wrote yourself.
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 ALLNo 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.
nishachar serve
// languages/ruby.json { "id": "ruby", "name": "Ruby", "extensions": [".rb"], "image": "ruby:3.3-slim", "run": ["ruby", "{file}"], "template": "puts \"Hello!\"\n" }
// 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 →
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>
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().
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".
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.
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.
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.
No central service means no service to go away. The component keeps working from a CDN, or from a copy you vendored yourself.
In-browser execution means your code is never transmitted anywhere. Open the network tab during a run and watch nothing happen.
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.
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.
Create languages/<id>.json with a name, extensions, a run command and a hello-world. No source code changes.
nishachar run -l yourlang -c '<hello world>'
CI validates every registry file against a schema, so a typo fails before a human has to spot it.