{"id":17856824,"url":"https://github.com/blastlauncher/blast","last_synced_at":"2026-03-07T13:32:32.045Z","repository":{"id":79379590,"uuid":"579028091","full_name":"BlastLauncher/blast","owner":"BlastLauncher","description":"An experimental launcher that supports Raycast launcher extensions","archived":false,"fork":false,"pushed_at":"2025-06-13T09:25:49.000Z","size":5096,"stargazers_count":43,"open_issues_count":31,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-14T17:12:13.435Z","etag":null,"topics":["launcher","pnpm","raycast","react","react-reconciler","react-renderer","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BlastLauncher.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2022-12-16T13:32:32.000Z","updated_at":"2025-04-28T05:32:05.000Z","dependencies_parsed_at":"2025-02-21T14:19:48.883Z","dependency_job_id":"4bf8be93-ff8b-42cb-b796-c96203a680bf","html_url":"https://github.com/BlastLauncher/blast","commit_stats":{"total_commits":277,"total_committers":1,"mean_commits":277.0,"dds":0.0,"last_synced_commit":"e08cbbd84d7526c22d7d6ddc20b9c249d25292a8"},"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/BlastLauncher/blast","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlastLauncher%2Fblast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlastLauncher%2Fblast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlastLauncher%2Fblast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlastLauncher%2Fblast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BlastLauncher","download_url":"https://codeload.github.com/BlastLauncher/blast/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlastLauncher%2Fblast/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260589692,"owners_count":23032937,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["launcher","pnpm","raycast","react","react-reconciler","react-renderer","typescript"],"created_at":"2024-10-28T03:09:31.312Z","updated_at":"2026-03-07T13:32:32.007Z","avatar_url":"https://github.com/BlastLauncher.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blast Launcher (aka C8763)\n\n**Update**: I wrote [an introduction post](https://yukai.dev/blog/2023/08/22/launching-blast-from-poc-to-01) for Blast Launcher.\n\nBlast is an open-source educational and experimental project that aims to\nutilize the extension ecosystem of [Raycast Launcher](https://raycast.com)\n\nRaycast is a SaaS software, while providing paid subscription services for teams,\nfor personal is copmletely free. You can also extend your workflow by building\nextensions on your own. The extensions are implemented using custom React\ncomponents(`@raycast/api`), and each command within an extension can be thought\nof as a separate React application. I think that's the magic of Raycast, where\neveryone can easily build and integrate their own tools without much effors on\ntop of the huge Node.js and React.js ecosystem.\n\nWhile Raycast is great, it is a closed-source software and the extension ecosystem\ncan only be used in Raycast. So here's where this project comes in.\n\nBlast provides an open-source React renderer to render these Raycast extensions.\n\n\u003c!--toc:start--\u003e\n- [Blast Launcher (aka C8763)](#blast-launcher-aka-c8763)\n  - [Demo](#demo)\n  - [Architecture](#architecture)\n  - [Basic usage](#basic-usage)\n    - [Install](#install)\n    - [Usage](#usage)\n  - [Development](#development)\n  - [Debugging](#debugging)\n    - [See runtime logs](#see-runtime-logs)\n    - [Debugging runtime with React DevTools](#debugging-runtime-with-react-devtools)\n  - [Inspiration and related projects](#inspiration-and-related-projects)\n  - [FAQs](#faqs)\n    - [Why naming blast?](#why-naming-blast)\n    - [Why C8763?](#why-c8763)\n  - [Links](#links)\n  - [License](#license)\n\u003c!--toc:end--\u003e\n\n## Demo\n\n![demo_todo](./docs/media/demo_todo.gif)\n\n## Architecture\n\nBlast uses the following components:\n\n- Node.js to write the backend and implement a custom React renderer with `react-reconciler`\n- Electron \u0026 React.js to write the front end and render the React element tree as HTML\n- Use `rpc-websockets` to communicate between the backend and front end\n\nIn the architecture of Blast, the backend uses Node.js and the `react-reconciler` package to implement a custom React renderer. The element tree created during this process is then emitted as a JSON object tree to the front end, which is an Electron app built with React.js and rendered as HTML. While the front end is built with React, it is also framework agnostic as it can accept the plain JSON element tree from the backend.\n\nFor higher performance, a custom renderer such as React-native may send operations to the host app to build a shadow element tree alongside the renderer. However, Blast was designed for educational and experimental purposes and therefore emits the entire element tree as JSON during the resetAfterCommit phase, which is called every time the component is updated. This is less performant but sufficient for the needs of this project as the component tree is not complex and high performance is not required.\n\nYou can learn more about the blast architecture in the following documents:\n\n- [`@blastlauncher/renderer`](./packages/blast-renderer/README.md): The custom React renderer\n- [`@blastlauncher/runtime`](./packages/blast-runtime/README.md): The backend and runtime application, which is also a React.js app\n- [`@blastlauncher/api`](./packages/blast-api/README.md): Polyfill for the Raycast API\n- [`@blastlauncher/cli`](/packages/blast-cli/README.md): A CLI tool that manage to build/publish raycast extension to blast compatible module. Really much alike the ray-cli tool.\n\n\n## Basic usage\n\n### Install\n\n- Download the latest version of Blast from the [release page](https://github.com/Blastlauncher/blast/releases)\n- Unzip the downloaded file and move the Blast app to the Applications folder\n- **Note:** On macOS, you may need to allow the app to be opened in \"System Preferences\"\n  - or right click on the Blast app and select \"Open\" to open the app\n  - If it doesn't show up in the context menu, do it again.\n\nAfter opening the Blast app, it will ask to install Node.js runtime. Just click \"Install\" and wait for the installation to complete. It downloads node.js and extract it to `~/.blast/node`.\n\n### Usage\n\nThe shortcut key to open the Blast window is `⌘;`, \u003ckbd\u003eCommand\u003c/kbd\u003e + \u003ckbd\u003e;\u003c/kbd\u003e. It will be configurable in the future.\n\n## Development\n\n```bash\n# Make sure you have pnpm installed, then install dependencies with pnpm\npnpm install\n\n# Start build\n# You'll need to run pnpm run build for the first time\npnpm run watch\n\n# Start front end in dev mode\npnpm run start:client\n```\n\n## Debugging\n\n### See runtime logs\n\n```bash\ntail -f ~/.blast/logs/runtime.log\ntail -f ~/.blast/logs/runtime.err.log\n```\n\n### Debugging runtime with React DevTools\n\nJust run:\n\n```bash\npnpm react-devtools\n```\n\nThen start the application(The devtool must be run before the application started). It should automatically connect to the React DevTools.\n\n![react-devtools](./docs/media/react_dev_tools.png)\n\n## Inspiration and related projects\n\n- [SunbeamLauncher](https://github.com/SunbeamLauncher/sunbeam): A frontend agnostic Launcher app, written in Go, and you can write extensions in any language.\n- [⌘K, cmdk](https://github.com/pacocoursey/cmdk): A React.js Component to build Launcher app UI. The front end of Blast is based on this project. The author also provided several launcher themes, such as Linear, Raycast and Vercel,but they are only for demo purposes so you need to modify them to use.\n- [Sittly Launcher](https://github.com/JulianKominovic/sittly-launcher): Another project inspired by raycast! I discovered it while regularly searching for projects with the \"raycast\" keyword on GitHub. 😂 Oops, sorry for the early spoiler.\n\n## FAQs\n\n### Why naming blast?\n\nOur Chief Marketing Officer(nickname ChatGPT) gave me this idea.\n\nI was asking him/her/it to come up with words similar to \"raycast\".\n\n### Why C8763?\n\n![星爆臉素材](http://i.imgur.com/7SXzUno.png)\n\nBlast（爆破）應該滿星爆的吧！但星爆氣流斬原文是 starburst stream。算了。\n\n## Links\n\n- Resources to learn how to build a custom React Renderer\n  - Jam Risser – [Building a Custom React Renderer](https://www.youtube.com/watch?v=SXx-CymMjDM)\n    - and the example code: \u003chttps://github.com/clayrisser/create-react-renderer\u003e\n  - [ReactDOM Reconciler Host config](https://github.com/facebook/react/blob/main/packages/react-dom-bindings/src/client/ReactDOMHostConfig.js)\n- About Blast\n  - Blast Launcher introduction post(Written in Chinese): [Blast：一個能執行 Raycast 擴充功能的 React.js 渲染器](https://yukai.dev/blog/2023/01/02/blast-the-raycast-extension-react-renderer)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblastlauncher%2Fblast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblastlauncher%2Fblast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblastlauncher%2Fblast/lists"}