Skip to content

eigen-is/eigen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2,686 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Eigen

Your own workspace. Simple, secure, self-hosted.

Eigen is a self-hosted alternative to Google Workspace. It runs as a single server with integrated apps for email, file storage, documents, spreadsheets, presentations, calendar, contacts, and real-time chat — all sharing one API, one auth system, and one UI.

The name Eigen is Dutch and German for "own." You own your data, you own your infrastructure, you own your workspace.

For the backstory on how and why this project started, see Eigen: Building a Workspace.

Why

Given the power large tech companies hold over our data, a self-hosted European alternative feels needed. Eigen aims to be that alternative: a workspace you can run on your own server, where every byte of data stays under your control.

Goal

The first goal is a self-hostable workspace for individuals, enthusiasts, and small organizations. During active development, expect rough edges — but the core is functional and improving fast. As the project matures and stabilizes, the aim is to make Eigen reliable enough for mid-to-large organizations as well.

Status & responsibilities

Eigen is pre-1.0 and actively developed. The core works, but be deliberate about what you put on it:

  • Breaking changes are likely between minor versions until 1.0; expect occasional manual migration.
  • You own your data, including the backups. Use scripts/backup.sh (or your own routine) and verify it restores. Eigen does not back up your data for you.
  • You own your server's security. Keep the host patched, lock down SSH, use strong passwords, and watch your logs. A self-hosted server is your responsibility end-to-end.
  • No warranty — see LICENSE.txt. Eigen is built by a single developer in their spare time. It's provided as-is, in good faith, with no SLA.

If data loss in your workspace would be catastrophic, wait for 1.0. For personal use, hobbyists, and small teams comfortable with rough edges, the current build is functional and improving fast.

Apps

Eigen ships as a monorepo with a single API server and a set of tightly integrated frontend apps:

  • Mail — Webmail client with full mailbox management. Email is stored in standard Maildir++ format, fully compatible with Dovecot. Connect any IMAP client (Thunderbird, Apple Mail, etc.) to access your mail alongside the web UI.
  • Drive — File storage with folders, sharing, ACL, thumbnails, file previews, and pluggable storage backends (local filesystem, flat key-based, or S3-compatible). Soft delete with configurable trash retention. Supports inline editing of text, code, and Markdown files. Mount your drives as a network drive in Finder, Windows Explorer, or any WebDAV client.
  • Docs — Collaborative document editor built on Tiptap and Yjs. Multiple users edit the same document in real time. Export to DOCX, PDF, and HTML. Embedded comment threads with @mentions.
  • Sheets — Collaborative spreadsheets using a fully forked fortune-sheet engine with Yjs-based op-level sync. Concurrent edits on different cells merge cleanly.
  • Slides — Collaborative presentations with a pixel-based canvas (1920×1080), resolution-independent rendering, drag-and-drop objects, background images, and a presentation mode.
  • Stickies — Kanban boards with real-time collaboration via Yjs. Drag-and-drop cards and columns. Each card has its own embedded chat room for discussion.
  • Calendar — Full calendar with recurring events (RFC 5545 RRULE), invitations with RSVP, shared calendars, and team calendars. Includes a CalDAV server — sync with Thunderbird, Apple Calendar, or DAVx5 using standard protocols.
  • Contacts — Contact management with avatars.
  • Chat — Real-time chat inspired by classic MUDs. Over 80 built-in slash commands including emotes, whispers, and @mentions. Chat rooms live inside Drive (inheriting its ACL), and can be embedded inside documents and kanban cards as comment threads.
  • Space — Personal account settings, profile, and preferences.
  • People — Organization and team administration. Manage members, roles, shared drives, team calendars, quotas, and server-wide settings.

Protocol support

Eigen doesn't lock you into its web interface. Standard protocols let you use your favorite native clients:

  • IMAP — Via Dovecot. Eigen writes Maildir++, Dovecot serves it over IMAP. They coexist on the same filesystem.
  • CalDAV — Built-in CalDAV server with discovery, sync-collection, and recurring event support. Tested with Thunderbird.
  • WebDAV — Built-in WebDAV server (RFC 4918 Class 1+2). Mount your Drive as a network drive in Finder, Windows Explorer, Mountain Duck, rclone, or any standard WebDAV client.
  • SMTP — Postfix handles inbound and outbound email, with DKIM signing and relay support.

