A desktop application for viewing and managing Discord conversation exports. Built with Tauri, React, and Rust.
A fast, searchable interface for exported Discord Chats if you're looking for a simple way to keep and manage memories.
The design for this app promises to:
- Never touch or modify your chats -- even if it messes up, the originals stay intact
- Keep copies of your chats and assets
- Be easy to use -- similar to Discord itself!
- Import Discord Exports: Load JSON conversation files with automatic asset validation
- Full-Text Search: Fast search across all messages using an indexed search system
- Message Virtualization: Efficiently handle large conversations with thousands of messages
- Asset Management: Automatic detection and copying of missing conversation assets (images, attachments)
- Export/Import: Backup and restore all conversations or selected ones
- Themes: Multiple color schemes for message display
- Logging: Comprehensive logging system for debugging with privacy protection
Simply go to releases and download the latest version! Currently only Windows 10/11 is supported.
- Node.js 18 or later
- Rust 1.70 or later
- npm or yarn
- Clone the repository
git clone https://github.com/yourusername/sapper.git
cd sapper- Install dependencies
make install
# or: npm install- Run in development mode
make dev
# or: npm run tauri dev- Build for production
Option A: Unsigned build (for testing)
make build-unsignedThis creates a quick unsigned build in src-tauri/target/release/bundle/. Unsigned builds do NOT support auto-updates.
Option B: Signed build (for distribution)
make build-signedThis creates a signed build with auto-update support. Requires signing key setup (see below).
The compiled application will be in src-tauri/target/release/bundle/nsis/.
For detailed release instructions, see RELEASE.md.
Prerequisites:
- Copy
.env.exampleto.env - Add your Tauri signing key to
.env(see RELEASE.md for key generation)
Quick release commands:
# Build signed app and update manifest
make release
# Build, update manifest, AND create GitHub release (requires gh CLI)
make release-fullOther useful commands:
make help # Show all available commands
make check-env # Verify your environment is set up correctly
make clean # Remove build artifactsThe app includes automatic update functionality - users will be notified when new versions are available.
- Export a conversation from Discord using Discord Chat Exporter or similar tools
- Click "Import Conversation" in Sapper
- Select the exported JSON file
- If assets are missing, you'll be prompted to select the folder containing them
- The conversation will be processed and indexed for searching
Sapper stores all data in ~/.sapper/:
~/.sapper/
├── data/
│ ├── metadata.json # List of imported conversations
│ ├── config.json # Application settings
│ └── imports/
│ └── [import-id]/
│ ├── export.json # Original Discord export
│ ├── chunks/ # Optimized message storage
│ └── search_index/ # Full-text search index
└── logs/
└── sapper.log # Application logs (rotated daily)
Application settings are stored in ~/.sapper/data/config.json:
{
"theme": "default",
"search_limit": 100,
"chunk_size": 1000
}Modify through Settings UI or edit the file directly (requires app restart).
Sapper operates entirely locally. No data is transmitted to external servers. Log files sanitize personal information while maintaining debugging utility.
Thanks to Claude for this README ^-^