Installations
npm install @endo/captp
Developer Guide
Typescript
No
Module System
ESM
Node Version
18.19.0
NPM Version
lerna/8.1.8/node@v18.19.0+x64 (darwin)
Score
84.4
Supply Chain
89.7
Quality
91.4
Maintenance
100
Vulnerability
99.6
License
Releases
Contributors
Languages
JavaScript (99.85%)
TypeScript (0.12%)
Shell (0.03%)
Love this project? Help keep it running — sponsor us today! 🚀
Developer
endojs
Download Statistics
Total Downloads
415,880
Last Day
1,451
Last Week
7,909
Last Month
26,191
Last Year
197,710
GitHub Statistics
Apache-2.0 License
860 Stars
6,147 Commits
75 Forks
27 Watchers
411 Branches
49 Contributors
Updated on Feb 18, 2025
Bundle Size
60.21 kB
Minified
19.64 kB
Minified + Gzipped
Package Meta Information
Latest Version
4.4.4
Package Id
@endo/captp@4.4.4
Unpacked Size
80.16 kB
Size
25.80 kB
File Count
26
NPM Version
lerna/8.1.8/node@v18.19.0+x64 (darwin)
Node Version
18.19.0
Published on
Jan 24, 2025
Total Downloads
Cumulative downloads
Total Downloads
415,880
Last Day
13.7%
1,451
Compared to previous day
Last Week
44.3%
7,909
Compared to previous week
Last Month
55.5%
26,191
Compared to previous month
Last Year
117.6%
197,710
Compared to previous year
Daily Downloads
Weekly Downloads
Monthly Downloads
Yearly Downloads
Dev Dependencies
5
Endo
Endo is a framework for powerful JavaScript plugin systems and supply chain attack resistance. Endo includes tools for confinement, communication, and concurrency. These include a shim for Hardened JavaScript, an ECMA TC-39 standards track proposal to make JavaScript a safer and more suitable platform for plugin systems.
Agoric and MetaMask rely on Hardened JavaScript and the SES shim as part of systems that sandbox third-party plugins or smart contracts and mitigate supply chain attacks for production web applications, web extensions, and build systems.
Endo protects program integrity both in-process and in distributed systems. Hardened JavaScript protects local integrity, defending an application against supply chain attacks: hacks that enter through upgrades to third-party dependencies. Endo does this by encouraging the Principle of Least Authority.
Since most JavaScript libraries receive powerful capabilities from global
objects like fetch
or modules like net
, LavaMoat generates reviewable
policies that determine what capabilities will be distributed to third party
dependencies according to evident need, and enforces those policies at runtime
with Endo.
For distributed systems, Endo stretches object oriented programming over networks using asynchronous message passing to remote objects with the Handled Promise API and a Capability Transfer Protocol.
Between remote objects and Hardened JavaScript compartments, Endo makes distributed programs easy to program, and easy to reason about integrity. CapTP frees the programmer from needing to create bespoke communication protocols over message ports or byte streams.
Endo combines these components to demonstrate their use for a confined plugin system in the Endo Pet-name Dæmon and its CLI.
Please join the conversation on our Mailing List and Matrix. Reach out if you would like an ivitation to our meetings:
- We record a weekly Endo Sync video call .
- We recorded a weekly SES video call with the Hardened JavaScript engineering community.
- We now meet weekly with ECMA TC-39 ECMAScript Technical Committee TG-3 Security Working Group.
Ruminations on the Name
- In Greek, "endo-" means "internal" or "within". This is fitting because Endo runs Node within a safe sandbox. This is fitting in turn because Endo is built on the legacy of Google Caja. In Spanish, "caja" means "box" and is related to the Latin word "capsum" and English "capsule", as in "encapsulate".
- Endo is an anagram of Node and Deno. That is to say, we are not Done yet.
- The
endo
command, like thesudo
command, is a "do" command. However, instead of escalating privilege, it attenuates privilege. - Endo lets applications endow packages with limited powerful objects and modules. As they say, you can't spell "endow" without "endo"!
- So, "E.N.Do" forms the acronym "Encapsulated Node Do".
So, just as "soo-doo" (super user do) and "soo-doh" (like "pseudo") are valid
pronunciations of sudo
, "en-doh" and "en-doo" are both valid pronunciations of
endo
.
Principle of Least Authority
The Principle of Least Authority (Wikipedia) states that a software component should only have access to data and resources that enable it to do its legitimate work.
PoLA explained in 3 minutes: Opening Statement on SOSP 50th Anniversary Panel, Mark Miller:
PoLA explained in 15 minutes: Navigating the Attack Surface to achieve a multiplicative reduction in risk, Mark Miller:
Bug Disclosure
Please help us practice coordinated security bug disclosure, by using the instructions in our security guide to report security-sensitive bugs privately.
For non-security bugs, please use the regular Issues page.
License
Endo and its components are Apache 2.0 licensed.

