HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
endojs
endo
JavaScript2021–2026
endojs / endo

endo

Endo is a distributed secure JavaScript sandbox, based on SES

15Distinct people
20Mentions
0Explicit recommenders
1.1KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Endo is a distributed secure JavaScript sandbox, based on SES

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year20 dated mentions

Observed mentions: 2021-11-06 07:48:05 UTC to 2026-08-20 03:58:10 UTC.

02468102021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments20212022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 10 mentions; 0 submissions, 10 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20232024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC303
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC10010
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC202
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC101
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC110
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC312

What Hacker News says

20 sources
In case you have not come across this it might be helpful: MetaMask Snaps does something like Cloudflare OS's iframe sandbox, but it does aim to be suitable as a sandbox against malicious code. Something of a security audit was published here: https://osec.io/blog/metamask-snaps/ Execution environment code here: https://github.com/MetaMask/snaps/tree/main/packages/snaps-e... As it says in that readme, "sandboxed using Secure EcmaScript (SES)": https://github.com/endojs/endo/tree/master/packages/ses (which you might be familiar with, as it is a project of Endo, which Mark Miller helps lead)
In Extensible Software in the age of LLMs
Broken promise 1 (Automatically generating CHANGELOGs) is spot on, especially in a monorepo with multiple released artifacts. A single commit could be a breaking change in one package and refactor in another. But the changelog tools see one commit and include it in both changelogs. Another issue is that once the commit lands on trunk, you can’t revise the entry without editing history. You have to remember to fix it after the changelog is generated. Changesets (https://github.com/changesets/changesets) is a much better approach. We adopted it in Endo (https://github.com/endojs/endo/tree/master/.changeset) and it’s been a clear improvement.
In Conventional Commits encourages focus on the wrong things
gulgdev·Mar 28, 2025Submission

Ask HN: A new approach to JavaScript sandboxing

Hello, HN! I wanted to share my thoughts about sandboxing and ask for an advice. I've been developing and researching JS sandboxes for several years now, because all existing solutions that I've found aren't the ones that I need. I am working on a project that allows devs to easily develop multiplayer web-games and host them for free. Som I need a sandbox that would both provide great security and good experience for developers. I've been using SES (https://github.com/endojs/endo/tree/master/packages/ses), but there's a problem in this approach: while it is very good for securing your application, it doesn't really provide a good developing experience because a lot of JS projects don't like being in such a restricted environment (SES freezes all globals and intrinsics). After doing some research, I've concluded that most of the web sandbo
Read the rest
xes use one of the following approaches: they either use a WebWorkers or sandboxed iframes. That sounds good but both approaches have their downsides. When you use WebWorkers, you can't really provide an API to a developer, because the only way you can communicate with a WebWorker is by using postMessage. While you could inject a host code that would wrap postMessage function to create some good-looking API, it isn't possible to make something advanced, because of the prototype injection. With iframes, you can inject your API safely into contentWindow, by wrapping it using iframe's realm intrinsics. But iframes can freeze the whole app, for example, by creating an infinite loop. There's also OOPIF but they have the same problem as WebWorkers. So, I came up with an idea that sort of combines the two approaches by creating a separate process with multiple realms in it. Sadly, there's no way to create a new ES realm in a WebWorker, so I'm bound to using OOPIFs. The current architecture is inspired by Electron's process model (https://www.electronjs.org/docs/latest/tutorial/process-model): the app that uses sandboxing creates a new process (box) and specifies a script that would be ran in that process (host script). That script can communicate with the main app and access a separate realm (user world) and inject it's API into it. However, while implementing this kind of sandbox, I came across one big downside: it's hard to deploy an app that uses this sandboxing method, because it requires the use of out-of-process iframes, which must be cross-origin to be places in a separate process. So, I can't, for example, create a demo on GH pages. And I wanted to ask, is there a way to create an out-of-process iframe without requiring the server to serve the HTML file from a different subdomain? I've looked into using ServiceWorkers with Origin-Agent-Cluster header, but it didn't really work. Thanks! P.S. This is my first post on HN, idk if this is the right place to ask
1 points · Open discussion
I used E in the 90s: http://erights.org/ I haven't kept up with newer systems but I've heard of https://github.com/endojs/endo and just came across http://reports-archive.adm.cs.cmu.edu/anon/home/anon/isr2017... (which says "in the style of the E programming language" -- that's as far as I've read) while looking that up. WebAssembly was designed to follow the same capability security principles. CHERI too as someone else just brought up. Yet another newer capability system in progress -- I don't know what it can do today or if it tackles this particular problem but it sounds cool: https://spritelyproject.org/
In Malicious libraries can steal all your application secrets in Elixir
Yea you could restrict the app by whitelisting only the network services and folders that it will use and that's pretty valuable though at least on Linux could already easily be achieved otherwise. It's good that Deno makes it easy but let's be honest, most people will just pass -A. I'd love to see a permissions system on a library basis. It would ask the first time a dependency is added and when a new permission is requested after an update. Javascript doesn't make that easy though by being so dynamic. SES could maybe help: https://github.com/endojs/endo/blob/master/packages/ses/READ...
In Deno 1.26 Release Notes
> Deno adds permissions per dependency Another project heading in that direction is also an anagram of Node: "The foundation of Endo is SES, a tamper-proof JavaScript environment that allows safe execution of arbitrary programs in Compartments. ... Endo uses LavaMoat to automatically generate reviewable policies that determine what capabilities will be distributed to third party dependencies. https://github.com/endojs/endo
In The De-obfuscated Protestware code from node-ipc that wiped Russian computers
There is a proposal to add OCaps on a language level in TC39[0]. There is a drop-in implementation which already works in both Nodejs and browsers[1]. As a developer who wants to sandbox your own (recursive) dependencies, this is wrapped and made accessible today in Lavamoat[2]. Basically a package or app can provide a policy manifest specifying which capabilities (e.g. network or filesystem access) should be granted for each sandboxed dependency. Also comes with a tool that will auto-generate a starting point from your existing dependency tree. IMO this is the future. Currently Lavamoat does come with a performance penalty but hopefully this idea will catch on and make it into language runtime implementations. Lavamoat is still marked as "preprod" on npm but talking to the original author, the API is practically stable and it will shortl
Read the rest
In NPM package compromised by author: erases files on RU / BY computers on install

Showing the 15 most recent of 20 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.