Nexa Clip
v0.1.2세 OS에서 똑같은 화면으로 동작하는 암호화 클립보드 매니저 — 승인한 내 기기끼리 종단 암호화로 동기화
모든 데스크톱 OS에서 사용할 수 있어요
- 0.81MB Windows x64 설치본 (게이트 10MB)
- 18.7MB 기동 RSS — Windows 실측 (Linux 설치본 12.4MB)
- 107ms 기동 시간 (blob 지연 로드 실측)
- 0 런타임 의존 · UI 프레임워크
- 5 × 2 OS 타깃 × 배포 채널 (자산 14종)
- 501 테스트 green · 3-OS clippy 0
설치
Windows
- 설치본 (권장) — GitHub Releases에서
nexa-clip-<버전>-windows-x64-setup.exe(ARM64는windows-arm64)를 받아 실행합니다. 사용자 단위 설치라 관리자 권한이 필요 없고(%LOCALAPPDATA%\Programs\NexaClip) UAC 창이 뜨지 않습니다. 브라우저가 exe를 막으면 같은 파일을 감싼-setup.exe.zip을 받으세요. 설치 후 실행하면 트레이에 상주합니다 — 로그인 시 자동 시작은 설정 › 일반에서 켭니다. - 포터블 —
nexa-clip-<버전>-windows-x64-portable.zip을 풀고nexa-clip.exe를 실행하면 끝입니다. 설정·암호화 이력·동기화 신원은 exe 옆data\폴더에만 생겨 폴더째 옮기면 그대로 따라옵니다. 같은 폴더의nclip-imgdec.exe(이미지 격리 디코더)는 지우지 마세요. - 릴리스마다
SHA256SUMS.txt가 함께 올라옵니다.Get-FileHash <파일> -Algorithm SHA256으로 대조하세요 — 서명이 없는 배포에서 유일한 검증 수단입니다. - 동기화를 켜면 첫 연결 때 Windows 방화벽 허용 창이 뜹니다 — 허용하세요(같은 네트워크 직결은 UDP
47301비콘 + 임의 TCP 포트, 릴레이는 아웃바운드 TCP·UDP47300).
시스템 요구사항: Windows 10 / 11 (x64 · ARM64) — .NET·Visual C++ 재배포 패키지가 필요 없습니다. 코드 서명 인증서가 아직 없어 SmartScreen 경고("알 수 없는 게시자")가 나올 수 있습니다 — "추가 정보 → 실행"으로 진행하세요. 관리자 권한으로 뜬 앱에는 일반 권한 앱이 키를 넣지 못하므로 그 창에는 클립보드에 실린 내용을 직접 Ctrl+V로 붙여넣으세요. 패키지 매니저 채널 현황 (2026-09-07 실측): ⏳ winget SosomLab.NexaClip · SosomLab.NexaClip.Portable, Chocolatey nexa-clip · nexa-clip-portable — 매니페스트는 릴리스 자산(…-package-manifests.zip)에 동봉되어 있지만 v0.1.0~v0.1.2는 아직 제출하지 않았습니다(저장소 변수로 제출을 끈 상태 · 다른 Nexa 앱의 첫 검수가 길어지는 경험을 반영). 제출·승인되면 여기에 winget install · choco install 카드를 추가합니다. 그때까지는 위 GitHub Releases에서 직접 받으세요.
macOS
Homebrew Cask (권장 — .app 설치)
brew install --cask kiros33/tap/nexa-clip 서명·공증 전이라 격리 표식이 붙은 채로는 macOS가 실행을 막습니다. Cask는 설치 시점에 격리 표식을 떼 주어 경고 없이 바로 실행되므로 macOS에서는 이 경로를 권장합니다. 탭이 릴리스를 자동 추종해 0.1.2가 반영된 것을 2026-09-07 실측으로 확인했습니다. 갱신은 brew upgrade --cask kiros33/tap/nexa-clip.
Homebrew Formula (포터블)
brew install kiros33/tap/nexa-clip-portable .app 번들 없이 실행 파일만 두는 포터블 판. 데이터는 실행 파일 옆 data/에 생깁니다.
- 수동 설치 — GitHub Releases의
.dmg(Apple Silicon =macos-arm64· Intel =macos-x64)를 열어Nexa Clip.app을 응용 프로그램으로 끌어 놓습니다. 직접 받은 경우 처음 열 때 Gatekeeper가 막으면xattr -dr com.apple.quarantine "/Applications/Nexa Clip.app"으로 격리 표식을 떼어 내세요. - 손쉬운 사용 권한 — 팝업에서 고른 항목을 원래 앱에 붙여넣으려면(⌘V 주입) 첫 실행 또는 첫 붙여넣기 때 뜨는 대화상자에서 허용합니다(시스템 설정 → 개인정보 보호 및 보안 → 손쉬운 사용). 앱을 새로 설치해 서명이 바뀌면 옛 항목이 무효가 되므로 목록에서 지운 뒤 다시 추가하세요.
- 데이터는
~/Library/Application Support/nexa-clip(포터블은 실행 파일 옆data/)에 생깁니다.
Apple Silicon · Intel 둘 다 네이티브 자산이 있습니다. 메뉴바에 상주하며 Dock 아이콘은 설정 › 일반에서 끌 수 있습니다. 전역 단축키는 권한 없이 동작합니다(Carbon RegisterEventHotKey). 클립보드 감시는 changeCount 적응형 폴링이라 한 복사가 두 항목으로 잡히지 않도록 settle 대기를 둡니다.
Linux
deb 패키지 (권장)
sudo dpkg -i nexa-clip-<버전>-linux-x64.deb GitHub Releases에서 받은 파일명으로 바꿔 실행합니다. /usr/bin/nexa-clip + 앱 메뉴 아이콘 + 자동 시작 항목이 등록되고, 데이터는 ~/.config/nexa-clip에 생깁니다. 앱 메뉴 아이콘으로 띄우세요 — 터미널에서 직접 실행하면 포털이 앱을 식별하지 못해 전역 단축키 등록이 실패할 수 있습니다. 업그레이드는 새 .deb를 같은 명령으로.
Homebrew Formula (포터블)
brew install kiros33/tap/nexa-clip-portable Linuxbrew를 쓰는 환경. 실행 파일만 두는 포터블 판입니다.
포터블 tar.gz
tar xzf nexa-clip-<버전>-linux-x64-portable.tar.gz && ./nexa-clip 풀어서 바로 실행. 영속물은 실행 파일 옆 data/에 생깁니다.
현재 x86_64 자산만 제공합니다. 산출물은 glibc 2.17 기준으로 링크되어(zig 링커 · .deb 의존은 libc6 >= 2.17뿐) 배포판을 가리지 않고, 클립보드 감시는 외부 도구(xclip·wl-paste) 없이 내재화되어 있습니다. GNOME/Wayland는 포털 승인이 두 번 필요합니다 — 첫 실행 때 전역 단축키(GlobalShortcuts), 첫 붙여넣기 때 키 주입(RemoteDesktop). 승인 뒤 상단 바에 "화면 공유" 표시가 뜨는 것은 정상이며, 승인 토큰을 사용자 설정 폴더에 저장해 버전을 올려도 다시 묻지 않습니다(v0.1.2). 셸이 그 세션을 닫아도 자동으로 다시 열어 붙여넣습니다. 터미널(VTE)은 Ctrl+V가 아니라 Ctrl+Shift+V를 쓰므로 자동 주입이 안 붙을 수 있습니다 — 클립보드에는 실려 있으니 직접 붙여넣으세요. 설치본 기준 실기(Linux VM ↔ macOS 호스트 LAN 세션 · 단축키 · 키 주입)는 2026-09-05에 확인했습니다.
복사한 텍스트·이미지·파일 경로·서식이 로컬에 암호화되어 쌓이고, 단축키 한 번(Shift+Alt+C)으로 팝업을 열어 검색한 뒤 원래 앱에 바로 붙여넣습니다. 올 러스트 단일 실행 파일에 자체 CPU 래스터라이저(Qt·WebView·Electron 없음)라 Windows·macOS·Linux 화면이 픽셀 단위로 같습니다. 동기화는 선택 — 같은 네트워크 직결 또는 릴레이 서버를 거쳐, 승인한 기기와만 Noise 종단 암호화로 주고받습니다. Windows 설치본 약 0.8MB · 기동 RSS 18.7MB.
스크린샷
주요 기능
- 3-OS 동일 화면 · 단일 실행 파일 Qt·WebView·Electron 없이 자체 CPU 래스터라이저로 모든 픽셀을 직접 그립니다. Windows · macOS · Linux에서 픽셀 단위로 같은 화면이고, 동작 관례(수식 키·스크롤·메뉴)만 각 OS 네이티브를 따릅니다.
- 퀵 팝업 — 단축키 → 검색 → Enter Shift+Alt+C로 커서 위치에 팝업이 뜨고 검색줄에 바로 입력합니다(한글 조합 중 검색). Ctrl+1~9 즉시 선택, ↑↓·Enter·Esc만으로 완결, 여러 항목을 순서대로 붙여넣는 붙여넣기 스택.
- 붙여넣기 4모드 + 평문 붙여넣기 Enter 원본 · Shift+Enter 평문 · Ctrl+Enter 객체로 · Alt+Enter 경로만. 팝업을 닫으면 원래 창에 키 주입으로 붙여넣어지고, 전역 단축키 Shift+Alt+X는 지금 클립보드를 서식 없이 붙여넣은 뒤 원본을 복원합니다.
- 서식·원본 형식 보존 HTML/RTF 서식과 평문을 함께 보관하고 Word·PowerPoint·Excel의 원본 형식을 이름째 보존합니다. PPT 도형·차트를 다시 붙여넣어도 그림으로 떨어지지 않고, 필요하면 "이미지로 복사"로 그림처럼 붙일 수도 있습니다.
- 이미지 · 파일 경로 캡처 이미지는 PNG로 보존하고 섬네일을 만들며, 복사한 파일·폴더 경로 목록도 항목이 됩니다(Win+V가 못 하는 것). 이미지 디코드는 별도 격리 프로세스에서만 이뤄져 파서 취약점이 본체를 건드리지 못합니다.
- 검색 3방식 · 본문까지 정확히 · 유사(기본) · 정규식 세 방식으로 라벨과 본문을 RAM 색인에서 찾습니다. 검색줄 앞 드롭다운으로 방식을 바꾸고, 팝업과 메인창이 같은 규칙을 씁니다.
- 메인창 보기 3모드 · 미리보기 리치(번호·여러 줄·섬네일) · 상세(종류 아이콘·출처 앱) · 평문(한 줄) 보기를 Alt+1/2/3으로 오가고, 미리보기 패널이 서식·터미널 색(ANSI)·인라인 이미지를 스크립트·네트워크 없이 그립니다.
- 암호화 저장이 기본 이력은 ChaCha20-Poly1305 봉투로 봉인된 append-only 세그먼트 + 내용 주소 blob에 저장됩니다(기본 켜짐). 보관 정책은 개수·기간·용량 셋을 다 제공하고 핀 항목은 면제됩니다.
- 민감 정보는 알아서 피한다 비밀번호 관리자가 보내는 OS 민감 표식을 존중해 캡처하지 않고, 제외 앱 목록·민감 출처 가리기·종료 시 이력 삭제·기록 모두 삭제(2초 안에 두 번)를 제공합니다. 비밀이 실린 파일은 소유자만 읽습니다(0600).
- 내 기기끼리 동기화 — 승인한 기기와만 아이디와 페어링 암호 두 줄로 내 기기들이 만나고, 6자리 대조 코드를 눈으로 확인해 승인한 기기와만 평문·PNG를 Noise 종단 암호화로 주고받습니다. 받은 항목은 ⇄ 출처가 붙고 되돌려 보내지 않습니다.
- 같은 네트워크 직결 · 릴레이는 선택 같은 Wi-Fi면 UDP 비콘 + TCP 직결로 서버 없이(None) 연결됩니다. 다른 네트워크와는 릴레이 서버(공식 beepd.sosomlab.com 또는 직접 세운 nexa-beepd)를 거치되 서버는 봉투만 봅니다.
- 가볍다 — 설치본 0.8MB · 기동 RSS 18.7MB 런타임 의존 0의 순수 Rust. 메모리 상주 계층(식은 본문 즉시 내림 · 섬네일 LRU)으로 기동 RSS 82→18.7MB, blob 지연 로드로 기동 1.8초→107ms. 산출물·유휴 메모리는 CI 게이트로 지킵니다.
- 트레이 상주 · 최근 항목 메뉴 · 자동 시작 실행하면 트레이(메뉴바)에 상주합니다. 좌클릭 = 메인창, 우클릭 = 최근 항목·설정·종료, 아이콘 녹색 점 = 릴레이 연결. 로그인 시 자동 시작은 설정 한 줄이고, 두 번 실행하면 기존 인스턴스를 앞으로 불러옵니다.
기능 자세히 보기
캡처 — 클립보드에서 우리 쪽으로
복사한 것이 무엇으로 잡히는지가 이 제품의 출발점입니다. 종류를 가리지 않고 잡되, 잡지 말아야 할 것은 잡지 않습니다.
- 클립보드 감시 3-OS Windows는
WM_CLIPBOARDUPDATE이벤트, macOS는changeCount적응형 폴링, Linux는 X11XFIXES를 순수 Rust로 내재화(x11rb)해 외부 도구 없이 감시합니다(Wayland는 XWayland 브리지). 지원하지 않는 컴포지터는 조용히 실패하는 대신 "수집 불가"로 정직하게 표시합니다.nexa-clip watch·peek진단 명령으로 무엇이 잡히는지 실기로 볼 수 있습니다. - 텍스트 · 이미지 · 파일 경로 텍스트는 UTF-8·개행 정규화, 이미지는 PNG 보존 + 섬네일(긴 변 96px 기본), 파일·폴더는 경로 목록으로 잡습니다(Windows
CF_HDROP· macOS file URL · Linuxtext/uri-list). Linux 터미널·Firefox의 charset 없는text/plain이 이스케이프 문자열로 잡히던 함정은 UTF-8 보장 순위로 막았습니다. - 서식 · 원본 형식 보존 (Word · PPT · Excel) HTML/RTF 서식을 평문과 함께 보관하고, Office 개체·GVML 같은 원본 형식을 이름째 보존합니다. HTML/RTF만으로는 PPT 도형이 그림으로 떨어진다는 실기 결과가 이 설계를 정했습니다. macOS PowerPoint 자동 실기 12/12(서식 텍스트·글상자 2개 — 복사 → 재게시 → 붙여넣기에서 색·도형 보존)로 검증했습니다.
- 출처 앱 기록 · 중복 승격 어느 앱에서 복사했는지를 항목마다 기록해 목록·미리보기·우클릭 메뉴에 보여 줍니다. 같은 내용을 다시 복사하면 새 항목을 만들지 않고 기존 항목을 맨 위로 올리며(복사 수 ×N), 서식만 다른 같은 텍스트(평문 ⊆ 원본)도 원본으로 승격합니다.
- 크기 상한 · 표현별 상한 표현 1개 8MB · 항목 전체 32MB 상한(설정)으로 할당 폭탄을 막습니다. 상한은 읽고 나서가 아니라 읽는 도중 집행합니다(
cap+1까지만 스트리밍). - 격리 이미지 디코드 (nclip-imgdec) 이미지 파서는 역사적으로 RCE의 단골 통로라 본체는 파서를 링크하지 않습니다. 섬네일·미리보기는 별도 프로세스
nclip-imgdec가 디코드하고 본체가 픽셀을 다시 검증합니다. 팔레트·16비트 PNG를 거부하던 문제는 v0.1.2에서 고쳤고, 섬네일이 없던 옛 항목도 다시 열면 스스로 만듭니다. - 감시 정지 / 재개 · 다음 1건만 무시 툴바의 2상 토글(벽돌/초록)로 캡처를 세션 한정으로 멈추고 재개합니다. 민감 표식 > 일시정지 > 다음 1건 순의 게이트가 캡처 앞에 서 있습니다.
퀵 팝업 · 붙여넣기
클립보드 매니저의 경쟁 상대는 다른 매니저가 아니라 "그냥 원본을 다시 복사하러 가는 것"입니다. 단축키 → 검색어 2~3자 → Enter, 3초 안에 끝나야 합니다.
- 전역 단축키 → 커서 위치 팝업 기본 Shift+Alt+C. 팝업은 현재 마우스 위치(설정으로 화면 중앙·마지막 위치)에 뜨고 검색줄에 포커스가 있습니다. 다른 앱이 같은 조합을 쥐고 있어 등록에 실패하면 로그에 사유가 남고, 트레이 좌클릭으로 언제나 메인창을 열 수 있습니다. 팝업이 뜬 직후의 합성 키·자동 반복은 무시해 단축키 글자가 검색창에 들어가지 않습니다(v0.1.2).
- 포커스 복원 + 키 주입 항목을 고르면 팝업을 닫고 원래 포커스 창에 붙여넣습니다 — Windows
SendInput, macOSCGEvent(손쉬운 사용 권한), Linux는 X11 XTest / Wayland 포털 RemoteDesktop. 권한이 없으면 "클립보드에 되돌리기"로 정직하게 강등하고, Linux 포털 세션이 셸에 의해 닫혀도 저장 토큰으로 자가 복구합니다. - 붙여넣기 4모드
Enter원본 ·Shift+Enter평문 ·Ctrl+Enter객체로 ·Alt+Enter경로만. 항목 종류에 따라 적용 가능한 모드만 힌트 줄에 뜹니다. "항상 평문으로" 설정으로 기본을 바꿀 수 있습니다. - 평문 붙여넣기 전역 단축키 Shift+Alt+X는 팝업 없이 지금 클립보드 내용을 서식 없이 붙여넣고 원본 클립보드를 복원합니다. 터미널이나 평문 편집기에 서식이 딸려 들어가는 일이 없습니다.
- 번호 단축키 Ctrl+1~9 · 보기 Alt+1/2/3 검색 필드가 항상 포커스를 갖기 때문에 맨숫자가 아니라
Ctrl+1~9(mac⌘1~9)로 보이는 순서 N번째 항목을 즉시 고릅니다(물리 키 자리 · 한글 자판 무관). 1~9행 우측에 배지가 붙고, 보기 3모드는Alt+1/2/3(mac⌥)입니다. - 붙여넣기 스택 여러 항목을 담아 순서대로 소비합니다. 양식을 채우거나 코드 조각을 차례로 옮길 때 팝업을 매번 열지 않아도 됩니다.
- 단축키 사용자 정의 설정 › 단축키에서 퀵 팝업 · 보조 팝업 · 평문 붙여넣기 세 조합을 바꿉니다. 칸을 누르고 원하는 조합을 치면 캡처 오버레이가 잡고(제거·확인·취소), 저장 즉시 다시 등록됩니다(3-OS 등록 모델 · Windows 즉시 재등록). 편집 단축키는 물리 키로 판정해 한글 자판에서도 동작합니다.
메인창 · 검색 · 미리보기
팝업이 3초용이라면 메인창은 정리용입니다. 세로 밀도를 우선해 좌측 세로 툴바와 3가지 보기 모드로 구성했습니다.
- 좌측 세로 툴바 · 보기 3모드 핀 · 삭제 · 복사 · 평문 복사 · 중복 제외(토글) · 미리보기 · 최상위 고정 · 감시 정지/재개 · 설정. 보기는 리치(번호·여러 줄·이미지 섬네일) · 상세(종류 아이콘·출처 앱) · 평문(한 줄 압축)이고
Alt+1/2/3으로 바꿉니다. 목록은 가상화되어 1만+ 항목도 매끄럽습니다. - 검색 — 정확히 · 유사 · 정규식 검색줄에 입력하면 즉시 걸러집니다. 앞의 드롭다운(SVG 아이콘 3종)에서 방식을 고르고, 라벨뿐 아니라 본문도 RAM 색인에서 찾습니다. 유사 검색은 한글 조합 중에도 반영되며 기본 방식은 설정 › 검색에서 정합니다.
- 미리보기 — 제한 리치텍스트 렌더러 굵기·색·기울임·목록 불릿·들여쓰기·배율·인라인
data:이미지를 그리고, 터미널에서 복사한 텍스트는 색·글꼴·배경과 ANSI SGR까지 재현합니다(고정폭 슬롯ui.font_mono· Nerd Font 폴백). Outlook이 Wingdings로 보내는 불릿도 ■로 치환합니다. 스크립트·네트워크 접근은 0입니다. - 항목 우클릭 메뉴 복사 · 평문으로 복사 · 고정 · 편집(평문화) · 이미지로 복사(PNG +
CF_DIB— PPT에 그림처럼 붙여넣기) · 삭제. 더블클릭·Enter·이미지로 복사 뒤에는 항목이 옮겨 간 새 자리로 선택·스크롤이 따라가고 미리보기는 유지됩니다. - 중복 제외 보기 (기본 켬) 같은 내용은 한 행만 보입니다 — 내 PC에서 복사한 것이 있으면 그것이 대표, 없으면 가장 최근에 받은 것. 출처는 합쳐서 메타로(내 앱 이름 앞 · ⇄ 기기들 뒤), 복사 수는 합산됩니다. 끄면 출처별로 나뉜 행이 보이고 팝업도 같은 규칙을 따릅니다.
- 설정 창 — 10 카테고리 · 즉시 적용 일반 · 캡처 · 보관 · 보안·개인정보 · 붙여넣기 · 단축키 · 모양 · 검색 · 동기화 · 고급. 상단 검색으로 항목을 찾고, 값은 바꾸는 즉시 적용되며 저장은 잠시 뒤 묶어서 합니다(저장 버튼 없음).
Ctrl+,(mac⌘,)로 열리고, 메인창 옆 모니터에 열려 마지막 위치를 기억합니다.
저장 · 프라이버시
클립보드에는 비밀번호·API 토큰·주민번호가 매일 지나갑니다. 사용자가 설정하기 전에 안전해야 합니다.
- 암호화 세그먼트 + 내용 주소 blob 인덱스는 append-only 암호화 세그먼트 + manifest, 본문·이미지는 내용 주소 blob(중복 제거가 공짜로 옵니다). 봉투는 ChaCha20-Poly1305에 파일 종류별 도메인 분리 키, 마스터 키는 기기 키
device.key로 봉인합니다. 암호화 저장이 기본 켜짐이라 SQLite+FTS 대신 이 구조를 골랐습니다 — 암호문에는 DB 인덱스를 걸 수 없기 때문입니다. - 보관 정책 — 개수 · 기간 · 용량 최대 항목 수(기본 1,000 · 실사용량 표시) · 최대 보관 기간 · 최대 용량(기본 2,048MB) 셋을 다 제공하고 핀 항목은 면제됩니다. 무거운 원본 형식(Office 클립보드는 수 MB)은 표현별 차등 수명(기본 7일)으로 먼저 회수하고, 이력 압축 옵션이 있습니다.
- 민감 표식 존중 · 제외 앱 · 민감 출처 가리기 Windows
ExcludeClipboardContentFromMonitorProcessing· macOSorg.nspasteboard.ConcealedType· KDEx-kde-passwordManagerHint— 비밀번호 관리자가 보내는 "기록하지 마" 신호를 기본 켜짐으로 존중해 캡처 자체를 하지 않습니다. 표식을 안 보내는 앱은 제외 앱 목록으로, 브라우저 비밀번호 화면 같은 출처는 가리기로 막습니다. - 종료 시 이력 삭제 · 기록 모두 삭제 설정 › 보안·개인정보의 "종료 시 이력 삭제"와 고급의 "기록 모두 삭제"(2초 안에 두 번 클릭 — 파괴적 동작 확인). 기기 키가 바뀌면 옛 이력은 조용히 초기화되지 않고
index.locked로 보관됩니다 — 보관은 삭제가 아닙니다. - 비밀 파일 0600 · 화면 표시 전 무해화 페어링 암호가 실리는
settings.cfg, 기기 키, 동기화 신원 키, 포털 승인 토큰은 생성 시점부터 소유자만 읽고 쓰게(0600) 만듭니다(v0.1.2). 화면에 그리기 전 RLO·제어 문자를 무해화해 텍스트가 화면을 속이지 못하게 합니다. - 메모리 상주 계층 (DR-42) 식은 본문은 즉시 내리고 30초 GC, 섬네일은 384² PNG blob으로 이관해 LRU 캐시(기본 200장)로만 올립니다 → 기동 RSS 82 → 18.7MB. blob은 지연 로드해 기동 1.8초 → 107ms, 26MB 이력 복원은 43ms입니다. 요청/수행을 분리하고 폭주는 마지막만 덮어쓰는 최소 처리 원칙(DR-41)이 UI 스레드를 기다리지 않게 합니다.
- 데이터 위치 · 포터블 · 프로필 포터블은 실행 파일 옆
data/, Windows 설치본도 exe 옆data\, macOS는~/Library/Application Support/nexa-clip, Linux.deb는~/.config/nexa-clip. 설정·암호화 이력·동기화 신원 키·기기 목록·승인 상태가 여기 있고 업그레이드해도 남습니다.--profile <이름>으로 한 PC에서 별도 데이터(data/profiles/<이름>)를 갖는 두 번째 인스턴스를 띄울 수 있습니다.
기기 간 동기화 — 승인한 기기와만
릴레이는 "닿는가"를 풀지 "같은 사람인가"를 풀지 않습니다. 신뢰는 사람의 승인에서만 생깁니다 — 여기는 타협하지 않습니다.
- 아이디(핸들) + 페어링 암호 새 기기에서 두 줄만 입력합니다. 핸들은 공개 라벨, 페어링 암호는 만남 지점을 계산하는 비밀입니다 —
PBKDF2-HMAC-SHA256(암호, "nclip-rid-v1" ‖ 핸들 ‖ 날짜)로 회전 랑데부 ID를 파생하므로 암호를 모르면 사전 스캔이 성립하지 않고, 같은 핸들이라도 암호가 다르면 만나지 않습니다. 암호는 서버로 가지 않고 인증에도 쓰이지 않습니다. 핸들을 넣으면 암호가 자동 추천되고 눈/생성(두 번 클릭) 버튼이 있습니다. - 기기별 승인 + 6자리 대조 코드 랑데부가 성립해도 자동으로 붙지 않습니다. 기기 목록의 행마다 [승인/해제]·[삭제] 버튼과 연결 중 6자리 대조 코드가 뜨고, 양쪽 화면의 코드가 같은지 눈으로 확인한 뒤 각 PC에서 승인합니다(옮겨 적지 않음 · 기기당 1회 · 파일에 남음). 승인하지 않은 기기와는 아무것도 주고받지 않습니다 — 암호가 유출돼도 승인이 방어선입니다.
- 복사 즉시 자동 전파 승인된 기기에는 복사한 평문 텍스트와 PNG 이미지(DIB만 있으면 PNG로 변환 · 팔레트/16비트 PNG도 수신측 정상 표시)가 즉시 전파되어 상대 이력 맨 위에 들어가고 클립보드에도 실립니다. 파일(경로 목록)과 리치 서식 전파는 아직입니다. 밀린 항목은 최신 하나만 보냅니다.
- 수신 표시 ⇄ · 핑퐁 방지 받은 항목은 번호 아래 녹색 점과 출처(
⇄ 기기이름)가 붙고, 어떤 경로로도 상대에게 되돌려 보내지 않습니다(수신 표식 = 영속 플래그). 보낸 기기별로 별도 항목이며 같은 기기에서 다시 오면 그 항목이 위로 올라갑니다(×N). - 기기 이름 · 재소개 다른 기기에 보이는 이름은 비우면 컴퓨터 이름을 정제해 씁니다(실명 추정 부분 제거). 바꾸면 약 1초 뒤 연결된 모든 세션(릴레이·LAN · 승인 무관)에 재소개되어 상대 목록이 바로 갱신됩니다.
- 연결 상태 표시 트레이 아이콘 좌상단 녹색 점 = 릴레이 연결, 메인창 툴바 케이블/플러그 아이콘, 상태줄 오른쪽 점 — 녹색 릴레이 · 파랑 None(같은 네트워크만) · 회색 동기화 끔 · 흐림 릴레이 설정됐지만 미연결. 마우스를 올리면 툴팁이 뜹니다.
- 한 PC에서 두 기기처럼 (--profile)
nexa-clip --profile b로 데이터·단일 인스턴스 가드·창 제목·기기 이름이 분리된 두 번째 인스턴스를 띄워 동기화를 시험합니다. 두 인스턴스가 같은 OS 클립보드를 감시하는 에코는 원본 승격으로 흡수됩니다.
같은 네트워크 직결 · 릴레이 서버
같은 Wi-Fi 안이면 서버가 없어도 됩니다. 릴레이는 다른 네트워크의 기기와 만나기 위한 선택이고, 어느 경로든 내용은 두 기기만 읽습니다.
- UDP 비콘 + TCP 직결 (릴레이 None) 각 기기가 5초마다 UDP 비콘(포트
47301)을 브로드캐스트합니다 — 핸들·암호에서 파생한 태그와 기기 키, TCP 포트만 실리고 암호 자체나 릴레이 만남 지점은 실리지 않습니다. 태그가 같은 기기를 찾으면 키 값이 작은 쪽이 TCP로 연결해 릴레이와 같은 Noise 핸드셰이크를 합니다. 상대가 붙어 있으면 비콘은 30초로 느려지고, 핸들·암호를 뒤늦게 채워도 800ms 뒤 자동 재기동합니다. - 릴레이 서버 — 공식 · 직접 입력 · None 설정 › 동기화의 릴레이 서버는
beepd.sosomlab.com(공식 · 기본값) · 직접 입력 · None 중 하나입니다. [테스트] 한 번으로 접속하고 성공하면 자동 접속이 켜져 다음 실행부터 같은 상태로 시작합니다. 아이디·암호·서버·포트를 바꾸거나 동기화를 끄면 즉시 해제됩니다(연결 수명 계약). 릴레이와 LAN 두 경로가 모두 서면 뒤에 온 세션을 버립니다. - 서버는 봉투만 본다 · 서버 핀 (TOFU) 서버에 올라가는 것은 날마다 바뀌는 16바이트 랑데부 ID와 공인 IP:포트뿐이고, 홀펀칭이 실패해 서버가 대신 나르는 데이터도 종단 암호문입니다. 서버 공개키는 첫 접속에 고정되고 바뀌면 접속을 멈추고 경고합니다 — 접속 성공 노트에 뜨는 핀 앞 8자를 위키에 공개된 값과 대조하세요.
- 릴레이 서버는 별도 프로그램 (nexa-beepd) Nexa Clip에는 서버가 들어 있지 않습니다. Nexa Beep 저장소의
crates/nexa-beepd가beepd-v*별도 태그로 배포하는 단일 실행 파일이며, 저장이 없어 재시작이 언제나 안전하고 상주 메모리는 1MB 안팎입니다. 직접 세우려면brew install kiros33/tap/nexa-beepd또는 릴리스 자산을 받아 TCP·UDP47300을 열고, 첫 실행이 출력하는 서버 핀 64자를 사용자에게 알리면 됩니다. - 애플리케이션 격리 — Beep과 Clip은 서로를 못 본다 같은 서버를 쓰지만 랑데부 파생의 도메인 문자열(
nclip-rid-v1vsnbeep-rid-v1)이 달라 애초에 같은 만남 지점에 서지 않고, Noise prologue(nexa-clip/1)가 달라 우연히 만나도 핸드셰이크가 수학적으로 실패합니다. "앱이 다르면 거부"라는 판정 코드가 없으니 잊거나 우회할 코드도 없습니다. - 재시도 정책 · 과다 트래픽 예방 실패마다 대기가 2배(표준 5초→최대 5분 · 느긋 15초→15분 · 적극 2초→1분 · ±20% 지터 · 성공 시 초기화). 동시 핸드셰이크 4개, 실패한 상대 IP 30초 냉각, 초당 비콘 수신 20개 상한, 피어별 수신 예산(10초에 24MB), 재전송 2초 억제 — 릴레이와 LAN 모두에 적용됩니다.
화면 · 상주 · 플랫폼
OS 위젯을 쓰지 않고 모든 픽셀을 직접 그립니다. 24시간 켜져 있는 프로그램이라 눈에 띄면 이미 실패입니다.
- 자체 CPU 래스터라이저 · 디자인 토큰 Nexa Beep의
gfx·ctl을 이 프로젝트 이름으로 흡수한 렌더·컨트롤 계층 위에 간격·타입·상태 레이어·엘리베이션·모션 토큰을 코드화했습니다. 행·버튼·콤보의 hover 페이드(1000ms), 오버레이·시트 딤·그림자·반투명 구분선의 알파 합성, hover 의도 코얼레싱(70ms · 스크롤 중 안정)까지 갖췄습니다. Material 골격 + macOS 마감. - 트레이 / 메뉴바 상주 (3-OS) Windows
Shell_NotifyIcon· macOSNSStatusItem· Linux SNI. 좌클릭 = 메인창, 우클릭 = 최근 항목(개수 설정)·설정·종료, 아이콘 좌상단 녹색 점 = 릴레이 연결. 설치본 실행·바로가기는 인자 없이 트레이 상주(콘솔 없음)이고, macOS는 Dock 아이콘 표시를 끌 수 있습니다(Accessory 정책). - 자동 시작 · 단일 인스턴스 설정 › 일반의 "로그인할 때 자동 시작"(Windows Run · macOS LaunchAgent · Linux XDG autostart · 사용자 수준). 같은 PC에서 두 번 실행하면 두 번째는 떠 있는 인스턴스에 "열기"만 넘기고 조용히 끝납니다. Linux는 패키지 설치본이 있으면 사용자 런처를 설치본으로 유지해 개발 빌드가 아이콘을 가로채지 않습니다(v0.1.2).
- 테마 · 글꼴 · 글꼴 폴백 체인 시스템/라이트/다크 테마(OS 추종), UI 글꼴·고정폭 글꼴 슬롯. 주 글꼴에 없는 기호·이모지는 OS별 기호 글꼴 폴백이 자동으로 붙어 □(두부)로 보이지 않습니다 — Windows Segoe UI Symbol → Emoji(흑백), macOS Apple Symbols, Linux DejaVu Sans → Noto Sans Symbols2. 기동 로그의
글꼴 폴백:줄에서 커버를 확인합니다. - 창 위치 기억 · 앞으로 가져오기 메인창은 이동 시 저장하고 모니터 밖이면 보정합니다. 설정 창은 최상위 고정을 따라가고 메인창 옆에 열리며 모니터별로 위치를 기억합니다. Linux/X11에서 창이 뒤에 뜨고 "준비됨" 알림만 뜨던 문제는 Mutter의 포커스 탈취 방지를 존중하는 페이저 소스로 직접 올려 해결했습니다(v0.1.2).
- 진단 — status · 로그
nexa-clip status가 이 PC에서 무엇이 되고 안 되는지(권한·클립보드·단축키·주입) 점검 결과를 보여 줍니다. 터미널에서 직접 띄우면 로그가 찍히고동기화:·LAN 직결:·전역 단축키:줄에 접속·해제·전파·재시도·등록 실패 사유가 그대로 남습니다. 항목 내용은 로그에 남기지 않습니다(id·타입·크기·사유만).
예산 · 품질 · 배포
가벼움은 약속이 아니라 게이트이고, 실기 결함은 회귀 테스트로 박제합니다.
- 예산 게이트 · 실측 산출물 ≤10MB(Windows x64 설치본 0.81MB · 포터블 zip 0.96MB · macOS dmg 1.5MB · Linux deb 1.7MB) · 기동 RSS 18.7MB(Windows · Linux 설치본 12.4MB) · 기동 107ms. 릴리스 프로필은
opt-level z· fat LTO · 심볼 제거이고, debug 빌드에서도 암호 원어는 최적화합니다(ChaCha20이 opt 0에선 10MB/s라 시작을 잡아먹는 실측). - 테스트 501 green · 3-OS CI clippy 경고 0(
-D warnings), push 전 3타깃 clippy 스크립트(check-3os.sh), 3-OS CI. 실기 결함 18건(PPT·Excel·Edge·VS Code·Greenshot·CopyQ)을 회귀로 박제했고, macOS PowerPoint 자동 실기 12/12 · 붙여넣기 자동 실기 3/3 · 실 파스텔보드 왕복 검사가 있습니다. Windows↔macOS↔Linux VM 세 OS에서 설치본 자리(/usr/bin·/Applications·%LOCALAPPDATA%\Programs) 기준으로 실기합니다. - 5타깃 × 2채널 자동 배포 Windows x64·ARM64(NSIS 설치본 · 포터블 zip) · macOS Apple Silicon·Intel(dmg · tar.gz) · Linux x64(deb · tar.gz) — 자산 14종 +
SHA256SUMS.txt. 태그 =Cargo.toml버전이어야 통과하고, push 하나로 릴리스 공개 → Homebrew 탭 갱신 → winget/Chocolatey 매니페스트 생성까지 이어집니다. 직전 제출이 검수 중이면 그 채널만 자동으로 건너뛰는 guard 잡이 있습니다. - Linux — 배포판 비종속 GUI 앱은 Wayland·xkbcommon을 런타임 dlopen하므로 musl 정적이 불가합니다. 대신 zig 링커로 glibc 2.17 기준 링크해 CentOS 7·Ubuntu 14.04 이후 어느 배포판에서든 실행되고, 심볼 게이트가 glibc 계열 외 라이브러리 링크와 2.17 초과 심볼을 막습니다.
.deb의존은libc6 (>= 2.17)뿐입니다. - 문서 · 위키 · 라이선스 설계 문서 30여 종(비전 · 경쟁 조사 · 저장 설계 · 신원·페어링 · 전파 · 결정 기록 DR-42까지)이 저장소
docs/에, 사용자 안내는 위키 10페이지 + 화면 캡처 20장에 있습니다. PolyForm Noncommercial 1.0.0 — 개인·비상업 사용은 무료, 상업 사용은 별도 유료 라이선스(문의[email protected]). 자세한 조건은 서비스 약관을 참고하세요.
소개
Nexa Clip은 Windows · macOS · Linux에서 똑같이 생긴 화면으로 동작하는 클립보드 매니저입니다. 하루에 수십~수백 번 복사·붙여넣기를 하면서 여러 OS를 오가는 사람 — 개발자·기획자·번역가·운영자 — 을 위해 만들었습니다. 복사한 모든 것을 세 OS에서 같은 화면으로, 암호화해 보관하고, 내 기기 어디서든 한 번에 꺼내 쓰는 상주 도구라는 한 줄이 제품의 정의입니다. 요약하면 "Ditto의 능력 · Maccy의 가벼움 · CopyQ의 이식성을, 프레임워크 없이 우리가 그린 한 벌의 화면으로"입니다.
경쟁 제품 여섯을 조사해 세 가지 차별점을 정했습니다. ① 3-OS 완전 동일 화면 — CopyQ는 Qt 룩, EcoPaste·PasteBar는 OS WebView라 화면이 OS마다 다른데, Nexa Clip은 OS 위젯도 UI 프레임워크도 쓰지 않고 모든 픽셀을 직접 그립니다. ② 암호화가 기본값 — 이력은 로컬에 암호화 저장되고(기본 켜짐 · 조사한 여섯 제품 중 기본 켜짐은 0개) 기기 사이 전송은 종단 암호화로 봉인됩니다. ③ 상주 예산 게이트 — 24시간 켜져 있는 프로그램이라 유휴 메모리·산출물 크기·기동 시간을 게이트로 강제합니다. 1Clipboard(Electron)가 죽은 이유가 이 항목 하나였습니다.
캡처는 텍스트·이미지(PNG 보존 + 섬네일)·파일과 폴더 경로·HTML/RTF 서식을 모두 잡고, Word·PowerPoint·Excel이 올리는 원본 형식을 이름째 보존합니다 — 그래서 PPT 도형을 다시 붙여넣어도 그림이 아니라 도형으로 들어갑니다. 어느 앱에서 복사했는지(출처 앱)를 함께 기록하고, 같은 내용을 다시 복사하면 새 항목 대신 기존 항목을 맨 위로 올립니다. 비밀번호 관리자가 보내는 "기록하지 마" 표식을 존중해 캡처 자체를 하지 않으며, 제외 앱 목록과 캡처 일시 정지 토글도 있습니다. 이미지 파서는 본체에 링크하지 않고 별도 격리 프로세스(nclip-imgdec)에서만 디코드합니다.
가장 빠른 경로는 퀵 팝업입니다. Shift+Alt+C를 누르면 커서 위치에 팝업이 뜨고 검색줄에 바로 입력할 수 있습니다 — 한글 조합 중에도 검색되고, Enter는 원본 · Shift+Enter는 평문 · Ctrl+Enter는 객체로 · Alt+Enter는 경로만 붙여넣습니다. Ctrl+1~9(mac ⌘1~9)로 보이는 순서의 항목을 즉시 고르고, 여러 항목을 담아 순서대로 소비하는 붙여넣기 스택도 있습니다. 팝업은 포커스를 훔치고 반드시 돌려줍니다 — 고른 뒤에는 원래 있던 창에 키 주입으로 붙여넣어지고, Shift+Alt+X는 지금 클립보드를 서식 없이 붙여넣은 뒤 원본을 복원합니다.
메인창은 왼쪽 세로 툴바(핀·삭제·복사·평문 복사·중복 제외·미리보기·최상위 고정·설정)와 검색줄, 목록, 미리보기로 이뤄집니다. 보기는 리치(번호·여러 줄·이미지 섬네일) · 상세(종류 아이콘·출처 앱) · 평문(한 줄 압축) 세 모드를 Alt+1/2/3으로 오가고, 검색은 정확히 · 유사(기본) · 정규식 세 방식으로 라벨뿐 아니라 본문까지 RAM 색인에서 찾습니다. 미리보기는 제한 리치텍스트 렌더러가 굵기·색·목록·들여쓰기·인라인 이미지·터미널 색(ANSI)을 그리되 스크립트·네트워크는 0입니다. 설정 창은 10개 카테고리를 검색으로 찾아 바꾸는 즉시 적용됩니다(Ctrl+,).
저장은 append-only 암호화 세그먼트 + 내용 주소 blob 구조입니다. ChaCha20-Poly1305 봉투에 파일 종류별 도메인 분리 키를 쓰고, 기기 키(device.key)가 마스터 키를 감쌉니다. 보관 정책은 개수·기간·용량 상한 셋을 다 제공하고 핀 항목은 면제되며, 무거운 원본 형식은 표현별 차등 수명으로 먼저 회수합니다. 종료 시 이력 삭제, 브라우저 비밀번호 화면 등 민감 출처 가리기, 기록 모두 삭제(2초 안에 두 번)가 설정에 있고, 비밀이 실리는 파일은 소유자만 읽을 수 있게(0600) 만듭니다. 메모리 상주 계층은 식은 본문을 즉시 내리고 섬네일을 LRU 캐시로 두어 기동 RSS를 82MB에서 18.7MB로 줄였고, blob 지연 로드로 기동 시간은 1.8초에서 107ms가 됐습니다.
동기화는 선택이며 기본은 꺼짐입니다. 켜면 아이디(핸들)와 페어링 암호 두 줄만 넣습니다 — 암호는 서버로 가지 않고 만남 지점(랑데부 ID)을 PBKDF2로 파생하는 재료로만 쓰여, 암호를 모르면 누구도 내 기기들이 만나는 자리를 계산할 수 없습니다. 만난 기기는 기기 목록에 뜨고, 양쪽 화면의 6자리 대조 코드가 같은지 눈으로 확인한 뒤 승인해야만 클립보드가 오갑니다(기기당 1회 · 언제든 해제). 전파되는 것은 평문 텍스트와 PNG 이미지이며 받은 항목은 출처(⇄ 기기 이름)가 붙고 되돌려 보내지 않습니다. 같은 Wi-Fi 안이면 UDP 비콘 + TCP 직결로 서버 없이(None) 연결되고, 다른 네트워크의 기기와는 릴레이 서버를 거칩니다 — 어느 경로든 Noise 종단 세션은 두 기기 사이에서만 맺어지고 서버는 봉투만 봅니다.
릴레이 서버는 Nexa Clip에 들어 있지 않습니다. Nexa Beep 프로젝트가 배포하는 별도 프로그램 nexa-beepd이며, 앱 기본값은 SosomLab 공식 서버(beepd.sosomlab.com:47300)입니다. 서버 공개키는 첫 접속에 고정(TOFU)되어 바뀌면 접속을 멈추고 경고합니다. Nexa Beep와 같은 서버를 쓰지만 랑데부 도메인 문자열과 Noise prologue가 달라 두 앱은 서버에서 서로를 볼 수 없습니다(애플리케이션 격리 — 검사 코드가 아니라 구조). 재시도는 지수 백오프(표준 5초→5분), 동시 핸드셰이크 4개, 실패 IP 30초 냉각, 피어별 수신 예산 같은 과다 트래픽 예방 장치가 붙어 있습니다.
무엇이 아직 안 되는지도 숨기지 않습니다. 코드 서명이 없어 macOS Gatekeeper·Windows SmartScreen 경고가 뜹니다(brew Cask는 설치 시 격리 표식을 떼 줍니다). macOS는 붙여넣기 주입에 손쉬운 사용 권한이, Linux(GNOME/Wayland)는 전역 단축키·키 주입에 포털 승인이 한 번씩 필요합니다. 동기화는 아직 파일(경로 목록)과 서식을 실어 나르지 않고, Linux 자산은 x86_64뿐이며, 모바일 수신은 최하순위(P3)입니다. winget·Chocolatey 매니페스트는 릴리스 자산에 동봉되지만 아직 제출 전이라 Windows는 GitHub Releases에서 직접 받습니다.
배포는 Windows x64·ARM64, macOS Apple Silicon·Intel, Linux x64의 5타깃 × 설치본·포터블 2채널(자산 14종 + SHA256SUMS)이며 태그를 푸시하면 자동으로 공개되고 Homebrew 탭이 릴리스를 자동 추종합니다. Linux 산출물은 glibc 2.17 기준으로 링크해 배포판을 가리지 않습니다. 기반 구조는 Nexa Beep(크레이트 경계 · 래스터라이저 · 릴레이 스택)과 Nexa Dir(컨트롤 · 가상화 목록)에서 가져와 이 프로젝트 이름으로 흡수했습니다. PolyForm Noncommercial 1.0.0 라이선스로 개인·비상업 사용은 무료이며, 상업 사용은 별도 유료 라이선스(문의 [email protected])가 필요합니다.
릴리스 노트
v0.1.2 2026-09-05 Linux 결함 5건 수정 · 비밀 파일 0600 · 팝업 단축키 잔향 해소 · 기기 이름 재소개 · 설치본 자리 실기 체계 3-OS 완성.
수정 (Linux)
- 붙여넣기가 영영 안 되던 문제 — GNOME 셸이 포털 RemoteDesktop 세션을 닫으면 이후 키 주입이 "Invalid session"으로 계속 실패했습니다. 실패 시 저장 토큰으로 세션을 다시 열고 1회 재시도하도록 자가 복구를 넣었습니다(재현 테스트 포함).
- 포털 승인 창이 매번 뜨던 문제 — 승인 토큰이 데이터 폴더 안에 있어 빌드·설치본이 바뀔 때마다 재승인을 요구했습니다. 토큰을 버전 무관 자리(사용자 설정 폴더)로 옮겼습니다 — 실측 0.55~0.57초 무대화창.
- 창이 뒤에 뜨고 "준비됨" 알림만 뜨던 문제(X11/XWayland) — winit이 활성화 요청을 앱 소스로 보내 Mutter의 포커스 탈취 방지에 막히던 것. 페이저 소스로 직접 올리는 공통 경로(
bring_to_front)를 메인창·설정 창에 적용했습니다. - 전역 단축키가 등록되지 않던 근인 — 포털은 cgroup 유닛에서 앱 이름을 읽기 때문에 에디터 통합 터미널에서 띄우면
code라는 이름으로 우리 단축키가 등록돼 정상 실행분이 충돌했습니다. 버리던 포털 오류를 로그에 남기고 스크립트를 앱 이름 스코프로 고쳤습니다. 사용자 실기 ✓. - 앱 메뉴 아이콘이 개발 빌드를 띄우던 문제 — 앱이 시작마다 사용자 런처를 자기 경로로 덮어썼습니다. 패키지 설치본이 있으면 사용자 런처·자동 실행을 설치본으로 유지합니다(지우면 gnome-shell이 삭제된 경로를 캐시해 실패). 런처 경로 변경은 셸 재시작까지가 절차입니다.
수정 · 개선 (3-OS)
- 팝업을 열면 검색창에 단축키 글자가 들어가던 잔향 — 팝업이 포커스를 받는 순간의 합성 키·자동 반복을 무시합니다(Linux XWayland에서 발견 · Windows
WM_SETFOCUS도 같은 구조라 함께 적용). - 비밀이 실리는 파일을 소유자만 읽게(0600) — 페어링 암호가 실리는
settings.cfg, 포털 승인 토큰, 기기 키를 생성 시점부터. 실기 664였습니다. - 설정 파일에 같은 키가 두 줄 생기고 설정 창 위치가 재시작 후 복원되지 않던 문제 — 창 위치 키(
ui.set_*) 등재 누락과 미지 키 재방출을 정정했습니다. - 기기 이름 재소개 — 이름을 바꾸면 약 1초 뒤 연결된 모든 세션(릴레이·LAN · 승인 무관)에 새 이름이 전달되고 상대 목록이 바로 갱신됩니다.
- 받은 이미지가 "[이미지]"로만 보이던 문제 — 팔레트·16비트 PNG를 격리 디코더가 거부하던 것을 정규화로 고쳤고, 섬네일이 없던 옛 항목은 다시 열면 스스로 만듭니다.
- 릴레이 None에서 아이디·암호를 뒤늦게 채워도 같은 네트워크 연결이 800ms 뒤 자동 재기동됩니다(Test·재시작 불필요).
- 전역 단축키 설정 카테고리 — 퀵 팝업 · 보조 팝업 · 평문 붙여넣기 조합을 캡처 오버레이로 바꾸고 저장 즉시 재등록(Windows). 기본값은 Shift+Alt+C / Shift+Alt+X.
배포 · 문서
- 설치본 자리에서 실기하는 체계를 3-OS 모두 갖췄습니다 — Linux
dev-install-linux.sh(배포.deb설치본/usr/bin에 릴리스 빌드를 원자 교체 후 설치.desktop으로 재시작) · macOSdev-install-mac.sh(자체 서명 신원으로 TCC 권한 유지) · Windowsdev-install-win.ps1. - push 전 3타깃 clippy 스크립트(
check-3os.sh) — cfg 모듈 경로 사슬로 CI가 16회 연속 빨갛던 사고의 재발 방지. - 사용자 위키 10페이지 + 화면 캡처 20장 발행(설치 · 시작하기 · 설정 항목 · 동기화 설정 · 릴레이 서버 · 같은 네트워크 직결 · 중복 제외와 출처 표시 · 여러 인스턴스 · 문제 해결). 릴레이 서버
nexa-beepd가 Clip에 포함되지 않고 Nexa Beep에서 별도 배포·별도 실행이라는 점을 매뉴얼에 명기했습니다. - Homebrew 0.1.2 자동 추종 ✓ · 자산 14종 · 릴리스 11잡 success. winget·Chocolatey는 제출 스위치를 끈 채(guard 판정 false) 매니페스트만 동봉.
v0.1.0 · v0.1.1 2026-09-04 첫 공개 — 로컬 완결(M1) + 기기 간 동기화 기반(M2) + 5타깃 자동 배포. v0.1.1은 같은 날의 검색·신원 점검·메모리 수정본입니다.
로컬 완결 (M1)
- 클립보드 감시 3-OS — Windows 이벤트 · macOS
changeCount폴링(settle 대기로 한 복사 = 한 항목) · Linux X11XFIXES내재화(xclip 없는 PC에서 E2E ✓ · 1.5MB INCR 왕복 ✓). 텍스트·이미지·파일 경로·HTML/RTF·원본 형식 캡처, 실기 결함 18건 회귀 박제. - 암호화 영속 — append-only 암호화 세그먼트 + 내용 주소 blob(ChaCha20-Poly1305 · 도메인 분리 키 ·
device.key로 마스터 키 봉인). 기본 켜짐. - 퀵 팝업 · 메인창 · 설정 · 트레이 — 좌측 세로 툴바, 보기 3모드, 붙여넣기 4모드, 붙여넣기 스택, 설정 창(21항목 레지스트리 · 검색 · 즉시 적용 · 스플리터), 트레이 최근 항목 메뉴, 단일 인스턴스, 자동 시작. macOS 메뉴바 상주(
NSStatusItem) + Dock 정책 +NSPasteboard직접 게시 + Carbon 전역 단축키. - 키 주입 — Windows
SendInput· macOSCGEvent(손쉬운 사용) · Linux XTest/포털 RemoteDesktop. 팝업이 포커스를 훔치고 돌려줍니다. - 리치 렌더 2단 — 색·굵기·기울임·pre 개행·탭 스톱, Outlook Wingdings 불릿 ■ 치환, 목록·들여쓰기·배율, 인라인
data:이미지, 터미널 복사 색/글꼴/배경 + ANSI SGR. PPTpublic.html누락으로 도형이 안 붙던 결함 수정 + macOS PowerPoint 자동 실기 12/12. - 검색(v0.1.1) — 라벨 + 본문 · 정확히/유사/정규식 자체 엔진 · RAM 색인 · 방식 드롭다운. 한글 조합 중 검색.
- 메모리 상주 계층(v0.1.1 · DR-42) — 식은 본문 즉시 내림 + 30초 GC + 섬네일 PNG blob 이관·LRU 캐시 → 기동 RSS 82 → 18.7MB. blob 지연 로드로 기동 1.8초 → 107ms.
- OS별 기호·이모지 글꼴 폴백 체인(두부 제거), hover 페이드 + hover 의도 코얼레싱, 활성 대상 따라가기, 감시 정지/재개 토글, 설정 창 배치(메인창 옆 · 모니터별 기억), 메인창 기하 보정.
기기 간 동기화 (M2)
- 릴레이 스택(
nclip-sync— Nexa Beepnbeep-relay사본 · 앱 격리 3종 · TOFU 서버 핀 · 페어링 RID) + 설정 › 동기화(핸들 · 페어링 암호 자동 추천/생성/눈 · 서버 선택 · 포트 · Test · Disconnect · 재시도 정책 · 기기 목록). - 같은 네트워크 직결 — UDP 비콘(LAN 태그 · /24 지향 브로드캐스트) + TCP 직결 + 같은 Noise 세션. 릴레이 None 선택지. Windows accept 논블로킹 상속 결함 수정.
- 기기별 승인 + 6자리 대조 코드(
DeviceList컨트롤), 동기화 끔 = 전부 끔 + 하위 설정 잠금, 연결 수명 계약(Test 성공 = 자동 켬 · 정보 변경 = 즉시 해제). - 복사 즉시 자동 전파(평문 · PNG) — 승인된 기기에만, 수신 = 이력(⇄ 기기명) + 클립보드 게시, 에코 지문 차단, 재전송 금지(영속 플래그). 보낸 기기별 별도 항목(×N), 목록 녹색 점, 중복 제외 보기(기본 켬 · 로컬 우선).
- 과다 트래픽 예방 — 기기별 지수 백오프(5분) · 페어링 탐색 백오프 · 인바운드 동시 4 · 송신 최신 1개 합치기 · 재전송 2초 억제 · 피어별 수신 예산 24MB/10s · 비콘 적응 30초 · 실패 IP 냉각. UI 비차단 원칙(디코드·인코드·전송 전부 워커).
--profile <이름>으로 한 PC에서 두 기기처럼 시험. macOS ↔ Windows 첫 실전 만남 ✓(devices.txt).
배포
- 배포 파이프라인(Nexa Beep 이식) — 5타깃 × 설치본·포터블 자산 14종 + SHA256SUMS, Homebrew Cask/Formula 자동 갱신, winget·Chocolatey 매니페스트 생성 + 검수 대기 자동 판정 guard(직전 제출이 검수 중이면 그 채널만 건너뜀). Linux는 zig 링커로 glibc 2.17 기준 링크 + 심볼 게이트.
- v0.1.0 태그 직후 검색·신원 점검·메모리 수정을 담아 같은 날 v0.1.1로 재배포했습니다. 둘 다 brew 포함 · winget/choco 제외.
알림
- 코드 서명이 없습니다 — macOS Gatekeeper·Windows SmartScreen 경고가 뜹니다.
SHA256SUMS.txt로 파일을 먼저 확인하고, macOS는 brew Cask(격리 표식 자동 제거)를 권장합니다. - 동기화는 평문 텍스트와 PNG 이미지만 전파합니다. 파일(경로 목록)·리치 서식 전파, 신뢰한 다른 사람에게 보내기, 모바일 수신은 설계만 있고 아직 구현 전입니다.
- 릴레이 서버는 별도 프로그램(
nexa-beepd)이며 Nexa Beep에서 배포합니다. 같은 네트워크만 쓰면 서버 없이(None) 됩니다.