2026-04-05 18:46:59 -04:00
2026-03-28 22:05:24 -04:00
2026-03-30 17:41:54 -04:00
2026-04-05 18:40:35 -04:00
2026-04-05 18:40:35 -04:00
2026-04-05 18:46:59 -04:00
2026-04-05 18:40:35 -04:00
2026-04-04 17:41:43 -04:00
2026-04-04 17:41:43 -04:00
2026-03-28 22:05:24 -04:00
2026-03-28 22:05:24 -04:00
2026-03-31 18:55:57 -04:00
2026-04-05 02:12:11 -04:00
2026-04-05 18:40:35 -04:00
2026-03-28 22:05:24 -04:00
2026-04-05 18:40:35 -04:00
2026-04-04 17:41:43 -04:00
2026-04-05 18:40:35 -04:00
2026-04-04 15:29:23 -04:00
2026-04-04 15:29:23 -04:00
2026-03-31 18:55:57 -04:00
2026-03-28 22:05:24 -04:00
2026-03-28 22:05:24 -04:00
2026-03-31 18:55:57 -04:00
2026-04-05 18:40:35 -04:00

Zep

Zep is a self-hosted, privacy-oriented chat application built with Svelte 5 and SpacetimeDB. Designed as a modern, lightweight alternative to commercial platforms, it prioritizes performance, low-latency communication, and high feature density without the bloat.

🚀 Features

Zep offers a rich, Discord-inspired user experience backed by a highly scalable, WebAssembly-powered database architecture.

  • Multi-Server & Channel Support: Organize your communities with dedicated Text, Voice, and Threaded channels.
  • Blazing Fast Pagination: Uses a sophisticated hybrid "Recent Activity Cache" to load channels instantly, with on-demand expansion for deep history scrollback.
  • Real-Time Voice & Video: Integrated WebRTC signaling via SpacetimeDB for low-latency audio channels and screen sharing.
  • Rich Media & Profiles: Support for custom emojis, image uploads (up to 10MB), and customizable user profiles (avatars, banners, biographies).
  • Modern Svelte 5 UI: Built with Svelte Runes for granular reactivity, featuring custom portaled dropdowns, context menus, and a responsive design that adapts to your screen.
  • Tauri Ready: The Vite configuration is tailored for easy packaging as a native desktop application via Tauri.

🗺️ Roadmap

We are actively developing Zep. Here is what's coming next:

  • Direct Messaging: Private, 1-on-1 conversations outside of server contexts.
  • Mentions & Notifications: Robust @user and @role tagging with RLS-protected notification delivery.
  • Read Status: Unread badges and indicators for channels and servers.
  • Message Interactions: Replying directly to messages (in addition to threading), grouping consecutive messages, and GIF integration.
  • Server Management: Private servers, invite links, role-based permission systems, and custom server avatars.
  • Customization: Full theming support (Dark/Light mode toggles) and hotkey shortcuts.

🛠️ Technology Stack

  • Frontend: Svelte 5 (TypeScript, Vite, Vanilla CSS)
  • Backend: SpacetimeDB (TypeScript/WASM module)
  • Real-time Comms: WebRTC (Peer-to-peer audio/video)
  • Desktop: Tauri (Planned/Configured)

Architecture Highlights

Zep leverages SpacetimeDB's client-side cache model to eliminate traditional REST API bottlenecks.

  • Zero-Latency Switching: The client subscribes to a lightweight recent_message table for all joined servers on startup. This populates the UI instantly when switching channels.
  • Surgical Subscriptions: The heavy message history table is only subscribed to on-demand when a user explicitly requests older messages, saving bandwidth and memory.
  • WASM Reducers: All database mutations (sending messages, updating profiles) are handled by deterministic TypeScript reducers compiled to WebAssembly and executed transactionally on the server.

📦 Getting Started

Prerequisites

Backend Setup (SpacetimeDB)

  1. Navigate to the backend module directory:
    cd spacetimedb
    
  2. Install dependencies:
    npm install
    
  3. Publish the module to your SpacetimeDB instance (e.g., maincloud or a local instance). Note: The first publish creates the database.
    spacetime publish --server maincloud zep
    
  4. Generate the TypeScript bindings for the frontend:
    npm run spacetime:generate
    

Frontend Setup (Svelte 5)

  1. Navigate to the project root:
    cd ..
    
  2. Install dependencies:
    pnpm install
    
  3. Configure your environment variables (create a .env.local file if necessary) to point to your published SpacetimeDB instance:
    VITE_SPACETIMEDB_HOST=wss://maincloud.spacetimedb.com
    VITE_SPACETIMEDB_DB_NAME=zep
    
  4. Run the development server:
    pnpm run dev
    

📄 License

This project is open-source. Please see the LICENSE file for details.

S
Description
Spacetimedb based communication client intended for self-hosting and owning your own data
Readme Apache-2.0 3.7 MiB
Languages
Svelte 51.4%
TypeScript 34.3%
Rust 12.4%
CSS 1.4%
JavaScript 0.3%
Other 0.1%