ccea3cc9a5177af938d714525e82741a2377fca5
Zep
Zep is a self-hosted, real-time communication platform built with Svelte 5 and SpacetimeDB. It provides text, voice, and video messaging functionality designed for small groups and private communities.
Core Tenets
- Low Dependencies: We strive to keep the project's dependency graph as lean as possible, favoring native web capabilities over third-party libraries for better long-term maintainability and security.
- Frictionless Deployment: Self-hosting should be trivial. Getting your own Zep server running must require the lowest number of steps possible (ideally just one command).
- Small Scale Focus: The project is intended to be deployed amongst a small group of friends or team members. It is not currently designed to scale to massive numbers of concurrent users, although achieving higher scalability remains a stretch goal.
- Low Idle Resource Usage: Don't take up a bunch of resources when you're not even using the service
Data Ownership & Privacy
- Self-Hosted: The application is designed to be hosted by the user. Data is stored in a SpacetimeDB instance controlled by the host.
- Data Isolation: Data is not used for user profiling or advertising.
- Hosting Options: Compatible with local SpacetimeDB instances or SpacetimeDB Maincloud.
Core Functionality
- Communication: Text channels, voice channels, and threaded conversations.
- Performance: Uses a client-side cache (
recent_messagetable) for immediate channel loading with lazy-loading for deep message history. - WebRTC Integration: Peer-to-peer audio and screen sharing using SpacetimeDB for signaling.
- Customization: User profiles (avatars, banners, bios), server icons, and multiple CSS-based themes.
- Media Support: Built-in image uploads and custom emoji support.
Technology Stack
- Frontend: Svelte 5 (Runes), TypeScript, Vite, Vanilla CSS.
- Backend: SpacetimeDB (TypeScript WASM module).
- Communications: WebRTC.
- Desktop: Native app support via Tauri.
Getting Started
Prerequisites
- Node.js (v18+)
- pnpm
- SpacetimeDB CLI (
spacetime) - For Docker: Docker and Docker Compose
One-Step Deployment (Recommended)
The easiest way to get Zep running locally is using Docker. This command builds and starts both the frontend and the SpacetimeDB module in a single step.
pnpm run deploy:local
Local Development (Manual Setup)
1. Backend Setup
- Navigate to the backend directory:
cd spacetimedb - Install dependencies:
npm install - Publish the module to a local SpacetimeDB instance:
pnpm run spacetime:publish:local
2. Frontend Setup
- Navigate to the project root and install dependencies:
pnpm install - Configure
.env.localfor local development:VITE_SPACETIMEDB_HOST=ws://localhost:3000 VITE_SPACETIMEDB_DB_NAME=<your-db-name> - Start the development server:
pnpm run dev- For local network testing with SSL, use
pnpm run dev:ssl.
- For local network testing with SSL, use
Production Deployment
Option 1: Docker
Zep can be deployed using Docker Compose for a production-like local environment or self-hosting.
pnpm run deploy:local
Option 2: Cloud (SpacetimeDB Maincloud + Cloudflare Pages)
Backend (SpacetimeDB Maincloud)
- Publish the module to Maincloud:
pnpm run spacetime:publish
Frontend (Cloudflare Pages)
- Build and deploy using Wrangler:
pnpm run deploy:cloudflare
License
This project is open-source. See the LICENSE file for details.
Important
Disclaimer: This project is "vibe coded" and makes heavy use of AI. Expect experimental patterns and rapid structural changes.
Description
Spacetimedb based communication client intended for self-hosting and owning your own data
Languages
Svelte
51.4%
TypeScript
34.3%
Rust
12.4%
CSS
1.4%
JavaScript
0.3%
Other
0.1%