Your own workspace. A self-hosted, open source alternative to Google Workspace: mail, drive, docs, sheets, slides, calendar and chat.
See the codeYour own workspace. Simple, secure, self-hosted.
Try the live demo at demo.eigen.is. It is a shared workspace that resets every hour.
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, drawings, kanban boards, 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.
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.
Nextcloud is the established self-hosted workspace. It is mature, has a huge ecosystem, and if you need something proven today, it is the safer choice. Eigen is pre-1.0 and built by one person.
Eigen makes different choices:
If Nextcloud works for you, keep using it. Eigen exists for people who want a workspace that feels like one product instead of a platform with plugins.
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.
Eigen is pre-1.0 and actively developed. The core works, but be deliberate about what you put on it:
./eigen backup (or your own routine) and verify it restores. Eigen does not back up your data for you.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.
Eigen ships as a monorepo with a single API server and a set of tightly integrated frontend apps:
Eigen doesn't lock you into its web interface. Standard protocols let you use your favorite native clients:
Read the Setup Guide.
The short version: you need a Linux server with Docker, and a domain that points at it. Then:
mkdir -p /opt/eigen && cd /opt/eigen
curl -fsSL https://eigen.is/install | sh
The script downloads the eigen command and runs ./eigen setup. Setup asks for your web address and mail domain, whether Eigen or your own web server handles HTTPS, and whether to host email on this server. Then it starts Eigen and prints a link that finishes the setup in your browser.
Everything runs in Docker: Caddy for HTTPS, the Eigen API, and Postfix, Dovecot and Unbound for mail. The same eigen command updates, backs up and restores: ./eigen help.
Developing Eigen? See CONTRIBUTING.md § Eigen in Docker.
Needs Bun at the version in .bun-version (install it with curl -fsSL https://bun.sh/install | bash -s "bun-v$(cat .bun-version)") and Git. PDF export needs weasyprint on your PATH and video thumbnails need ffmpeg. Everything else works without them.
git clone https://github.com/eigen-is/eigen.git
cd eigen
bun install
bun run serve
This starts the API on localhost:8000 and every app on its own port. The API logs a one-time link, Finish the setup at http://localhost:3009/admin/#setup=…. Open it to create your admin account and choose where files are stored. Data lands in data/ in the checkout.
The API reads .env.development. Put your own overrides in .env. Eigen sends no mail in development: the API logs each message's sender, recipient and subject instead. To read 2FA and guest codes, run Mailpit and add SMTP_HOST=localhost and SMTP_PORT=1025 to .env.
bun run serve:mail # One 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 + repo guards + tests, before every PR
Docker is only needed to test mail delivery, IMAP or the images: see CONTRIBUTING.md.
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. ./eigen backup saves the whole server as one snapshot; docs/BACKUP.md covers it and the backup of one user.
data/home/{userId}/
├── settings.json # Per-user settings
├── mounts/default/ # Drive files + metadata.db
├── eigen.mail/ # Maildir + mail.db
├── eigen.contacts/ # contacts.db (the vCards themselves) + avatars
├── eigen.calendar/ # calendar.db
└── eigen.notifications/ # notifications.db
Organizations and teams follow the same pattern in sibling data/team/{teamId}/ and data/org/{orgId}/ trees: 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.
| 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) |
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, CODE-STANDARDS.md covers code style, and ARCHITECTURE.md covers the architecture patterns.
Found a security issue? Please do not open a public issue — see SECURITY.md for how to report privately.
Architecture docs live in docs/:
| Area | Docs |
|---|---|
| Architecture | Storage, Database, SSE, ACL, Search, Scalability |
| Deployment | Docker Setup, S3 Sync, Demo Mode, Testing |
| Frontend | Layout, Clipboard, Previews |
| Features | Mail, Calendar, Contacts, Chat, Notifications, IMAP, WebDAV |
| Apps | Sheets, Slides, Canvas engine (Vector + Slides), Stickies, Comments |
| Operations | Quota, Server Settings, Export, Organizations |
Questions, ideas, or want to contribute? Reach out at reinder@eigen.is.
77 followers · starred Jun 2026
11 followers · starred Jun 2026
TypeScript
97.7%
Shell
1.6%
Your own workspace. A self-hosted, open source alternative to Google Workspace: mail, drive, docs, sheets, slides, calendar and chat.
See the codeYour own workspace. Simple, secure, self-hosted.
Try the live demo at demo.eigen.is. It is a shared workspace that resets every hour.
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, drawings, kanban boards, 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.
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.
Nextcloud is the established self-hosted workspace. It is mature, has a huge ecosystem, and if you need something proven today, it is the safer choice. Eigen is pre-1.0 and built by one person.
Eigen makes different choices:
If Nextcloud works for you, keep using it. Eigen exists for people who want a workspace that feels like one product instead of a platform with plugins.
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.
Eigen is pre-1.0 and actively developed. The core works, but be deliberate about what you put on it:
./eigen backup (or your own routine) and verify it restores. Eigen does not back up your data for you.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.
Eigen ships as a monorepo with a single API server and a set of tightly integrated frontend apps:
Eigen doesn't lock you into its web interface. Standard protocols let you use your favorite native clients:
Read the Setup Guide.
The short version: you need a Linux server with Docker, and a domain that points at it. Then:
mkdir -p /opt/eigen && cd /opt/eigen
curl -fsSL https://eigen.is/install | sh
The script downloads the eigen command and runs ./eigen setup. Setup asks for your web address and mail domain, whether Eigen or your own web server handles HTTPS, and whether to host email on this server. Then it starts Eigen and prints a link that finishes the setup in your browser.
Everything runs in Docker: Caddy for HTTPS, the Eigen API, and Postfix, Dovecot and Unbound for mail. The same eigen command updates, backs up and restores: ./eigen help.
Developing Eigen? See CONTRIBUTING.md § Eigen in Docker.
Needs Bun at the version in .bun-version (install it with curl -fsSL https://bun.sh/install | bash -s "bun-v$(cat .bun-version)") and Git. PDF export needs weasyprint on your PATH and video thumbnails need ffmpeg. Everything else works without them.
git clone https://github.com/eigen-is/eigen.git
cd eigen
bun install
bun run serve
This starts the API on localhost:8000 and every app on its own port. The API logs a one-time link, Finish the setup at http://localhost:3009/admin/#setup=…. Open it to create your admin account and choose where files are stored. Data lands in data/ in the checkout.
The API reads .env.development. Put your own overrides in .env. Eigen sends no mail in development: the API logs each message's sender, recipient and subject instead. To read 2FA and guest codes, run Mailpit and add SMTP_HOST=localhost and SMTP_PORT=1025 to .env.
bun run serve:mail # One 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 + repo guards + tests, before every PR
Docker is only needed to test mail delivery, IMAP or the images: see CONTRIBUTING.md.
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. ./eigen backup saves the whole server as one snapshot; docs/BACKUP.md covers it and the backup of one user.
data/home/{userId}/
├── settings.json # Per-user settings
├── mounts/default/ # Drive files + metadata.db
├── eigen.mail/ # Maildir + mail.db
├── eigen.contacts/ # contacts.db (the vCards themselves) + avatars
├── eigen.calendar/ # calendar.db
└── eigen.notifications/ # notifications.db
Organizations and teams follow the same pattern in sibling data/team/{teamId}/ and data/org/{orgId}/ trees: 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.
| 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) |
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, CODE-STANDARDS.md covers code style, and ARCHITECTURE.md covers the architecture patterns.
Found a security issue? Please do not open a public issue — see SECURITY.md for how to report privately.
Architecture docs live in docs/:
| Area | Docs |
|---|---|
| Architecture | Storage, Database, SSE, ACL, Search, Scalability |
| Deployment | Docker Setup, S3 Sync, Demo Mode, Testing |
| Frontend | Layout, Clipboard, Previews |
| Features | Mail, Calendar, Contacts, Chat, Notifications, IMAP, WebDAV |
| Apps | Sheets, Slides, Canvas engine (Vector + Slides), Stickies, Comments |
| Operations | Quota, Server Settings, Export, Organizations |
Questions, ideas, or want to contribute? Reach out at reinder@eigen.is.
77 followers · starred Jun 2026
11 followers · starred Jun 2026
TypeScript
97.7%
Shell
1.6%