<p align="center">
<img src="extra/logo/nebula.png" alt="Pebrel Titanium icon" width="148" height="148" />
</p>
<h1 align="center">Pebrel</h1>
<p align="center">
<strong>A GPU-accelerated terminal, SSH workspace, and home for your AI CLI sessions.</strong>
</p>
<p align="center">
Built with Rust and GPUI for Windows, macOS, and Linux.<br />
Split terminals · SSH & SFTP · Claude Code & Codex workflows · Native document reader
</p>
<p align="center">
<a href="https://trendshift.io/repositories/127463?utm_source=trendshift-badge&utm_medium=badge&utm_campaign=badge-trendshift-127463" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/127463/daily?language=Rust" alt="Kuddev/pebrel | Trendshift" width="250" height="55" /></a>
</p>
<p align="center">
<img src="https://img.shields.io/github/stars/Kuddev/pebrel?style=flat-square&color=ffd33d&logo=github" alt="Stars" />
<a href="https://atomgit.com/kettys/pebrel"><img src="https://atomgit.com/kettys/pebrel/star/badge.svg" alt="AtomGitStars" /></a>
<a href="https://hub.xerj.org/contributors/Kuddev"><img src="https://hub.xerj.org/contributors/Kuddev/badge.svg" alt="XERJ Corpus Hub contributor" /></a>
<img src="https://img.shields.io/github/forks/Kuddev/pebrel?style=flat-square&color=8957e5&logo=github" alt="Forks" />
<img src="https://img.shields.io/github/last-commit/Kuddev/pebrel?style=flat-square&color=3fb950" alt="Last commit" />
<a href="https://discord.gg/VFn4rcxmhn"><img src="https://img.shields.io/badge/Discord-join-5865F2?style=flat-square&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://linux.do"><img src="https://img.shields.io/badge/%E5%8F%8B%E9%93%BE-linux.do-ffb003?style=flat-square&logo=discourse&logoColor=white" alt="linux.do" /></a>
</p>
<p align="center">
<strong>English</strong> · <a href="README.zh-CN.md">简体中文</a>
</p>
---
<p align="center">
<img src="docs/screenshots/nebula-top-tabs.png" alt="Terminal tabs in Pebrel" width="1040" />
</p>
<p align="center">
<img src="docs/screenshots/nebula-claude-session.png" alt="Claude Code running in Pebrel" width="1040" />
</p>
<p align="center">
<img src="docs/screenshots/split-ai-workflows.png" alt="OpenCode, Claude Code, and Codex in split panes" width="1040" />
</p>
## 💖 Sponsors
<table>
<tr>
<td align="center" width="240">
<a href="https://cn.aiapi.bot/invite?code=MCYLZ5H6FR"><img src="extra/logo/sponsor_aiapi.png" alt="AIAPI" width="200" /></a><br />
<a href="https://cn.aiapi.bot/invite?code=MCYLZ5H6FR"><strong>AIAPI</strong></a>
</td>
<td>
<p><strong>Special thanks to AIAPI for sponsoring this project!</strong></p>
<p>AIAPI is dedicated to building the most stable AI model relay on the web, providing a unified API for solo developers, tech teams, and enterprises. We deliver full-power, unthrottled Claude and GPT models—zero lobotomization, zero dilution, and 100% pure native performance. Backed by dynamic multi-route scheduling for high availability, complete transparency in latency and billing, and top-tier after-sales support that always has your back, AIAPI cuts API costs by 40%–98% compared to official rates.</p>
<p><a href="https://cn.aiapi.bot/invite?code=MCYLZ5H6FR">Visit AIAPI</a></p>
</td>
</tr>
<tr>
<td align="center" width="240">
<a href="https://sidrune.ai/register?source=github&campaign=pebrel&promo=pebrel"><img src="extra/logo/sponsor_sidrune.png" alt="Sidrune AI" width="200" /></a><br />
<a href="https://sidrune.ai/register?source=github&campaign=pebrel&promo=pebrel"><strong>Sidrune AI</strong></a>
</td>
<td>
<p><strong>One entry point for accessing and managing the world's leading AI models</strong></p>
<p>Thanks to Sidrune AI for sponsoring this project! Sidrune AI serves individual developers, technical teams and enterprises with a unified API for accessing and managing the world's leading AI models. Dynamic multi-route scheduling improves availability, and model performance, response time and cost stay transparent. Depending on the model and route, API calls can cost 40%–98% less than official or benchmark prices.</p>
<p><a href="https://sidrune.ai/register?source=github&campaign=pebrel&promo=pebrel">Visit and sign up now</a> to receive $3 in API credit.</p>
</td>
</tr>
</table>
For business cooperation or sponsorship, contact: [fickleheartedkeys@163.com](mailto:fickleheartedkeys@163.com)
<p align="center">
<strong>Pebrel WeChat Community</strong>
</p>
<p align="center">
<a href="extra/community/wechat-group-2026-11-04.jpg"><img src="extra/community/wechat-group-2026-11-04.jpg" alt="QR code for the Pebrel WeChat group, valid before November 4, 2026" width="300" /></a>
</p>
<p align="center">
Scan with WeChat to join. Valid before November 4, 2026. Click the image to view full size.
</p>
## One Workspace
Pebrel (formerly Nebula) brings local shells, remote hosts, files, and AI command-line
tools into a native desktop workspace. Arrange terminals in tabs and splits, follow
each agent's activity, and read its output without leaving the application.
### Terminals and Sessions
- Sidebar or top tabs, draggable split panes, and per-pane working directories.
- Saved workspace layouts and optional AI conversation restoration. On WSL and
Linux, Codex session metadata can supply an ID when its hook has not reported one.
- Native Windows Codex identity refreshes share a background helper with startup
cursor feedback disabled. Each refresh reads current metadata and remains bounded;
a stalled helper is stopped before a later refresh creates its replacement.
- On Windows, optional background residency keeps running sessions alive when you
close the window. Restoring a conversation after the process exits is a separate
feature and requires a supported CLI and a usable session identity.
- Context-aware and history completions, configurable keybindings, and integrated shell prompts.
- Saved-command management supports checkbox selection and one confirmation for a
batch, replacing repeated single-command deletion. Selection mode never runs a
command; changing the search or folder clears the selection. **Select results**
selects commands in the current filtered list, including rows below the viewport.
**Manage → Delete all commands** clears custom commands and all current built-in
recipes across platforms, regardless of the current search or folder; folders stay.
Clearing built-ins also includes recipes moved to other folders. Empty built-in
folders disappear, and **Manage → Restore built-in commands** restores deleted
recipes to their default folder. Custom deletions are not undoable here. Deleting
a custom folder requires confirmation and keeps its commands in Ungrouped.
Batch changes reuse the existing locked, refreshed, atomic store transaction;
the saved file format is unchanged and stale selections preserve unrelated edits.
- Remapping or disabling terminal shortcuts preserves text fields' native paste keys.
Restoring defaults updates existing windows without restarting. Runtime overrides
replace their previous rules, avoiding the stale disabled bindings from the append-only
path; the saved configuration format is unchanged. See the
[shortcut ownership decision](architecture/notes/nebula_app/gpui_shell/workspace/2026-10-07-keyboard-override-sources.md).
- Local Windows PowerShell prompts can keep multiline clipboard paste in
PSReadLine for review: Enter submits it, and one Undo removes the whole paste.
This requires active shell integration and no user binding on its managed paste shortcut.
PSReadLine normalizes CRLF and expands tabs to four spaces; other editors retain
their negotiated paste or existing confirmation behavior. See the
[clipboard paste contract](architecture/notes/nebula_app/gpui_shell/terminal/view/2026-10-23-powershell-clipboard-paste.md).
### Intelligent Completion
Get suggestions from your current Git repository, project scripts, SSH config,
and filesystem—even when you have never run the command before. On Windows,
Pebrel also completes registered WSL distributions. These candidates come from
Pebrel's own completion engine, without a shell completion plugin or an AI request.
Five commands in a real Windows/PowerShell terminal: Git branches, npm scripts,
SSH aliases, WSL distributions, and a quoted filename with `cat`. Typed one
character at a time with the built-in Powerline prompt.
<p align="center">
<img src="docs/screenshots/intelligent-completion.gif" alt="First-use completion for Git, npm, SSH, WSL, and cat in Pebrel" width="960" />
</p>
Choose **Inline** (Tab accepts the suggestion), **List** (Tab accepts the selected
candidate), or **Hybrid** (→ accepts the inline suggestion; Tab opens the list)
in Settings.
<details>
<summary>How history completion differs</summary>
History completion recalls a command you have already executed. Here, `echo dep`
recalls `echo deployment finished` after its first run. The five examples above
discover candidates from the current environment without matching prior commands.
<p align="center">
<img src="docs/screenshots/history-completion.gif" alt="Recalling a previously executed command with history completion" width="960" />
</p>
</details>
### SSH and Files
- Search SSH hosts by name, address, group, tags or notes in the host library,
launcher, command palette and Quick Jump. Space-separated keywords must all match;
searches are case-insensitive. The launchers now use the same metadata as the host library.
- Saved hosts, SSH config aliases, proxy and jump-host options, private-key and
keyboard-interactive authentication, and host-key verification.
- SFTP browsing, uploads and downloads, folder transfers, progress, and cancellation.
- Local file browsing and Git actions alongside your terminals.
- Duplicated WSL and SSH tabs retain their known working directory.
<p align="center">
<img src="docs/screenshots/ssh.gif" alt="Native SSH session" width="1040" />
</p>
### AI CLI Workflows
- Claude Code, Codex, and other recognized CLIs have their own icons and activity
states. Supported hook events provide more precise progress and attention signals.
- Notifications follow their source pane; clicking one returns you to that terminal.
- Captured Claude Code and Codex answers open in a reader with Markdown, formulas,
source text, and local image previews. Reader controls and notices follow the
selected language; Copy source preserves the complete original answer. See
[reader language behavior](docs/answer-reader-language.md).
- Clipboard images are saved as PNG files and their paths inserted into local,
WSL, or SSH sessions. Inline terminal images require the CLI to emit the supported
OSC 1337 protocol; image attachment previews depend on the CLI itself.
<p align="center">
<img src="docs/screenshots/ai-sidebar.png" alt="AI activity sidebar" width="300" />
</p>
### A Native, Configurable Interface
- GPU-accelerated GPUI interface, light and dark themes, backgrounds, and opacity controls.
- Application icon palettes and eleven UI language choices with English fallback
for untranslated text.
- Workspace dialogs, command feedback, Git/SVN controls and default notifications
follow the selected language. Switching languages preserves command search text
and selection. See [internationalization](docs/internationalization.md).
- Searchable settings, a command palette, and Lua configuration with validation and
live reload. Existing TOML configuration remains supported.
- Markdown document tabs and native mathematical typesetting without a WebView.
<p align="center">
<img src="docs/screenshots/native-math-rendering.png" alt="Native formula rendering" width="1040" />
</p>
<p align="center">
<img src="docs/screenshots/themes.png" alt="Application themes" width="1040" />
</p>
## Download
Choose a package from the **[latest release](https://github.com/Kuddev/pebrel/releases/latest)**.
| System | Architecture | Packages |
| --- | --- | --- |
| Windows 10 1809+ / 11 | x64 | Installer `.exe`, portable `.zip` |
| Linux Preview, glibc 2.35+ | x64 | `.AppImage`, `.deb`, portable `.tar.gz` |
| macOS Preview, deployment target 14+ | Apple Silicon / arm64 | `.dmg` |
| macOS Preview, deployment target 14+ | Intel / x64 | `.dmg` |
Package names follow `Pebrel-v<version>-<system>-<architecture>`. Windows offers
stable installers ending in `-setup.exe` and portable ZIPs. Linux and macOS are
Preview builds, marked `-preview` before the extension. A legacy-named Windows
installer is also supplied for older automatic-update clients.
On Windows, run the installer or extract the ZIP and launch `pebrel.exe`, keeping
the bundled directories together. On Linux, install the DEB or make the AppImage
executable. On macOS, open the matching DMG and drag Pebrel into Applications.
Ad-hoc-signed macOS builds may require **Open Anyway** in **System Settings >
Privacy & Security** on first launch. Native macOS CI runs on macOS 15; the
deployment target alone does not establish validation on every older OS version.
Pebrel 2.1 connects native tray actions, quick-terminal shortcuts, login startup,
and local AI-hook setup on Windows, macOS, and Linux. Linux tray integration uses
a status notifier, and Wayland shortcuts use the desktop portal. Windows and
macOS provide native update installation; Linux upgrades use its package manager
or a new package. See [installation details](INSTALL.md) for platform requirements
and upgrading an existing Nebula installation.
## Self-hosted relay
On your phone, save an SSH host with password or private-key authentication, then
select that host in relay setup. For key authentication, the credential field is
the private-key passphrase; leave it empty for an unencrypted key. It is not a
relay password. After installation, select the SSH host under desktop
**Settings → Phone connection → Relay**, then generate the phone pairing QR code.
See [offline relay installation](mobile/relay-native/INSTALL.md) for server
requirements, verification and management. The original v2.1.1 Release assets
did not include an offline relay kit. A source checkout containing that installer
can use `mobile/tools/package_manual_relay.py` to generate a two-architecture Linux
kit and SHA256 sidecar from a verified APK. The tool does not download executables
or publish or replace Release assets.
Older APKs also need Cargo dependency notices collected from their matching source;
the installation guide includes those commands.
## Configure
```sh
pebrel config init --language en-US
pebrel config check
```
The generated Lua configuration uses `require 'pebrel'` and
`pebrel.config_builder()`. Invalid reloads retain the last valid configuration.
See the [Lua configuration guide](docs/lua-configuration.md) for settings and examples.
In **Settings → Terminal → Alerts**, **Notification duration** selects **Use defaults**,
5, 10, 30, or 90 seconds, or **Until dismissed**. The default preserves existing
lifetimes: short toasts last 5 seconds, message banners 90 seconds, and update
notices remain until dismissed. The saved preference applies to all newly shown
or refreshed in-app cards, independently of the AI-toast visibility switch.
Only the latest three cards are retained; newer cards replace older ones without
performing their actions, including in persistent mode.
Hiding a card never approves or rejects a request or changes task state; requests
remain available in their terminals and updates in Settings. System notifications
are unchanged. The persisted key is `notification_duration`, with values `default`,
`5`, `10`, `30`, `90`, or `persistent`.
See the [notification duration menu](docs/screenshots/notification-duration.png).
## Build
With the pinned Rust toolchain and the platform dependencies installed:
```sh
cargo build --release --locked -p nebula --bin pebrel --features gpui-shell
```
The internal Cargo package is still named `nebula`; the application and command
are `pebrel`. GPUI is the product interface. The older renderer is available only
through the explicit `legacy-shell` feature.
## Contact
Discord: [discord.gg/VFn4rcxmhn](https://discord.gg/VFn4rcxmhn)
## Acknowledgements
Pebrel includes third-party terminal, interface and font components. Their
provenance, copyright and license notices are preserved in
[THIRD-PARTY-NOTICES](THIRD-PARTY-NOTICES) and [licenses/](licenses/).
## Community
- **[linux.do](https://linux.do)** - A thriving developer community.
## ⭐ Star History
<a href="https://star-history.com/#Kuddev/pebrel&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=Kuddev/pebrel&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=Kuddev/pebrel&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=Kuddev/pebrel&type=Date" />
</picture>
</a>