Pulse
GitHub Install
pulse0.app › README.md

A lightweight, native code editor for macOS.

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.

pulse0.app › scripts › memory-check.log
// Memory check, run on every commit

Small enough to forget it’s open.

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.

Terminal — zsh — macos-14 runnerexit 0
runner$ ./scripts/memory-check.sh
empty-windowJust launched
15.9 MB
PASS
ten-filesSwift sources, highlighted
27.1 MB
PASS
ten-files+splitTwo editor panes
29.1 MB
PASS
ten-files+terminal+1.8 MB shell, counted apart
28.2 MB
PASS
terminal+claudeClaude Code connected
28.5 MB
PASS
✓ 5 scenarios under budget · physical footprint via vmmap, 8 s after launch

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.

pulse0.app › Sources › Features.swift
import AppKit

The parts of an editor you use every day.

func foldersAndTabs()

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.

func splitEditor(_ direction: Direction)

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.

func highlight(_ language: Language)

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.

func searchProject(_ query: String)

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.

func commandPalette()

⌘P jumps to any file, ⇧⌘P runs any command, ⌘L goes to a line. Try ⌘P on this page.

lazy var terminal = TerminalPanel()

Your login shell in a panel under the editor, with tabs and side-by-side splits. Nothing is created until you first open it.

func sourceControl()

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.

func shareSelection(with: ClaudeCode)

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.

func autosave(after delay: TimeInterval = 1)

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.

func preferences()

Rebind any shortcut (⌥⌘K, or as JSON), size the editor, terminal and sidebar fonts separately, and pick light, dark or auto.

pulse0.app › .gitignore
# Features Pulse skips

Left out on purpose.

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.

extensions/ # no extension host processgit-client/ # changes and diffs only, no historydebugger/ # use Xcode or your IDEai/ # none built in, and no accounttelemetry/ # none; the only request is the update check
pulse0.app › ARCHITECTURE.md
## How it stays small

Built so the memory doesn’t creep.

TextKit 1

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.

Temporary attributes

Highlighting without copies

Colors are drawing-time attributes, so highlighting never duplicates the document or triggers relayout. Large files are colored around what’s on screen.

Lazy

Everything on demand

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.

0% CPU idle

Nothing ticking in the background

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.

pulse0.app › keybindings.json
// Keyboard

Shortcuts you already know.

pulse0.app › install.sh
#!/usr/bin/env bash

Get Pulse.

One-line install

Paste it in Terminal. It downloads the latest release into Applications and opens it.

$ curl -fsSL https://pulse0.app/install.sh | bash

From source

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

pulse0.app › FAQ.md
# Questions

FAQ

Is Pulse a replacement for VS Code?

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.

Does it work with Claude Code?

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.

Does it support language servers or autocomplete?

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.

Why is the memory number different on my Mac?

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.

How do I report a bug or ask for a feature?

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.

Does Pulse collect any data?

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.

README.md Markdown Spaces: 4 UTF-8 Pulse 64 MB CPU 0% Shell 1.8 MB