Getting started

Prerequisites

  • Bun (runtime for both server and client)
  • Git

Quick start

git clone https://github.com/eigen-is/eigen.git
cd eigen
cp .env.development .env
bun install
bun run serve

Open http://localhost:3009/admin to run the first-time setup wizard. It creates your admin account and configures storage.

Docker deployment

For production, Eigen runs as four Docker containers: Caddy (reverse proxy with automatic HTTPS), Eigen API (Bun), Postfix (email), and Dovecot (IMAP). See the VPS Setup Guide for step-by-step instructions, or the Local Testing Guide to try the full stack on your machine.

Development

bun run serve          # All apps + API
bun serve:mail         # Single app + API (works for any app name)
bun run lint           # Lint + format check (Biome)
bun run lint:fix       # Auto-fix
bun run typecheck      # Type check all packages
bun run test           # Run all tests
bun run check          # lint + typecheck + test

Architecture

Each user gets their own directory on the server. SQLite databases (per user) store metadata and structured data. Files are stored separately. No shared database means no way to accidentally access someone else's data. Backups are trivial — just copy a user's directory.

data/home/{userId}/
├── mounts/default/       # Drive files + metadata.db
├── eigen.mail/           # Maildir + mail.db
├── eigen.contacts/       # contacts.db + avatars
├── eigen.calendar/       # calendar.db
└── eigen.notifications/  # notifications.db

Organizations and teams add shared resources on top: team drives, team calendars, and group-based ACL. Real-time collaboration runs through Yjs over WebSocket, while Server-Sent Events push live updates to all connected clients.

Tech stack

Layer Technology
Runtime Bun
Backend Elysia + Drizzle ORM (SQLite)
Frontend React 19 + TypeScript + TanStack Router + TanStack Query
API Eden Treaty (end-to-end type-safe)
Styling Tailwind CSS 4 + shadcn/ui + Lucide
Auth better-auth (email/password, 2FA, organizations, teams)
Real-time Yjs (collaborative editing) + WebSocket + SSE
Tooling Biome (lint + format) + Vite (build)

Project structure

apps/
  api/          # Elysia backend (port 8000)
  mail/         # Email client
  drive/        # File storage
  docs/         # Document editor
  sheets/       # Spreadsheet editor
  slides/       # Presentations
  stickies/     # Kanban boards
  calendar/     # Calendar
  contacts/     # Contact management
  chat/         # Real-time chat
  space/        # Account settings
  admin/        # Org/team admin
  index/        # Landing page
  setup/        # First-run wizard

packages/
  lib/          # Shared types, hooks, API client, validation
  ui/           # Shared components and layout system
  fortune-sheet/  # Forked spreadsheet engine

data/           # Runtime storage (gitignored)
docs/           # Architecture documentation

Contributing

Eigen is open source and contributions are welcome. The project is still in active early development — there's plenty to do and plenty of room to shape the direction.

See CONTRIBUTING.md for how to get involved — whether that's reporting bugs, submitting PRs, adopting a subsystem, or sponsoring the project. The full project context (for humans and AI agents alike) lives in AGENTS.md, and CODE-STANDARDS.md covers code style and architecture patterns.

Found a security issue? Please do not open a public issue — see SECURITY.md for how to report privately.

Documentation

Architecture docs live in docs/:

Area Docs
Architecture Storage, Database, SSE, ACL
Deployment Deployment, Docker Setup, Testing
Frontend Layout, Clipboard, Previews
Features Calendar, Chat, Notifications, IMAP
Apps Sheets, Slides, Stickies, Comments
Operations Quota, Server Settings, Export, Organizations

Contact

Questions, ideas, or want to contribute? Reach out at [email protected].

About

Your personal workspace in the cloud. Simple and secure. You control your own data.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors