End-to-End Encrypted Note Synchronization
📚 Documentation • 🏠 Project Home • 📦 Releases • 🤝 Contributing
English | 简体中文
|
|
# 1. Clone the repository
git clone https://github.com/LessUp/brave-sync-notes.git
cd brave-sync-notes
# 2. Start the server
cd apps/api && npm ci && cp .env.example .env && node index.js
# 3. Start the client (new terminal)
cd apps/web && npm ci && cp .env.example .env && npm run devAccess the application:
- Client: http://localhost:5173
- Server: http://localhost:3002
cd brave-sync-notes
docker-compose up -dFor detailed setup instructions, see our Getting Started Guide.
| Shortcut | Action |
|---|---|
Ctrl/⌘ + S |
Save |
Ctrl/⌘ + B |
Toggle sidebar |
Ctrl/⌘ + P |
Toggle preview |
Ctrl/⌘ + H |
Toggle history |
Ctrl/⌘ + N |
New note |
Ctrl/⌘ + / |
Toggle dark mode |
Esc |
Close modal |
We provide comprehensive documentation in both English and 简体中文.
| Spec | Description |
|---|---|
| Product Requirements | Feature definitions & acceptance criteria |
| Core Architecture | System design & technical decisions |
| API Specification | WebSocket & REST API definitions |
| Database Schema | Data models & storage structure |
| Testing Strategy | Test frameworks & correctness properties |
| Document | Description |
|---|---|
| Getting Started | Complete installation and setup guide |
| Architecture | System design and data flow |
| Deployment | Production deployment guide |
| Security | Encryption and synchronization |
| Contributing | Development guidelines |
| API Reference | WebSocket and REST API docs |
| 文档 | 说明 |
|---|---|
| 快速入门 | 完整安装和设置指南 |
| 架构说明 | 系统设计与数据流 |
| 部署指南 | 生产环境部署指南 |
| 安全机制 | 加密与同步机制 |
| 贡献指南 | 开发规范 |
| API 参考 | WebSocket 和 REST API 文档 |
Full Documentation Site: https://lessup.github.io/brave-sync-notes/
┌─────────────────────────────────────────────────────────────┐
│ Clients │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Browser A │◄──►│ Browser B │◄──►│ Mobile App │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ [React + Vite] [Zustand State] [AES-256 Crypto] │
└─────────┬──────────────────┬──────────────────┬─────────────┘
│ │ │
└──────────────────┼──────────────────┘
│ WebSocket
▼
┌─────────────────────────────────────────────────────────────┐
│ Server │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Express + Socket.IO │ │
│ │ • Room Management │ │
│ │ • Event Distribution │ │
│ │ • Rate Limiting │ │
│ └──────────────────┬────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────▼──────────────────┐ │
│ │ Persistence Layer │ │
│ │ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Redis │ │ SQLite │ (Fallback) │
│ │ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
For detailed architecture, see Architecture Documentation.
# Client tests
cd apps/web && npm test -- --run
# Server tests
cd apps/api && npm test
# Property-based tests
cd apps/api && npm run test:propertybrave-sync-notes/
├── apps/
│ ├── web/ # React + Vite frontend
│ │ ├── src/ # Source code
│ │ └── tests/ # Test files
│ └── api/ # Express + Socket.IO backend
│ ├── src/ # Source code
│ └── tests/ # Test files
├── docs/ # Documentation (EN/ZH)
├── changelog/ # Version history
└── .github/workflows/ # CI/CD configuration
| Metric | Status |
|---|---|
| Latest Version | v2.2.0 |
| Build Status | |
| Documentation | |
| License | MIT |
This project uses OpenSpec for spec-driven development with AI assistance. All changes are managed through structured proposals.
| Command | Description |
|---|---|
/opsx:propose |
Create a new change proposal |
/opsx:explore |
Explore ideas before committing |
/opsx:apply |
Implement tasks from a change |
/opsx:archive |
Archive a completed change |
/opsx:propose "feature-name" → /opsx:apply → /opsx:archive
| Directory | Purpose |
|---|---|
specs/ |
Stable, approved specifications (Single Source of Truth) |
openspec/ |
Change management and delta specs |
See AGENTS.md for detailed workflow instructions.
We welcome contributions! Please see our Contributing Guide for details.
Quick links:
This project is licensed under the MIT License.
No, the system automatically falls back to SQLite or in-memory storage if Redis is unavailable.
Notes up to 5MB are supported through automatic chunked transfer.
The mnemonic follows the BIP39 standard. Your encryption key is derived from these 12 words, enabling secure recovery on any device.
- Ensure the backend server is running on port 3002
- Check if the port is occupied:
lsof -i :3002 - Verify firewall settings allow WebSocket connections
- Confirm both devices use the same mnemonic
- Check browser console for errors
- Ensure WebSocket connection is established (green indicator)
- Verify Redis is running:
redis-cli ping - Or let the system fall back to SQLite automatically
- React - Frontend framework
- Vite - Build tool
- Socket.IO - Real-time communication
- Zustand - State management
- Express - Web framework
Made with ❤️ by LessUp