Native Shell
Native Shell은 모든 플랫폼의 앱 안에서 만들어지는 AI UI입니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A fast, native GPU terminal for Linux. vibeterm.sh
Written in Rust with a real shell PTY and GPU text rendering: graphite surfaces, readable text, a quiet teal accent, and no continuous idle animation.
0.1.0 is an early preview. Tabs, splits, scrollback search, a command palette and live configuration are implemented, and everyday use, nvim, tmux, copy/paste and search have been checked by hand on KDE Wayland. IME composition, mixed-DPI monitors and some protocol features still need work; see the changelog. Linux only for now.
Arch / CachyOS: build the package from packaging/PKGBUILD:
git clone https://github.com/lfreixial/vibeterm && cd vibeterm/packaging
makepkg -si
Other distributions: download vibeterm-<version>-x86_64-linux.tar.gz from
Releases, check it against the
.sha256 file, extract it and run ./vibeterm. Copy it to ~/.local/bin to keep it;
vibeterm.desktop and vibeterm.svg add a launcher entry. You need glibc 2.39 or newer
(Ubuntu 24.04, Debian 13, Fedora 40 or later), Wayland or X11, libxkbcommon, and a
Vulkan driver (OpenGL is used as a fallback).
vibeterm
vibeterm -d ~/src
vibeterm -e /bin/bash --noprofile --norc
vibeterm --hold -e /usr/bin/printf '%s\n' 'arguments stay separate'
From a source checkout, use ./target/release/vibeterm after building:
./target/release/vibeterm
-e must be the final application option. Arguments are passed directly to the
program. Default shell: configured shell, then $SHELL, then /bin/sh. Default
directory: the launch directory. New tabs and splits launch the configured shell in the
focused shell's current directory (read from /proc, so no shell integration is needed),
falling back to the launch directory. They do not repeat a CLI -e command.
Shell exit closes its pane unless --hold is set; closing the last pane closes the window.
Rust 1.90.0 is the pinned toolchain/MSRV; Cargo.lock pins application dependencies.
cargo build --release --locked
cargo run --release --locked
CachyOS/Arch needs base-devel, pkgconf, Rust, wayland, libxkbcommon,
fontconfig, X11 libraries, vulkan-icd-loader, an appropriate graphics driver,
and an installed monospace font. mesa supplies the OpenGL fallback. Verified build
environment: Wayland 1.26, libxkbcommon 1.13.2, Fontconfig 2.18.3, Mesa/RADV 26.2.4.
AMD testing used vulkan-radeon. No system packages were installed or shell startup files edited.
The build session installed Rust only under /tmp; the binary needs no Rust
installation to run. To rebuild using that temporary compiler, see
development instructions.
Wayland is selected when available. Exercise X11/XWayland with:
env -u WAYLAND_DISPLAY WINIT_UNIX_BACKEND=x11 ./target/release/vibeterm
See compatibility for what was actually verified. Shaping is per terminal cell: cross-cell ligatures and full bidi layout are not promised. There is no native accessibility tree or screen-reader support yet.
Copy config.example.toml to
$XDG_CONFIG_HOME/vibeterm/config.toml (normally ~/.config/vibeterm/config.toml).
All settings are optional; no config is needed. Unknown keys/invalid values are
rejected. --config PATH chooses a file; --check-config validates it.
Invalid reloads keep the old settings and running shell, showing an error in the footer.
Changes reload automatically after a short debounce, including atomic file replacements.
Deleting the file restores defaults. Ctrl+Shift+R also reloads explicitly. Files are
limited to 64 KiB; existing shells keep running when the configured shell changes.
| Action | Shortcut |
|---|---|
| New tab | Ctrl+Shift+T |
| Split side by side / above and below | Ctrl+Shift+E / O |
| Close active pane | Ctrl+Shift+W |
| Next / previous tab | Ctrl+Tab / Ctrl+Shift+Tab |
| Next / previous pane | Ctrl+Shift+Right / Left |
| Search history | Ctrl+Shift+F |
| Command palette | Ctrl+Shift+P |
| Copy selection | Ctrl+Shift+C |
| Paste clipboard | Ctrl+Shift+V or Shift+Insert |
| Paste primary selection | Middle click |
| Select text / word / line | Drag / double click / triple click |
| Select while a TUI captures mouse | Hold Shift |
| Scroll history | Wheel or Shift+PageUp / PageDown |
| Oldest history / return to prompt | Shift+Home / End |
| Increase / decrease font (whole window) | Ctrl+= / Ctrl+− |
| Reset font to configured size (also clears pane zoom) | Ctrl+0 |
| Increase / decrease font (focused pane only) | Ctrl+Shift+= / Ctrl+Shift+− |
| Reset focused pane to the window font | Ctrl+Shift+0 |
| Reload configuration | Ctrl+Shift+R |
| Clear footer notice (also sends Escape) | Escape |
Click a pane or tab to focus it. Limits are eight tabs and 32 total panes; splits
need enough room for useful cells. Drag the gap between panes to resize a split.
Dragging a selection past a pane's top or bottom edge scrolls history. Zoom survives
configuration reloads as an offset from the configured font_size. Pane zoom is an
offset from the window font, so window zoom keeps each pane's relative size. Panes
inside tmux share one grid and cannot be zoomed separately; use vibeterm splits.
Ctrl+Shift+− replaces the shell's Ctrl+_ undo; Ctrl+/ still sends it.
Search is literal and case-insensitive unless the query includes uppercase letters.
Enter finds the next match, Shift+Enter the previous match, and Escape closes search.
Output changes during a scan cancel its result; Enter retries. Queries are limited
to 256 UTF-8 bytes. Search selects one match at a time, which can be copied normally.
The palette filters commands as you type, shows unavailable actions, and supports
Up/Down, Enter, and Escape. Override shortcuts in [keybindings]; see the example
config. Empty strings disable bindings. Duplicate or invalid shortcuts reject the
entire reload. Palette/search consume their own navigation keys while open.
Releasing a selection updates primary selection; copy_on_select also updates the
regular clipboard. Paste is capped at 256 KiB and strips ESC to prevent escape from
the bracketed-paste envelope. Clipboard I/O runs off the UI thread. Wayland clipboard
availability depends on compositor data-control support or XWayland.
cargo fmt --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked
cargo build --examples --locked
python3 scripts/x11-smoke.py target/debug/vibeterm --workspace
# Optional pointer/clipboard checks, restoring pointer position afterward:
python3 scripts/x11-smoke.py target/debug/vibeterm --pointer
cargo run --release --locked --example replay -- 200000
python3 scripts/measure.py
PTY tests need real process/socket permissions. Desktop tests require display/GPU
access; the X11 script also uses xprop, ImageMagick, and libXtst. KWin prevented
synthetic pointer targeting in this session; manual mouse acceptance remains pending.
Performance results distinguish synthetic parsing and frame
submission from physical input latency. No competitor performance claim is made.
packaging/PKGBUILD builds a local source archive; instructions are at its top. A desktop entry and original icon are included. Packaging has been syntax/metadata checked only, not installed or published to AUR.
Next: complete manual input/backend acceptance, stress-test multi-pane workloads, and polish selection, accessibility, and packaging. Shell-aware navigation/workspaces follow in M3, external-process plugins in M4. AI is deferred. See status and architecture.