BasedShell is a keyboard-first macOS terminal app built with Electron, node-pty, and xterm.js.
Main terminal window:
- Native PTY sessions (login shell) with sanitized runtime environment
- Multi-tab workflow with activity states (active, unread, exited)
- Split panes inside each tab (vertical/horizontal, depth cap, keyboard resize/focus)
- Status HUD with shell/cwd/git/exit context
- Command palette with fuzzy actions, pins, and recents
- Inline terminal search with case/regex toggles and next/prev navigation
- Theme system for terminal + chrome:
graphite,midnight,solarized-dark,paper,aurora,noir,fogcatppuccin-latte,catppuccin-frappe,catppuccin-macchiato,catppuccin-mochasystemtheme selection + system appearance sync
- Settings support for font, cursor, scrollback, opacity, vibrancy, and prompt style (
system/minimal) - Prompt style option for clean
❯prompt (no user@host), applied per new session - Packaged macOS builds via
electron-builder
Install dependencies:
npm installDevelopment:
npm run devTypecheck + DOM contract check:
npm run typecheckProduction run:
npm run startBuild distributables:
npm run package:mac- Maintainer release process:
RELEASING.md - CI release workflow:
.github/workflows/release-macos.yml - Release readiness plan:
docs/release-readiness-plan.md - Latest downloads: https://github.com/XtraSaltyDev/BasedShell/releases/latest
If a build is unsigned, macOS may block the first launch.
- Open
/Applicationsin Finder. - Right-click
BasedShell.appand chooseOpen. - Confirm
Openin the Gatekeeper prompt.
If macOS still reports the app as damaged or broken, run:
sudo xattr -dr com.apple.quarantine /Applications/BasedShell.app
open /Applications/BasedShell.appManual update flow for unsigned builds:
- Download the latest release from the Releases page.
- Quit BasedShell.
- Replace
BasedShell.appin/Applications. - Reopen BasedShell.
Cmd/Ctrl+T: New tabCmd/Ctrl+W: Close active tabCmd/Ctrl+F: Find in terminalCmd/Ctrl+K: Command paletteCmd/Ctrl+,: Open settingsCmd/Ctrl+Shift+K: Clear terminalCmd/Ctrl+Alt+D: Split verticalCmd/Ctrl+Alt+Shift+D: Split horizontalCmd/Ctrl+Alt+Arrow: Focus split paneCmd/Ctrl+Alt+Shift+Arrow: Resize split pane
src/main: Electron main process (windows, IPC handlers, PTY session manager, settings persistence)src/preload: Typed secure bridge exposed to renderersrc/renderer: Terminal UI, tabs/panes, command palette, search, toasts, settings drawersrc/shared: Cross-process contracts, pane model, theme metadata/types
node-ptyrequires native build tooling.postinstallrunsscripts/fix-node-pty-helper.mjsto ensurespawn-helperis executable on macOS.- Runtime settings/window state are stored under
~/Library/Application Support/BasedShell(macOS default). output/is intentionally gitignored for local artifacts.
