{"id":30647773,"url":"https://github.com/tryandromeda/andromeda","last_synced_at":"2026-05-09T23:26:17.903Z","repository":{"id":249357571,"uuid":"831266888","full_name":"tryandromeda/andromeda","owner":"tryandromeda","description":"JS runtime lolz","archived":false,"fork":false,"pushed_at":"2026-04-19T05:50:02.000Z","size":1919,"stargazers_count":811,"open_issues_count":22,"forks_count":26,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-04-19T06:28:20.841Z","etag":null,"topics":["andromeda","data-oriented-design","javascript","javascript-runtime","js","nova","object-oriented-programming","runtime","rust","ts","typescript"],"latest_commit_sha":null,"homepage":"https://tryandromeda.dev/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tryandromeda.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"tryandromeda"}},"created_at":"2024-07-20T04:55:48.000Z","updated_at":"2026-04-19T04:42:11.000Z","dependencies_parsed_at":"2025-06-03T00:43:55.764Z","dependency_job_id":"13d54cc6-ae50-4def-af4c-2130e3fd0b67","html_url":"https://github.com/tryandromeda/andromeda","commit_stats":null,"previous_names":["load1n9/andromeda","tryandromeda/andromeda"],"tags_count":60,"template":false,"template_full_name":null,"purl":"pkg:github/tryandromeda/andromeda","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tryandromeda%2Fandromeda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tryandromeda%2Fandromeda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tryandromeda%2Fandromeda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tryandromeda%2Fandromeda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tryandromeda","download_url":"https://codeload.github.com/tryandromeda/andromeda/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tryandromeda%2Fandromeda/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32280982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"ssl_error","status_checked_at":"2026-04-25T18:29:32.149Z","response_time":59,"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":["andromeda","data-oriented-design","javascript","javascript-runtime","js","nova","object-oriented-programming","runtime","rust","ts","typescript"],"created_at":"2025-08-31T05:01:38.417Z","updated_at":"2026-04-26T00:04:58.080Z","avatar_url":"https://github.com/tryandromeda.png","language":"Rust","funding_links":["https://github.com/sponsors/tryandromeda"],"categories":["Applications","Rust","Runtimes"],"sub_categories":[],"readme":"# Andromeda\n\n\u003ca href=\"https://github.com/tryandromeda/andromeda\"\u003e\u003cimg align=\"right\" src=\"./assets/andromeda.svg\" alt=\"Andromeda\" width=\"150\"/\u003e\u003c/a\u003e\n\n[![Discord Server](https://img.shields.io/discord/1264947585882259599.svg?logo=discord\u0026style=flat-square)](https://discord.gg/tgjAnX2Ny3)\n\n**A modern, fast(eventually), and secure JavaScript \u0026 TypeScript runtime** built from the\nground up in [Rust 🦀](https://www.rust-lang.org/) and powered by\n[Nova Engine](https://trynova.dev/) and [Oxc](https://oxc.rs).\n\n[Andromeda](https://github.com/tryandromeda/andromeda) provides **zero-config\nTypeScript support**, **rich Web APIs**, and **native performance** - making it\nperfect for scripts, utilities, and applications that need to run fast without\nthe complexity of traditional Node.js setups.\n\nJoin our [Discord community](https://discord.gg/tgjAnX2Ny3) to discuss ideas and\nget involved!\n\n## Key Features\n\n- **Zero-configuration TypeScript** - Run `.ts` files directly, no\n  transpilation needed\n- **Import Maps** - Modern module resolution with bare specifiers and CDN\n  integration\n**Built-in HTTP Server** - Create web servers and APIs with minimal configuration\n- **GPU-Accelerated Canvas** - Hardware-accelerated 2D Canvas API with WGPU\n  backend and PNG export\n- **Web Crypto API** - Industry-standard cryptographic primitives\n- **SQLite Support** - Built-in support for SQLite databases\n- **File System Access** - Simple APIs for reading/writing files\n- **Web Storage** - localStorage and sessionStorage APIs for data persistence\n- **Native Performance** - Rust-powered execution with Nova's optimized JS\n  engine\n- **Developer Tools** - Interactive REPL, code formatter, single-file\n  compilation, and performance profiling with hotpath\n- **Performance Profiling** - Integrated hotpath profiler for identifying\n  bottlenecks and optimizing runtime performance for andromeda development\n- **Web Standards** - TextEncoder/Decoder, Performance API, and more\n- **Extensible** - Modular architecture with optional features\n- **Self-Updating** - Built-in upgrade system to stay current with latest\n  releases\n- **Shell Integration** - Auto-completion support for bash, zsh, fish, and\n  PowerShell\n\n## Standards \u0026 Compatibility\n\nAndromeda aims to be **[WinterTC](https://wintertc.org/)** compliant, ensuring\ninteroperability and compatibility with the broader JavaScript ecosystem.\nWinterTC provides a test suite for JavaScript engines to ensure they conform to\nECMAScript standards and common runtime behaviors.\n\n\u003e **Note:** ⚠️ Andromeda is in active development. While functional, it's not\n\u003e yet recommended for production use.\n\n## Quick Start\n\n### Installation\n\nPlatform specific instructions:\n\nLinux/Mac:\n\n```sh\ncurl -fsSL https://tryandromeda.dev/install.sh | bash\n```\n\nWindows (PowerShell):\n\n```sh\nirm -Uri \"https://tryandromeda.dev/install.ps1\" | Invoke-Expression\n```\n\nWindows (CMD):\n\n```sh\ncurl -L -o install.bat https://tryandromeda.dev/install.bat \u0026\u0026 install.bat\n```\n\nInstall Andromeda using Cargo:\n\n```sh\ncargo install --git https://github.com/tryandromeda/andromeda andromeda\n```\n\nInstall Andromeda using winget:\n\n```sh\nwinget install --id Andromeda.Andromeda\n```\n\n### Running Code\n\nExecute JavaScript or TypeScript files directly:\n\n```sh\n# Run a TypeScript file (no compilation needed!)\nandromeda run hello.ts\n\n# Run multiple files\nandromeda run script1.js script2.ts\n\n# Run with verbose output\nandromeda run --verbose my-script.ts\n```\n\n### Example: Hello World with Canvas\n\n```ts\n// Create a simple drawing\nconst canvas = new OffscreenCanvas(400, 300);\nconst ctx = canvas.getContext(\"2d\")!;\n\nctx.fillStyle = \"#ff6b6b\";\nctx.fillRect(50, 50, 100, 100);\n\nctx.fillStyle = \"#4ecdc4\";\nctx.beginPath();\nctx.arc(200, 150, 50, 0, Math.PI * 2);\nctx.fill();\n\n// Save as PNG\ncanvas.saveAsPng(\"output.png\");\nconsole.log(\"Image saved to output.png\");\n```\n\n### Example: Standard Library\n\n```ts\nimport { Queue } from \"https://tryandromeda.dev/std/collections/mod.ts\";\nimport { flatten } from \"https://tryandromeda.dev/std/data/mod.ts\";\n\nconst queue = new Queue();\nqueue.enqueue(\"first\");\nqueue.enqueue(\"second\");\nconsole.log(queue.dequeue());\nconsole.log(queue.size);\n\nconsole.log(flatten([[1, 2], [3, [4, 5]]], 1));\nconsole.log(flatten([[1, 2], [3, [4, 5]]], 2));\n```\n\n## Core APIs\n\n### File System\n\n```ts\n// Read and write files synchronously\nconst content = Andromeda.readTextFileSync(\"input.txt\");\nAndromeda.writeTextFileSync(\"output.txt\", content.toUpperCase());\n\n// and asynchronously\nconst contentAsync = await Andromeda.readTextFile(\"input.txt\");\nawait Andromeda.writeTextFile(\"output.txt\", contentAsync.toUpperCase());\n\n// Access environment variables\nconst home = Andromeda.env.get(\"HOME\");\nAndromeda.env.set(\"MY_VAR\", \"value\");\n```\n\n### Canvas \u0026 Graphics\n\n```ts\n// Create graphics programmatically\nconst canvas = new OffscreenCanvas(800, 600);\nconst ctx = canvas.getContext(\"2d\")!;\n\n// Draw with full Canvas 2D API\nctx.fillStyle = \"linear-gradient(45deg, #f093fb, #f5576c)\";\nctx.fillRect(0, 0, 800, 600);\n\n// Export to PNG\ncanvas.saveAsPng(\"artwork.png\");\n```\n\n### Web Storage\n\n```ts\n// localStorage and sessionStorage APIs\nlocalStorage.setItem(\"user-preference\", \"dark-mode\");\nconst preference = localStorage.getItem(\"user-preference\");\nconsole.log(\"Stored items:\", localStorage.length);\n\n// Session storage for temporary data\nsessionStorage.setItem(\"session-id\", crypto.randomUUID());\nconst sessionId = sessionStorage.getItem(\"session-id\");\n```\n\n### Cryptography\n\n```ts\n// Generate secure random values\nconst uuid = crypto.randomUUID();\nconst randomBytes = crypto.getRandomValues(new Uint8Array(32));\n\n// Hash data\nconst data = new TextEncoder().encode(\"Hello, World!\");\nconst hash = await crypto.subtle.digest(\"SHA-256\", data);\n```\n\n### Performance Monitoring\n\n```ts\n// High-precision timing\nconst start = performance.now();\nawait someAsyncOperation();\nconst duration = performance.now() - start;\n\n// Performance marks and measures\nperformance.mark(\"operation-start\");\nawait doWork();\nperformance.mark(\"operation-end\");\nperformance.measure(\"total-time\", \"operation-start\", \"operation-end\");\n```\n\n### Database Operations\n\n```ts\nconst db = new Database(\":memory:\");\n\nconst stmt = db.prepare(\"INSERT INTO users (name, email) VALUES (?, ?)\");\nstmt.run(\"Alice\", \"alice@example.com\");\n\nconst users = db.prepare(\"SELECT * FROM users\").all();\nconsole.log(users);\n\ndb.close();\n```\n\n## Developer Experience\n\n### Interactive REPL\n\nAndromeda includes a powerful REPL with enhanced developer experience:\n\n```sh\n# Start the interactive REPL\nandromeda repl\n```\n\n**REPL Features:**\n\n- **Advanced Syntax Highlighting** - TypeScript-aware coloring with keyword\n  recognition\n- **Smart Multiline Input** - Automatic detection of incomplete syntax\n  (functions, objects, etc.)\n- **Performance Metrics** - Execution timing for every evaluation\n- **Command History** - Navigate through previous commands with arrow keys\n- **Built-in Commands** - `help`, `history`, `clear`, `gc`, `exit`\n- **Auto-completion** - Context-aware suggestions for JavaScript/TypeScript\n\n### Code Formatting\n\nFormat TypeScript and JavaScript files with the built-in formatter:\n\n```sh\n# Format specific files\nandromeda fmt script.ts utils.js\n\n# Format entire directories\nandromeda fmt src/ examples/\n\n# Format current directory\nandromeda fmt\n```\n\n### Single-File Compilation\n\nCompile your scripts into standalone executables:\n\n```sh\n# Create a single-file executable\nandromeda compile my-script.ts my-app.exe\n\n# Run the compiled executable directly\n./my-app.exe\n```\n\n### Language Server Protocol (LSP)\n\nAndromeda includes a built-in Language Server that provides real-time\ndiagnostics and linting capabilities for JavaScript and TypeScript files in your\neditor:\n\n```sh\n# Start the Language Server (typically called by your editor)\nandromeda lsp\n```\n\n**LSP Features:**\n\n- **Real-time Diagnostics** - Live error reporting as you type\n- **Comprehensive Linting** - 5 built-in rules for code quality:\n  - Empty function detection\n  - Empty statement detection\n  - Variable usage validation\n  - Unreachable code detection\n  - Invalid syntax highlighting\n- **Multi-file Support** - Workspace-wide analysis\n- **Rich Error Messages** - Detailed explanations with code context\n- **Editor Integration** - Works with VS Code, Neovim, and other LSP-compatible\n  editors\n\nConfigure your editor to use `andromeda lsp` as the language server for\nJavaScript and TypeScript files to get instant feedback on code quality.\n\n### Shell Integration\n\nGenerate completion scripts for your shell:\n\n```sh\n# Auto-detect shell and generate completions\nandromeda completions\n\n# Generate for specific shells\nandromeda completions bash \u003e /etc/bash_completion.d/andromeda\nandromeda completions zsh \u003e ~/.zsh/completions/_andromeda\nandromeda completions fish \u003e ~/.config/fish/completions/andromeda.fish\nandromeda completions powershell \u003e $PROFILE/andromeda.ps1\n```\n\n### Self-Updating\n\nKeep Andromeda up to date with the built-in upgrade system:\n\n```sh\n# Upgrade to latest version\nandromeda upgrade\n\n# Force reinstall current version\nandromeda upgrade --force\n\n# Upgrade to specific version\nandromeda upgrade --version 0.1.0-draft-49\n\n# Preview what would be upgraded\nandromeda upgrade --dry-run\n```\n\n### Task System\n\nAndromeda includes a powerful task system inspired by Deno, allowing you to define and run custom scripts and workflows directly from your configuration file.\n\n#### Defining Tasks\n\nTasks are defined in your `andromeda.json`, `andromeda.toml`, or `andromeda.yaml` configuration file:\n\n```json\n{\n  \"tasks\": {\n    \"dev\": \"andromeda run src/main.ts\",\n    \"build\": \"echo Building project...\",\n    \"test\": \"andromeda run tests/main.ts\",\n  }\n}\n```\n\n#### Running Tasks\n\n```sh\n# List all available tasks\nandromeda task\n\n# Run a specific task\nandromeda task dev\nandromeda task build\nandromeda task test\n```\n\n## Architecture \u0026 Extensions\n\nAndromeda is built with a modular architecture, allowing features to be enabled\nor disabled as needed:\n\n### Runtime Extensions\n\n| Extension         | Description                   | APIs Provided                                                                  |\n| ----------------- | ----------------------------- | ------------------------------------------------------------------------------ |\n| **Canvas**        | GPU-accelerated 2D graphics   | `OffscreenCanvas`, `CanvasRenderingContext2D`, `ImageBitmap` with WGPU backend |\n| **Crypto**        | Web Crypto API implementation | `crypto.subtle`, `crypto.randomUUID()`, `crypto.getRandomValues()`             |\n| **Console**       | Enhanced console output       | `console.log()`, `console.error()`, `console.warn()`                           |\n| **Fetch**         | HTTP client capabilities      | `fetch()`, `Request`, `Response`, `Headers`                                    |\n| **File System**   | File I/O operations           | `Andromeda.readTextFileSync()`, `Andromeda.writeTextFileSync()`, directory ops |\n| **Local Storage** | Web storage APIs              | `localStorage`, `sessionStorage` with persistence                              |\n| **Process**       | System interaction            | `Andromeda.args`, `Andromeda.env`, `Andromeda.exit()`                          |\n| **SQLite**        | Database operations           | `Database`, prepared statements, transactions                                  |\n| **Time**          | Timing utilities              | `performance.now()`, `setTimeout()`, `setInterval()`, `Andromeda.sleep()`      |\n| **URL**           | URL parsing and manipulation  | `URL`, `URLSearchParams`                                                       |\n| **Web**           | Web standards                 | `TextEncoder`, `TextDecoder`, `navigator`, `queueMicrotask()`                  |\n| **Window** *(optional)* | Native OS windowing (winit) | `Andromeda.Window`, `Andromeda.createWindow()`, DOM-style events, `rawHandle()` |\n\n### Window extension (optional, behind `window` feature)\n\nThe `window` feature adds `Andromeda.Window` — a native OS window backed by\n[`winit`](https://crates.io/crates/winit) on macOS, Windows, and Linux\n(X11/Wayland). Inspired by [`deno-windowing/dwm`](https://github.com/deno-windowing/dwm),\nthe class extends `EventTarget` and dispatches DOM-style events (`resize`,\n`close`, `keydown`, `keyup`, `mousemove`, `mousedown`, `mouseup`).\n\n```ts\nconst win = Andromeda.createWindow({ title: \"Hello\", width: 640, height: 480 });\nwin.addEventListener(\"keydown\", (e) =\u003e {\n  if ((e as CustomEvent).detail.code === \"Escape\") win.close();\n});\nawait Andromeda.Window.mainloop();\n```\n\nEnable the feature:\n\n```bash\ncargo run --features window -- run examples/window.ts\n```\n\n`window.rawHandle()` returns a `{ system, windowHandle, displayHandle, width, height }`\nobject compatible with `Deno.UnsafeWindowSurface` for future WebGPU-surface bridges.\n\nWhen the `canvas` feature is also enabled, `window.presentCanvas(canvas)` blits an\n`OffscreenCanvas`'s latest frame into the window via a shared wgpu device — no CPU\nreadback, any size allowed. `examples/window.ts` demonstrates a live 2D scene streamed\nfrom an `OffscreenCanvas` into a winit-backed window. `examples/breakout.ts` is a\nkeyboard-driven Breakout clone exercising the full window + canvas input/render pipeline.\n\n## Andromeda Satellites\n\n**Satellites** are minimal, purpose-built executables designed for containerized environments and microservice architectures. Each satellite focuses on a single capability, providing smaller container images, faster startup times, and better resource utilization.\n\n### Available Satellites\n\n- **andromeda-run** - Execute JavaScript/TypeScript in production containers\n- **andromeda-compile** - Compile JS/TS to executables\n- **andromeda-fmt** - Format code\n- **andromeda-lint** - Lint code for quality issues\n- **andromeda-check** - Type-check TypeScript\n- **andromeda-bundle** - Bundle and minify code\n\n## Crates\n\n| Crate                             | Description                                    |\n| --------------------------------- | ---------------------------------------------- |\n| [**andromeda**](/cli)             | Command-line interface and developer tools     |\n| [**andromeda-core**](/core)       | Core runtime engine and JavaScript execution   |\n| [**andromeda-runtime**](/runtime) | Runtime extensions and Web API implementations |\n\n## Contributing\n\nAndromeda is an open-source project and welcomes contributions! Whether you're\ninterested in:\n\n- **Bug fixes** - Help improve stability\n- **New features** - Add runtime capabilities\n- **Documentation** - Improve guides and examples\n- **Testing** - Expand test coverage\n\nJoin our [Discord community](https://discord.gg/tgjAnX2Ny3) to discuss ideas and\nget involved!\n\n## License\n\n[Mozilla Public License Version 2.0](./LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftryandromeda%2Fandromeda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftryandromeda%2Fandromeda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftryandromeda%2Fandromeda/lists"}