-
Notifications
You must be signed in to change notification settings - Fork 5.9k
Add kill-it-with-fire extension #26596
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
tjlotz
wants to merge
4
commits into
raycast:main
Choose a base branch
from
tjlotz:ext/kill-it-with-fire
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| { | ||
| "root": true, | ||
| "extends": [ | ||
| "@raycast" | ||
| ] | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| # Dependencies | ||
| node_modules/ | ||
|
|
||
| # Raycast build output | ||
| .ray/ | ||
|
|
||
| # OS files | ||
| .DS_Store | ||
| Thumbs.db | ||
|
|
||
| # Editor & IDE | ||
| .vscode/ | ||
| .idea/ | ||
| *.swp | ||
| *.swo | ||
| *~ | ||
|
|
||
| # Logs | ||
| *.log | ||
| npm-debug.log* |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| # Kill It With Fire Changelog | ||
|
|
||
| ## [Initial Release] - {PR_MERGE_DATE} | ||
| - Full-screen flame animation via native macOS transparent overlay. | ||
| - Canvas particle system with flame and smoke particles. | ||
| - Fire grows from the bottom of the screen to midscreen over ~3 seconds. | ||
| - Smoke rises from the flame front to the top of the viewport. | ||
| - Click-through overlay — interact with your apps while it burns. | ||
| - Auto-close after ~6 seconds. | ||
| - Raycast "no-view" command: search **"Kill It With Fire!"** and press Enter. | ||
| - Swift overlay source with build script (`scripts/build-overlay.sh`). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,63 @@ | ||
| # Contributing to Kill It With Fire 🔥 | ||
|
|
||
| Thanks for your interest in contributing! This project is a fun Raycast extension that sets your screen on fire, and contributions of all kinds are welcome. | ||
|
|
||
| ## Getting Started | ||
|
|
||
| ### Prerequisites | ||
|
|
||
| - **macOS** (required — the overlay relies on native macOS APIs) | ||
| - **Node.js** ≥ 18 | ||
| - **Xcode Command Line Tools** (`xcode-select --install`) | ||
| - **Raycast** installed on your Mac | ||
|
|
||
| ### Setup | ||
|
|
||
| ```bash | ||
| git clone https://github.com/tylerlotz/raycast-kill-it-with-fire.git | ||
| cd raycast-kill-it-with-fire | ||
| npm install # installs deps + compiles the Swift overlay binary | ||
| npm run dev # starts the Raycast dev server | ||
| ``` | ||
|
|
||
| Open Raycast and search for **"Kill It With Fire!"** to test. | ||
|
|
||
| ## Project Structure | ||
|
|
||
| | Path | Purpose | | ||
| |------|---------| | ||
| | `src/kill-it-with-fire.tsx` | Raycast command entry point | | ||
| | `swift/overlay.swift` | Native macOS overlay (transparent window + WebView) | | ||
| | `assets/flame.html` | Self-contained flame animation (loaded by the overlay) | | ||
| | `scripts/build-overlay.sh` | Compiles the Swift source into `assets/overlay` | | ||
|
|
||
| ## Development Workflow | ||
|
|
||
| 1. **Modify the flame animation** → Edit `assets/flame.html`. Reload from Raycast to see changes. | ||
| 2. **Modify the overlay window** → Edit `swift/overlay.swift`, then run `npm run build-overlay` to recompile. | ||
| 3. **Modify the Raycast command** → Edit `src/kill-it-with-fire.tsx`. The dev server (`npm run dev`) picks up changes automatically. | ||
|
|
||
| ## Submitting Changes | ||
|
|
||
| 1. Fork the repository and create a feature branch from `main`. | ||
| 2. Make your changes with clear, descriptive commits. | ||
| 3. Test locally via `npm run dev` in Raycast. | ||
| 4. Open a pull request against `main`. | ||
|
|
||
| ## Code Style | ||
|
|
||
| - **TypeScript** (Raycast command): Follow the existing Raycast ESLint config. Run `npm run lint` before submitting. | ||
| - **Swift** (overlay): Keep it minimal — the overlay is intentionally a single-file CLI. | ||
| - **JavaScript** (flame engine): Use JSDoc comments for public APIs. | ||
|
|
||
| ## Reporting Issues | ||
|
|
||
| Found a bug or have a feature idea? [Open an issue](https://github.com/tylerlotz/raycast-kill-it-with-fire/issues) with: | ||
|
|
||
| - macOS version | ||
| - Raycast version | ||
| - Steps to reproduce (if applicable) | ||
|
|
||
| ## License | ||
|
|
||
| By contributing, you agree that your contributions will be licensed under the [MIT License](LICENSE). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| MIT License | ||
|
|
||
| Copyright (c) 2026 Tyler Lotz | ||
|
|
||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
|
|
||
| The above copyright notice and this permission notice shall be included in all | ||
| copies or substantial portions of the Software. | ||
|
|
||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| SOFTWARE. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,102 @@ | ||
| # Raycast Kill It With Fire | ||
| Kill it with fire! Set your screen on fire and watch it burn. A chaotic alternative to Raycast's confetti. | ||
|
|
||
| [Raycast](https://raycast.com) has confetti. That's nice. But what do you do when you need to express your frustration? | ||
|
|
||
| Kill It With Fire is a chaotic alternative to Raycast's confetti for when you need to **kill something with fire!** | ||
|
|
||
| ## Features | ||
|
|
||
| - **Full-screen transparent overlay** — renders on top of your desktop and all apps | ||
| - **Growing flame wall** — fire rises from the bottom to midscreen over ~3 seconds | ||
| - **Billowing smoke** — smoke particles float from the flame front to the top of the viewport | ||
| - **Click-through** — interact with your apps while the screen burns | ||
| - **Lightweight** — canvas particle system with zero runtime dependencies | ||
| - **Auto-close** — the overlay disappears after ~6 seconds | ||
|
|
||
| ## Install | ||
|
|
||
| ### From the Raycast Store | ||
|
|
||
| Search for **"Kill It With Fire"** in the Raycast Store and click Install. | ||
|
|
||
| ### From Source | ||
|
|
||
| > **Requirements:** macOS 12+, Node.js ≥ 18, Xcode Command Line Tools | ||
|
|
||
| ```bash | ||
| git clone https://github.com/tylerlotz/raycast-kill-it-with-fire.git | ||
| cd raycast-kill-it-with-fire | ||
| npm install # installs deps + compiles the Swift overlay binary | ||
| npm run dev # starts the Raycast dev server | ||
| ``` | ||
|
|
||
| Open Raycast → search **"Kill It With Fire!"** → press Enter. | ||
|
|
||
| ## How It Works | ||
|
|
||
| The extension has two main pieces: | ||
|
|
||
| 1. **Raycast command** (`src/kill-it-with-fire.tsx`) — a "no-view" command that spawns the native overlay binary as a detached child process. | ||
| 2. **Native macOS overlay** (`swift/overlay.swift`) — a minimal Swift CLI that: | ||
| - Creates a borderless, always-on-top, transparent `NSWindow` covering the main screen | ||
| - Loads the flame animation (`assets/flame.html`) inside a `WKWebView` | ||
| - Sets `ignoresMouseEvents = true` so clicks pass through | ||
| - Auto-terminates after the configured duration | ||
|
|
||
| The flame animation itself is a canvas-based particle system with two particle types (flame & smoke) driven by a `FullWidthGrowingEmitter` that ramps spawn rate and vertical coverage over time. | ||
|
|
||
| ## Project Structure | ||
|
|
||
| ``` | ||
| kill-it-with-fire/ | ||
| ├── src/ | ||
| │ └── kill-it-with-fire.tsx Raycast "no-view" command entry point | ||
| ├── swift/ | ||
| │ └── overlay.swift Native transparent-window overlay (Swift) | ||
| ├── assets/ | ||
| │ ├── flame.html Self-contained flame animation page | ||
| │ ├── command-icon.png Extension icon | ||
| │ └── overlay Compiled macOS binary (git-ignored, built on install) | ||
| ├── scripts/ | ||
| │ └── build-overlay.sh Compiles overlay.swift → assets/overlay | ||
| ├── package.json Raycast extension manifest & npm scripts | ||
| ├── tsconfig.json TypeScript configuration | ||
| ├── LICENSE MIT License | ||
| ├── CONTRIBUTING.md Contribution guidelines | ||
| └── CHANGELOG.md Release notes | ||
| ``` | ||
|
|
||
| ## Development | ||
|
|
||
| ### Modifying the flame animation | ||
|
|
||
| Edit `assets/flame.html` directly. | ||
|
|
||
| ### Rebuilding the overlay binary | ||
|
|
||
| After modifying `swift/overlay.swift`: | ||
|
|
||
| ```bash | ||
| npm run build-overlay | ||
| ``` | ||
|
|
||
| This compiles the Swift source and places the binary at `assets/overlay`. The binary is also automatically compiled on `npm install` via the `postinstall` hook. | ||
|
|
||
| ### Scripts | ||
|
|
||
| | Command | Description | | ||
| |---------|-------------| | ||
| | `npm run dev` | Start the Raycast dev server | | ||
| | `npm run build` | Build the extension for publishing | | ||
| | `npm run lint` | Run ESLint | | ||
| | `npm run fix-lint` | Auto-fix lint issues | | ||
| | `npm run build-overlay` | Recompile the Swift overlay binary | | ||
|
|
||
| ## Contributing | ||
|
|
||
| See [CONTRIBUTING.md](CONTRIBUTING.md) for setup instructions, development workflow, and submission guidelines. | ||
|
|
||
| ## License | ||
|
|
||
| [MIT](LICENSE) © Tyler Lotz |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
issue: inconsistent
The extension icon is not working well in both appearances; could you look into this? If you struggle to do so, then you can use our generator