{"id":29966727,"url":"https://github.com/oscarotero/toxojs","last_synced_at":"2026-04-17T09:31:38.502Z","repository":{"id":303493120,"uuid":"1012040121","full_name":"oscarotero/toxojs","owner":"oscarotero","description":"Minimalist JavaScript runtime","archived":false,"fork":false,"pushed_at":"2025-07-31T13:18:09.000Z","size":237,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-31T05:42:36.485Z","etag":null,"topics":["deno","javascript-runtime","web-standards"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oscarotero.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-01T18:03:44.000Z","updated_at":"2025-12-03T23:31:18.000Z","dependencies_parsed_at":"2025-07-08T01:05:38.632Z","dependency_job_id":"9aba6f98-0419-4012-bec4-87fc6cd1c2ac","html_url":"https://github.com/oscarotero/toxojs","commit_stats":null,"previous_names":["oscarotero/toxojs"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/oscarotero/toxojs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscarotero%2Ftoxojs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscarotero%2Ftoxojs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscarotero%2Ftoxojs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscarotero%2Ftoxojs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oscarotero","download_url":"https://codeload.github.com/oscarotero/toxojs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oscarotero%2Ftoxojs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31923088,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T09:10:15.403Z","status":"ssl_error","status_checked_at":"2026-04-17T09:10:14.455Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deno","javascript-runtime","web-standards"],"created_at":"2025-08-04T03:01:21.333Z","updated_at":"2026-04-17T09:31:38.481Z","avatar_url":"https://github.com/oscarotero.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TOXO\n\nMinimalist JavaScript Runtime.\n\nThis project is an experimental JavaScript runtime built as a learning exercise\nin Rust. Most of the code is based on [Deno](https://github.com/denoland/), so\nall credits belong to them.\n\n## How to use it?\n\nInstall TOXO (macOS \u0026 Linux only):\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/oscarotero/toxojs/refs/heads/main/install.sh | sh\n```\n\nRun JavaScript files:\n\n```sh\ntoxo example.js\n```\n\n## Why another runtime?\n\nThis is an experimental project created to learn Rust and explore the internals\nof Deno. The majority of the code is based on Deno, and I am deeply grateful to\nits authors for building such an impressive runtime, making it open source, and\nenabling others to create custom runtimes using their work. The goal of TOXO is\nto build a JavaScript runtime with the following design principles:\n\n### No tooling\n\nMany runtimes like Deno or Bun include built-in tools for testing, benchmarking,\nscript running, compiling, package management, formatting, and more. TOXO, on\nthe other hand, is solely a JavaScript runner. It doesn't support subcommands\n(there's no `toxo run [filename]`); you simply use `toxo [filename]`. This\ndesign choice helps keep the project focused and minimal.\n\n### No TypeScript support\n\nTypeScript is a powerful tool, but it introduces additional complexity: it\ncreates a parallel ecosystem and adds extra steps between writing and executing\nyour code. It requires configuration, supports JSX by default (which may need\nfurther setup), and relies on source maps and caching systems to manage\ncompilation and debugging. By supporting only web-standard formats that run\nnatively in the JavaScript engine, TOXO avoids this complexity: what you write\nis exactly what gets executed.\n\n### Standard imports\n\nTOXO supports modern, standard ES module imports from URLs and local files. You\ncan use import attributes to load modules as JSON, text, bytes, or even WASM\nfiles. Import maps are also supported so you can use bare imports in your code.\n[More info below](#import-supported).\n\nCommonJS modules and package registries such as NPM or JSR are not supported.\nThese systems are centralized, non-standard, and introduce vendor lock-in with\ncomplex and opaque module resolution mechanisms.\n\n### Only Web APIs\n\nTOXO implements only standard Web APIs available in browsers, enabling you to\nwrite **isomorphic** code that runs consistently across environments. There is\nno support for `node:*` modules or a global `Toxo.*` object with additional\nfeatures. [See the list below](#web-apis-supported) to know the Web APIs\nsupported currently.\n\n### No configuration file\n\nThere is no `toxo.json` or support for `package.json` file. Just as web\ntechnologies typically don't require configuration files, TOXO follows the same\nphilosophy.\n\nHowever, two files are loaded automatically if present in the same directory as\nthe main module:\n\n- `import_map.json`: If available, this file is automatically loaded and used\n  for module resolution.\n- `.env`: Environment variables can be used to change some behaviors (such as\n  the User Agent for HTTP requests or the value of `navigator.languages`). If a\n  `.env` file exists, it is automatically loaded.\n  [More info about environment variables](#environment-variables)\n\n### Vendoring by default\n\nUnlike Node, which requires running `npm install` to fetch dependencies, or\nDeno, which caches dependencies in a centralized folder, TOXO automatically\nvendors all remote dependencies in a `vendor` folder located alongside your main\nmodule. This process happens transparently and there's no need to modify module\nURLs or update your `import_map.json`. For example, a module imported from\n`https://example.com/modules/main.js` will be saved as\n`vendor/example.com/modules.main.js`. This approach enables offline execution\nand makes all dependencies easily accessible and editable.\n\nYou can disable vendoring by setting the `TOXO_VENDOR=none` environment\nvariable.\n\n### Storage folder\n\nWhen you use Web APIs like `localStorage` or `Cache`, TOXO automatically creates\nthe `storage` folder in the same directory as the main module to store this\ndata. This allows to access to this data easily. You can add this file to your\n`.gitignore` if you want to keep it local, or commit it to your repository to\nshare the stored data.\n\n## Environment variables\n\nTOXO does not require a configuration file. However, if a `.env` file is present\nin the same directory as the main module, it will be loaded automatically. You\ncan use environment variables in this file to configure certain behaviors.\n\n- `TOXO_LANGUAGES`: Comma-separated list of languages to set the values of\n  `Navigator.language` and `Navigator.languages`. Defaults to `en-US`.\n- `TOXO_USER_AGENT`: Sets the value returned by `Navigator.userAgent` and used\n  for HTTP requests when fetching modules. Defaults to `TOXO/{version}`.\n- `TOXO_VENDOR`: Set to `none` to disable the automatic vendoring.\n\n## Import supported\n\n- File imports\n- HTTP imports\n- data: imports\n- Import attributes (json, text, bytes)\n- Import maps (Place a `import_map.json` file in the same directory as the entry\n  point)\n- WASM (Import a module with the `.wasm` extension)\n\n## Web APIs supported\n\n- console\n- URL\n- URLSearchParams\n- URLPattern\n- AbortController\n- AbortSignal\n- atob\n- btoa\n- CompressionStream\n- DecompressionStream\n- DOMException\n- TextDecoder\n- TextEncoder\n- TextDecoderStream\n- TextEncoderStream\n- CloseEvent\n- CustomEvent\n- ErrorEvent\n- Event\n- EventTarget\n- MessageEvent\n- PromiseRejectionEvent\n- ProgressEvent\n- reportError\n- Blob\n- File\n- FileReader\n- ImageData\n- MessageChannel\n- MessagePort\n- structuredClone\n- Performance\n- PerformanceEntry\n- PerformanceMark\n- PerformanceMeasure\n- performance\n- ByteLengthQueuingStrategy\n- CountQueuingStrategy\n- ReadableStream\n- ReadableStreamDefaultReader\n- TransformStream\n- WritableStream\n- WritableStreamDefaultWriter\n- WritableStreamDefaultController\n- ReadableStreamDefaultController\n- ReadableStreamBYOBReader\n- ReadableStreamBYOBRequest\n- ReadableStreamDefaultController\n- TransformStreamDefaultController\n- clearInterval\n- clearTimeout\n- setInterval\n- setTimeout\n- CryptoKey\n- crypto\n- Crypto\n- SubtleCrypto\n- fetch\n- Request\n- Response\n- Headers\n- FormData\n- localStorage\n  \u003e Data stored in the `./storage/local_storage` file.\n- sessionStorage\n- WebAssembly\n- Temporal\n- Intl\n- Navigator\n- GPU\n- GPUAdapter\n- GPUAdapterInfo\n- GPUBuffer\n- GPUBufferUsage\n- GPUCanvasContext\n- GPUColorWrite\n- GPUCommandBuffer\n- GPUCommandEncoder\n- GPUComputePassEncoder\n- GPUComputePipeline\n- GPUDevice\n- GPUDeviceLostInfo\n- GPUError\n- GPUBindGroup\n- GPUBindGroupLayout\n- GPUInternalError\n- GPUPipelineError\n- GPUUncapturedErrorEvent\n- GPUPipelineLayout\n- GPUQueue\n- GPUQuerySet\n- GPUMapMode\n- GPUOutOfMemoryError\n- GPURenderBundle\n- GPURenderBundleEncoder\n- GPURenderPassEncoder\n- GPURenderPipeline\n- GPUSampler\n- GPUShaderModule\n- GPUShaderStage\n- GPUSupportedFeatures\n- GPUSupportedLimits\n- GPUTexture\n- GPUTextureView\n- GPUTextureUsage\n- GPUValidationError\n- alert\n- confirm\n- prompt\n- FileSystemHandle\n- FileSystemFileHandle\n- FileSystemDirectoryHandle\n- FileSystemWritableFileStream\n- caches\n  \u003e Data stored in the `./storage/caches` folder.\n- CacheStorage\n- Cache\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foscarotero%2Ftoxojs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foscarotero%2Ftoxojs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foscarotero%2Ftoxojs/lists"}