Terminal built for your developer workflow
The Mac terminal app built for developers who run real stacks.
lpm replaces scattered terminal tabs with a project-aware workspace — one window for every service, per-service log panes, and instant project switching that keeps your state intact. Native Apple Silicon, zero Electron.
Every service starts with one click
One click boots the stack, and switching repos stops nothing
A short video: each service streams in a pane of its own.Click anything — every service runs live in your browser.
lpm is a macOS app with a multi-pane terminal workspace. Open this page on your computer to try the interactive demo.
Get lpm for MacOr check your Macs from your iPhoneClick a step to run it in the window.
Done poking around? Get lpm for Mac and point it at your own projects.
Your terminal was built for commands, not for building software
Running a modern stack on a Mac means managing half a dozen processes in half a dozen windows. That's not a workflow — it's damage control.
Monorepo service sprawl
Your monorepo has an API, a worker, a frontend, a database, and a cron job. Every morning you open five tabs, cd into each one, run the right command, and hope nothing crashed while you were in standup. There has to be a better way.
Context evaporates when you switch repos
You're three services deep in a debugging session when Slack pings with a blocking issue on a different client project. You switch repos and your running services, terminal history, and mental state all disappear. Getting back means rebuilding all of it from memory.
Logs drown in one shared scroll buffer
When five services write to the same terminal, you debug by grepping a firehose. Was that error from the API or the worker? Which service restarted? You shouldn't need to be a log archaeologist to run your own stack.
A terminal workspace that understands your stack
What changes when the terminal knows which services a project runs, not just which commands you type.
Per-project workspaces, not tabs
Each project lives in its own persistent workspace with its own services, logs, and terminal sessions. Switch repos in the sidebar without touching what's running anywhere else.
Per-service log panes
Every service gets its own scrollable log pane. Watch your API, your worker, and your Next.js dev server at once, each one labeled and isolated, so you can see at a glance which service threw the error.
Services detected from your repo
Add a folder and lpm reads its manifests, from package.json and Procfiles to Compose files, Rails, Django, Go, and Cargo. Each app in a monorepo becomes its own service, and one click starts them all. Refine the setup with AI in the config editor.
Git and services coexist in the same window
Run git rebase, git bisect, or a migration in a shell pane while your dev servers keep streaming next to it. More on lpm as a git terminal for Mac.
Fix a config file without leaving the stack
⌘⇧E opens the Files tab in the same pane as your logs. Jump to the Compose file or a migration with ⌘P, fix it, and save with ⌘S, then start the service again from the Start menu.
Preview the dev server in a pane
Open a browser tab next to the service that serves the page and watch both at once. For the full browser, right-click a service tab and open its port in your default one.
A copy of the project for each AI agent
Give each agent its own copy with Duplicate or New Worktree, so agents never edit the same files, and lpm warns you when two copies want the same port. See how to run Claude Code in parallel.
Native Apple Silicon, zero Electron
A proper macOS app with no bundled Chromium runtime. Your M-series chip runs your stack, not a web browser dressed up as a terminal.
Four things a stack-aware terminal changes
What you notice in the first week.
Onboard a new repo in minutes.
Add any project folder. lpm reads its manifests and sets up the services it finds, so you can hit Start right away. Every service streams live output right away, each tab shows the ports it is actually listening on, and because services start in your login shell, your own version manager picks the Node or Python version.
Debug across services without losing the thread.
When something breaks, you're watching all five services at once. The error is visible, labeled, and in context — not buried in a shared scroll buffer you have to grep through.
Switch between projects without a mental-state reset.
Jump to another repo mid-session. Your first project keeps running, logs intact, terminal history preserved. Switch back and pick up exactly where you left off.
Hand AI agents a copy, not your checkout.
Duplicate or New Worktree gives each agent its own files, terminals, and services, so it can run servers and tests without touching your working copy. Copies use the same port numbers as the original, and lpm flags a clash when you press Start instead of letting one server crash.
Four full-stack days lpm makes shorter
Everyday scenarios that drag with scattered tabs and stay quick in a workspace that knows your stack.
Spin up an unfamiliar repo your first morning on a project
Choose Clone Repository in Add a project, paste the URL, and lpm clones it and sets up services from its manifests. Check them in the Start menu, edit one if you need to, and hit Start. Every service streams side by side, with no guessing from the README.
Run your full stack while debugging a specific service
Open a shell pane next to your service panes and add debug logging. Then stop that one service from its tab and start it again from the Start menu, or run lpm service api restart, while the rest of the stack stays up. No need to tear down the whole environment to test one change.
Juggle three client projects in the same afternoon
Each client project gets its own row in the project sidebar. Leave project A running, open project B, make changes, and jump to project C for a quick hotfix. All three keep their running state, their service logs, and their terminal history. Each service starts in its own folder through your login shell, so your version manager picks the right Node for each project.
Script the stack from any terminal
The lpm command line drives the same projects as the app. lpm start myapp --profile backend brings up part of the stack, lpm wait --port 3000 holds a script until the server listens, and lpm logs api -n 200 grabs the latest stack trace. Commands speak --json, and AI agents can use it too.
A full stack in lpm vs VS Code, iTerm2, tmux and Warp
How each one starts your services, shows their logs and ports, and reaches a remote box, and how much of that you script yourself.
| Capability | lpm | iTerm2 | Terminal.app | tmux | Warp | VS Code terminal |
|---|---|---|---|---|---|---|
| One click starts every service, each in its own log pane | Yes | No | No | Scripted | Launch config | Via tasks |
| Stop or restart one service while the rest keep running | Yes | By hand | By hand | By hand | By hand | Yes |
| Listening ports shown on each service | Yes | No | No | No | No | No |
| Each monorepo app detected as its own service | Yes | No | No | No | No | npm scripts |
| Remote services with their ports forwarded to localhost | Yes | No | No | No | No | Remote-SSH |
One click starts every service, each in its own log pane
- lpm: yes
- iTerm2: no
- Terminal.app: no
- tmux· Scripted
- Warp· Launch config
- VS Code terminal· Via tasks
Stop or restart one service while the rest keep running
- lpm: yes
- iTerm2· By hand
- Terminal.app· By hand
- tmux· By hand
- Warp· By hand
- VS Code terminal: yes
Listening ports shown on each service
- lpm: yes
- iTerm2: no
- Terminal.app: no
- tmux: no
- Warp: no
- VS Code terminal: no
Each monorepo app detected as its own service
- lpm: yes
- iTerm2: no
- Terminal.app: no
- tmux: no
- Warp: no
- VS Code terminal· npm scripts
Remote services with their ports forwarded to localhost
- lpm: yes
- iTerm2: no
- Terminal.app: no
- tmux: no
- Warp: no
- VS Code terminal· Remote-SSH
What full-stack developers ask before moving their stack into lpm
Does lpm work with monorepos?
Yes. When you add a monorepo, lpm turns each workspace package or conventional app folder (apps/*, services/*, api, web, and similar) into its own service, up to 20 of them. Each service gets its own pane and its own switch in the Start menu, so you can start the whole repo in one click, bring up a single service, or save a profile such as backend only.Can I use lpm alongside VS Code or another editor?
Yes. lpm is a terminal workspace, not an editor replacement. You write code in VS Code, Cursor, Zed, or whatever editor you prefer, and Open with sends a project straight to it. lpm runs your dev stack, shows the logs, and handles git in a native Mac window that sits alongside your editor.Does lpm support SSH or remote development?
Yes. lpm supports SSH remote projects: connect to a remote dev box, forward remote ports to localhost, and run remote services in panes. An SSH project is listed right beside your local ones, and its services and logs behave like local ones.How does lpm help when running multiple AI coding agents?
Put each agent in a separate copy, Duplicate or New Worktree, so no two agents edit the same files and your working copy stays untouched. Each copy has its own terminals and services and appears under the original in the sidebar. Copies use the same ports as the original, so lpm warns you when two want the same one and offers to free it.Can I use my existing shell setup (zsh, dotfiles, aliases) in lpm?
Yes, including the parts a monorepo depends on. Each pane starts your default shell as a login shell, so .zshrc and .zprofile run, your version managers (nvm, pyenv, rbenv, mise) initialize, and direnv still swaps environments as you cd between packages. Every alias, function, $PATH entry, and prompt theme behaves the way it does in Terminal.app. Each service and terminal also starts in the working directory you gave it, so a pane opens straight into the package it belongs to instead of at the repo root.How is lpm different from using tmux inside iTerm2?
tmux gives you pane multiplexing but no project awareness, no service lifecycle management, and no GUI for starting or stopping processes. lpm gives you a visual project switcher, per-service start/stop controls, and a config editor alongside real terminal panes, so you get the workflow benefits of tmux without the config overhead, and with a native Mac interface that new team members can use on day one.What happens when two projects want the same port?
lpm checks a project's ports when you press Start. If one is taken, it tells you who holds it, another lpm project or a named process, and offers to stop that holder and start yours. Each service can also be set to always ask, free the port automatically, or not start.Can I control lpm from scripts?
Yes. The lpm command line tool, installed from Settings, starts and stops projects and single services, prints a service's recent logs, and waits for a port or service to be ready. Its commands take --json for machine-readable output, which makes it easy to use from scripts and from AI coding agents.
Keep reading
Best terminal for Mac
Split panes, themes, and search, plus why a native Apple Silicon app beats Electron terminals.
Git terminal for Mac
Branch, commit, and open pull requests while your dev servers keep streaming.
SSH terminal for Mac
Remote dev boxes with forwarded ports, in the same sidebar as your local projects.
Terminal with a project sidebar
How the project list works up close: folders, copies, running dots, and agent attention states.
Best terminal for Claude Code and Codex
Agents beside your services, with live status and alerts when one needs you.
Every lpm feature
The full tour: services, terminals, agents, git, automations, and the iPhone app.
Your Mac terminal, built for development.
Free, native, and ready in minutes.
Install the app, add a project, and the services it finds are ready, so your first Start is one click. Runs on Intel and Apple Silicon Macs from macOS 12 on.