One text view per pane
Switching tabs moves the pane’s layout engine onto another file’s text, so each extra file costs about the size of its text, not another editor. A split adds one view, and a file open in both panes keeps one copy of its text.
Written in Swift and AppKit. Files, tabs, split editors, search, a command palette and a terminal, and Claude Code in that terminal sees what you select. No Electron, no web view, nothing running while you read.
$ curl -fsSL https://pulse0.app/install.sh | bash
An animated walkthrough: open a folder, ⌘P, autosave, project search, the terminal, per-area font sizes.
In everyday use, with a project, several files and the terminal open, Pulse uses about 60–70 MB. Every commit is also built and launched on a Mac in CI in the fixed scenarios below; if any crosses 100 MB, the build fails.
Medians of three runs on GitHub’s macOS 14 runner, 8 seconds after launch, so lower than everyday use. Run the same check with scripts/memory-check.sh.
Open a project, browse it in the sidebar, keep many files open, with a path bar above each file. The file you’re editing stays highlighted in the tree. One window per folder (⇧⌘N). Folders load only when you expand them.
Split right (⌥⌘\) or down from the tab’s right-click menu, for two files side by side or two places in one. A file open twice is still one copy of its text.
Swift, TypeScript, Python, Go, Rust, C, Java, Kotlin, Ruby, shell, HTML, CSS, JSON, YAML, TOML, Markdown, SQL. Fold any block from the gutter or with ⌥⌘[, as in VS Code.
The standard macOS find and replace bar in each file, and search across the project, using ripgrep when it’s installed. Files to include and exclude take globs, as in VS Code.
⌘P jumps to any file, ⇧⌘P runs any command, ⌘L goes to a line. Try ⌘P on this page.
Your login shell in a panel under the editor, with tabs and side-by-side splits. Nothing is created until you first open it.
Changed files in the sidebar (⌃⇧G): stage or unstage them, or open one as a diff. Blame in the status bar shows who last changed each line of the open file. Each refresh is one short git call, never a background poll.
Run claude in the terminal and it sees the file and lines you select, as in VS Code. ⇧⌘K sends the selection as an @-mention. Local only, and only if Claude Code is installed.
Files save a second after you stop typing. Quit any time: your folder, tabs and unsaved buffers come back. Files open read-only until you click Read Only in the status bar, so a stray key can’t touch code an AI tool is editing.
Rebind any shortcut (⌥⌘K, or as JSON), size the editor, terminal and sidebar fonts separately, and pick light, dark or auto.
Each of these is a reason other editors use hundreds of megabytes, run background processes, or slow down over time. Pulse is for the edits you make all day, not for replacing an IDE.
Switching tabs moves the pane’s layout engine onto another file’s text, so each extra file costs about the size of its text, not another editor. A split adds one view, and a file open in both panes keeps one copy of its text.
Colors are drawing-time attributes, so highlighting never duplicates the document or triggers relayout. Large files are colored around what’s on screen.
The terminal, the go-to-file index, folder contents, a second editor pane and the Claude Code connection are created the first time you need them, not at launch.
No polling, no animations, no indexers. The resource meter samples every two seconds only while Pulse is the active app, and the Claude Code connection just waits on a local socket.
Paste it in Terminal. It downloads the latest release into Applications and opens it.
$ curl -fsSL https://pulse0.app/install.sh | bash
Needs Xcode 15 or Swift 5.9.
$ git clone https://github.com/Suraj1089/pulse
$ cd pulse && swift run Pulse .
Pulse isn’t notarized by Apple yet, so macOS blocks a copy downloaded in a browser (“Apple could not verify ‘Pulse’…”). The installer fetches the same release with curl and clears that download flag, so Pulse opens normally. You can read the script first.
Open a folder from Terminal with pulse . Pulse adds the command on first launch, or from Pulse › Install ‘pulse’ Command. pulse --upgrade updates to the latest release and pulse --downgrade goes back to the previous one; pulse --help lists the rest.
A specific release, newer or older: curl -fsSL https://pulse0.app/install.sh | bash -s -- 2.1.3
For a lot of everyday editing, yes. For extension-heavy workflows, no. Pulse has tabs, split editors, highlighting, find and replace, project search, a command palette, a terminal with tabs and splits, and a source control panel with diffs. It has no extensions, debugger, full Git client or built-in AI, and isn’t trying to.
Yes. Run claude in Pulse’s terminal and it sees the file and lines you select, the way it does in VS Code. ⇧⌘K sends the selection as an @-mention, and /ide connects a claude running in another terminal. The connection stays on your Mac, starts only if Claude Code is installed, and can be turned off with View › Share Selection with Claude Code.
Not yet. Language servers often use more memory than the whole editor, so if support arrives it will be optional and shown separately in the resource meter.
Screen size, font size, the files you open and macOS version all change it. The status bar shows Pulse’s live footprint, and scripts/memory-check.sh runs the same scenarios as CI.
Click the ladybug in Pulse’s status bar, or use Help › Report a Bug… or Request a Feature…. Both open a GitHub issue form, with your Pulse and macOS versions filled in.
No. There is no telemetry, no analytics and no account. Pulse goes online only to check GitHub for a new release (at launch and at most once a day) and to download one when you choose to update. The Claude Code connection stays on your Mac. This website loads Google Analytics only if you accept its cookies; Cookie settings in the footer changes that.