Join the Agent Deck Discord Server!
Discord에서 Agent Deck 커뮤니티 확인, 357명과 자유 음성·텍스트 채팅 이용
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Progetto self-hosted pensato per piccoli gruppi, con stanze private, notifiche web e amministrazione semplice.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Self-hosted web chat built for Raspberry Pi and small home servers.
Realtime, PWA-ready, framework-free — light enough for an old Pi, hackable enough to make it yours.
Live demo · Documentation · 🇮🇹 Leggi in italiano
raspi-chat makes sense if you want:
It is not an enterprise messenger. It is a pragmatic, small, and easy-to-modify codebase — with few external dependencies, local storage, and a simple deploy story.
/chat/ws), with online-user presence+ menu to upload images, video, audio, PDF, Office docs, text and zip (rendered inline), or share your location as an OpenStreetMap cardchat.db and uploaded attachments with a single CHAT_DB_KEYcurl, encryption-aware/setup wizard that writes your config and generates the systemd, nginx, and Cloudflare filesadmin, superuser, and userSee the Features guide for the full details of each.
git clone https://github.com/tongatron/raspi-chat.git
cd raspi-chat
npm install
npm run check
npm start
http://127.0.0.1:3000/setup and follow the wizard..env and config/chat-users.json? The chat is at http://127.0.0.1:3000/chat.git clone https://github.com/tongatron/raspi-chat.git /srv/apps/raspi-chat
cd /srv/apps/raspi-chat
bash ops/install-rpi.sh
Then start the app once (npm start), open /setup, complete the steps, and run
sudo bash data/setup-generated/finish-setup.sh to install and enable the systemd service.
Full walkthrough — including the guided wizard, users, and environment variables — in the Installation guide.
Detailed docs live in docs/. Start here:
| Guide | What's inside |
|---|---|
| 📥 Installation | Local & Raspberry Pi setup, the guided web wizard, users, environment variables |
| ✨ Features | Rooms, attachments, favorites, encryption, backup/restore, notifications, Android app |
| 🖥️ CLI client | Using the chat from a terminal |
| 🚀 Deploy | systemd, nginx, Cloudflare Tunnel |
| ⚙️ Server optimization | Caching, SQLite tuning, hardening, backups on the Pi |
| 🛠️ Development | API endpoints, tests, quick checks |
| 🗺️ Roadmap | Planned next steps |
The docs/ folder is also structured as a GitBook table of contents.
ws WebSocketsbetter-sqlite3-multiple-ciphers (transparent at-rest encryption)web-push)node --test runner + GitHub Actions CIraspi-chat/
├── src/
│ ├── app.js Fastify instance & plugin registration
│ ├── chat/ The chat feature, one concern per module
│ │ database · auth · serializers · presence · push
│ │ attachments · rooms · link-preview · system-stats
│ ├── lib/ Helpers shared across routes
│ ├── routes/
│ │ ├── chat/ Chat routes by group — thin, they delegate to src/chat/
│ │ │ pwa · session · rooms · messages · push · admin
│ │ │ pages · ws
│ │ └── ... Landing pages and the setup wizard
│ └── attachment-crypto.js At-rest encryption for uploads
├── public/ HTML pages — markup only, no inline CSS or JS
│ └── assets/
│ ├── chat/ The chat client, one file per concern
│ └── *.css/js Styles and scripts for the other pages
├── cli/ Terminal chat client
├── ops/ Deploy scripts, encryption migrations, syntax check
├── config/ User & asset-link configuration examples
├── docs/ Documentation (GitBook)
├── specs/ Feature specifications (one folder per feature)
├── tests/ Node --test suites
├── .env.example
├── package.json
└── server.js
New to the codebase?
CONTRIBUTING.mdexplains what lives in each module and the conventions the project follows.
The repo is the source of truth for the app. It does not contain your
.envorconfig/chat-users.json— those are created locally or by the setup wizard.
chat.db and uploaded attachments can be encrypted at rest with a single opt-in key:
# generate a strong key and store it in .env (git-ignored)
echo "CHAT_DB_KEY=$(openssl rand -hex 32)" >> .env
# encrypt an existing plaintext database and attachments (each makes a backup first)
CHAT_DB_KEY=... node ops/encrypt-db.js
CHAT_DB_KEY=... node ops/encrypt-uploads.js
Without a key, behaviour is unchanged (plaintext, baseline). Keep CHAT_DB_KEY safe outside the Pi — if you lose it, encrypted data is unrecoverable. Details and admin backup/restore in the Features guide.
The full threat model — what this protects against and what it does not, including the session-token design — is written out in SECURITY.md, which is also where to report a vulnerability.
On the reference deployment (
raspi4), at-rest encryption ofchat.dband all attachments has been active in production since 2026-07-20.
The suite uses Node's built-in runner (no extra dependencies) and exercises the HTTP layer with app.inject() in an isolated temporary directory — it never starts a server or touches production data.
npm run lint # ESLint — unused bindings, accidental globals, dead code
npm run check # dependency-free syntax check of every source file
npm test # run the test suite
All three run automatically on every push and pull request via GitHub Actions. From v1.1 onward, every new feature ships with its own tests. See CONTRIBUTING.md for the full workflow.
Planned next steps are tracked in docs/roadmap.md.
Released under the ISC license — see LICENSE.