No vulnerabilities found.
Reason
30 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10
Reason
all changesets reviewed
Reason
no dangerous workflow patterns detected
Reason
license file detected
Details
- Info: project has a license file: LICENSE:0
- Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0
Reason
security policy file detected
Details
- Info: security policy file detected: SECURITY.md:1
- Info: Found linked content: SECURITY.md:1
- Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1
- Info: Found text in security policy: SECURITY.md:1
Reason
no binaries found in the repo
Reason
project is fuzzed
Details
- Info: JavaScriptPropertyBasedTesting integration found: packages/marshal/test/encodePassable.test.js:5
- Info: JavaScriptPropertyBasedTesting integration found: packages/marshal/test/rankOrder.test.js:5
- Info: JavaScriptPropertyBasedTesting integration found: packages/patterns/test/copySet.test.js:3
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
detected GitHub workflow tokens with excessive permissions
Details
- Warn: no topLevel permission defined: .github/workflows/browser-test.yml:1
- Warn: no topLevel permission defined: .github/workflows/ci.yml:1
- Warn: no topLevel permission defined: .github/workflows/depcheck.yml:1
- Info: topLevel 'contents' permission set to 'read': .github/workflows/typedoc-gh-pages.yml:12
- Info: no jobLevel write permissions found
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
- Warn: 0 commits out of 30 are checked with a SAST tool
Reason
dependency not pinned by hash detected -- score normalized to 0
Details
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/browser-test.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/browser-test.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/browser-test.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/browser-test.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/browser-test.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/browser-test.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:158: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:164: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:194: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:200: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:230: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:236: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:276: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:285: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:304: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:330: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:81: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:121: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:127: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/ci.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/depcheck.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/depcheck.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/depcheck.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/depcheck.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/typedoc-gh-pages.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/typedoc-gh-pages.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/typedoc-gh-pages.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/typedoc-gh-pages.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/typedoc-gh-pages.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/typedoc-gh-pages.yml/master?enable=pin
- Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/typedoc-gh-pages.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/endojs/endo/typedoc-gh-pages.yml/master?enable=pin
- Info: 0 out of 25 GitHub-owned GitHubAction dependencies pinned
- Info: 1 out of 1 npmCommand dependencies pinned
Reason
17 existing vulnerabilities detected
Details
- Warn: Project is vulnerable to: GHSA-h5c3-5r3r-rr8q
- Warn: Project is vulnerable to: GHSA-rmvr-2pp2-xj38
- Warn: Project is vulnerable to: GHSA-xx4v-prfh-6cgc
- Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg
- Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x
- Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c
- Warn: Project is vulnerable to: GHSA-ghr5-ch3p-vcr6
- Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv
- Warn: Project is vulnerable to: GHSA-6fx8-h7jm-663j
- Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm
- Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw
- Warn: Project is vulnerable to: GHSA-6jg8-7333-554w
- Warn: Project is vulnerable to: GHSA-whpx-q3rq-w8jc
- Warn: Project is vulnerable to: GHSA-9c4h-3f7h-322r
- Warn: Project is vulnerable to: GHSA-25hc-qcg6-38wj
- Warn: Project is vulnerable to: GHSA-cqmj-92xf-r6r9
- Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q
Score
6.2
/10
Last Scanned on 2025-02-17
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More