A lightweight, native macOS code editor in Swift and AppKit. No Electron, under 100 MB of memory.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A light, native code editor for macOS.
Pulse is a code editor written in Swift and AppKit, with no web view, no Electron and no extension host. It stays small: about 60–70 MB of memory in everyday use, and never more than 100 MB, with no CPU use while you are not typing.
pulse <folder>, Finder, File › Open), like VS Code; opening a folder that is already open brings its window forward. ⇧⌘N opens an empty window. All windows come back after a restart.⌥⌘[ / ⌥⌘], or Fold All in View › Folding.⌥⌘\) or Down, or right-click a tab. Each pane has its own tabs; a file open in two panes is one text, edited in both. Nothing is created until you split, and a pane closes with its last tab.ripgrep when installed, otherwise a built-in scan; a block of code finds the same code however it is wrapped or indented). Under …, files to include and files to exclude take comma-separated globs as in VS Code: *.ts, src (that folder at any depth), ./src (only the top-level one), src/**/*.test.ts, *.{ts,tsx}.⌘P go to file, ⇧⌘P commands, ⌘L go to line. Developer: Reload Window rebuilds the window with its folder, tabs and unsaved text.⌃- returns to where you jumped from (another file, a Find match, a search result, Go to Line) and ⌃⇧- goes forward again, as in VS Code. Rebind them in Keyboard Shortcuts.F12) to jump to where it is defined. Pulse looks in the open file first, then searches the folder's files of the same language with one short rg or git grep; several places show a menu at the name, nearest first. Nothing is indexed ahead or kept afterwards, so it costs no memory until you use it. It matches definitions by their shape (def save, func save, const save =), not by types, so a common name can list several places.⌃`) with tabs and side-by-side splits, started only when you first open it.⌃⇧G): staged and unstaged changes, with buttons to stage or unstage a file or a whole section. Click a changed file to see its diff: the whole file with removed and added lines highlighted in place and the edited part of a changed line marked, like VS Code, with old and new line numbers. Double-click opens the file.claude in Pulse's terminal and it sees the open file and your selection ("⧉ 5 lines selected"), as in VS Code. ⇧⌘K puts @file#L5-9 in Claude's prompt. From another terminal, run /ide and pick Pulse. It costs nothing until Claude connects; View › Share Selection with Claude Code turns it off.Not included, on purpose: extensions, debugger, a full Git client (history, merges), built-in AI features, telemetry.
curl -fsSL https://pulse0.app/install.sh | bash
It downloads the latest release into Applications and opens it. Pulse isn't notarized by Apple yet, so a copy downloaded in a browser is blocked by macOS ("Apple could not verify 'Pulse'…"); the installer fetches the same release with curl and clears that download flag. You can read the script first.
Open a folder from the terminal with pulse . (or pulse file.swift src/), like VS Code's code .. Pulse links the pulse command into a folder on your PATH the first time it runs; if that needs a password, use Pulse › Install 'pulse' Command. Homebrew installs it with the cask.
pulse --upgrade updates Pulse to the latest release, and pulse --downgrade goes back to the release before the one you have, if a new one gives you trouble. Either takes a version (pulse --downgrade 2.1.3). pulse --version prints the installed version and pulse --help lists the rest. To install a specific release without the command, pass its version to the installer:
curl -fsSL https://pulse0.app/install.sh | bash -s -- 2.1.3
If installing from Pulse doesn't work, link it yourself (asks for your password once):
sudo mkdir -p /usr/local/bin && sudo ln -sf /Applications/Pulse.app/Contents/Resources/pulse /usr/local/bin/pulse
The editor, the sidebar and the terminal each have their own font size: ⌘+ / ⌘− / ⌘0 change the one you're working in, and View › Font Size names each. View › Appearance picks Auto, Light or Dark. The Welcome tab (Help › Welcome to Pulse) opens the first time Pulse runs.
Pulse checks for a new release once a day and shows an Update button at the top right when one is available; it installs the update and reopens with your tabs. Pulse › Check for Updates… checks right away. Releases are published from main when a commit or merged PR title includes [release].
| Shortcut | Action |
|---|---|
⌘O | Open a folder or files |
⇧⌘N | New window |
⌘P | Go to file |
⇧⌘P | Command palette |
⌘L | Go to line |
⌃- / ⌃⇧- | Go back / forward (where you jumped from) |
F12 or ⌘-click | Go to definition |
⌘F / ⌥⌘F | Find / find and replace in file |
⌥⌘[ / ⌥⌘] | Fold / unfold the block at the caret |
⇧⌘F | Search the project |
⌃` | Show or hide the terminal |
⌃⇧` | New terminal (in the open folder) |
⌘\ | Split terminal (side by side) |
⌥⌘\ | Split the editor right (Split Down is in View and the tab menu) |
⌃⇧G | Source Control |
⇧⌘K | Send the selection to Claude Code (@file#L5-9 in its prompt) |
⌘/ | Toggle line comment |
⌘] / ⌘[ | Indent / outdent |
⇧⌘] / ⇧⌘[ | Next / previous tab |
⌃⌘S | Toggle sidebar |
In everyday use, with a project, several files and the terminal open, Pulse uses about 60–70 MB. The status bar shows the live number.
CI also launches every build in a fixed set of scenarios. These read lower than everyday use because they are taken 8 seconds after a fresh launch:
| Scenario | Measured in CI (fresh launch) | Target | Hard limit |
|---|---|---|---|
| Empty window | 15.9 MB | ≤ 40 MB | 100 MB |
| Ten files open | 27.1 MB | ≤ 60 MB | 100 MB |
| Ten files, editor split right | 29.1 MB | ≤ 60 MB | 100 MB |
| Ten files + terminal | 28.2 MB (+1.8 MB shell) | ≤ 60 MB | 100 MB |
| Ten files + terminal + Claude Code connected | 28.5 MB (+1.8 MB shell) | ≤ 60 MB | 100 MB |
"Memory" means physical footprint, the number Activity Monitor shows, read with vmmap 8 seconds after launch on GitHub's macOS 14 runner (medians of three runs). Shells and other processes you start in the terminal are reported separately. CI measures all five scenarios on every push and fails the build above 100 MB (scripts/memory-check.sh); on pull requests it also fails a change that adds more than 5 MB to any of them (scripts/memory-compare.sh). It also captures real screenshots of the build (scripts/screenshot.sh), which is where the image above comes from.
How it stays small:
Requirements: macOS 14+, Xcode 15+ (Swift 5.9+).
git clone https://github.com/Suraj1089/pulse.git
cd pulse
swift run Pulse . # run from source, opening this folder
./scripts/bundle.sh # build dist/Pulse.app for this Mac
open dist/Pulse.app
./scripts/memory-check.sh # measure the memory budget locally
./scripts/package.sh # universal release build: DMG, ZIP, Homebrew cask
In Pulse, Help › Report a Bug… and Help › Request a Feature… open a GitHub issue form in your browser; the ladybug at the right end of the status bar is a shortcut to the bug form. The bug form comes with your Pulse version, macOS version and Mac model filled in; nothing is posted until you submit it. You can also open an issue directly. Feature requests are weighed against the contribution rules: Pulse stays small on purpose.
MIT. See LICENSE.
⌘+ / ⌘- / ⌘0 | Font size of the editor, sidebar or terminal (whichever has focus) |
⌥⌘K | Keyboard shortcuts (rebind any command) |