Eigen: 构建工作区
Eigen: Building a Workspace

原始链接: https://reindernijhoff.net/2025/10/eigen-building-a-workspace/

受到对谷歌工作区欧洲替代方案的渴望以及对大型科技公司权力的担忧,Reinder 在业余时间仅用两个月构建了一个可用的概念验证工作区——**Eigen**(荷兰语/德语意为“自己的”)。Eigen 目前在 [eigen.is](https://eigen.is) 上可用,功能包括网页邮件、文件存储与共享、协作文档编辑、联系人管理和看板,所有功能均具有实时协作。 该项目利用现代技术栈(Bun、Elysia、Vite、React、TypeScript)和独特的架构:每个用户都有一个完全隔离的目录,其中包含用于元数据的 SQLite 数据库和用于内容的数据库——简化了备份和扩展,但也给共享和搜索带来了挑战。 目前该项目功能尚属精简——仅代表可行产品的 5% 以下,Reinder 计划继续开发,重点是可扩展性、可扩展性(可能通过插件/API)以及加密、日历和协议兼容性等功能。他设想了一种类似于 WordPress 的自托管模式,以及一个公共平台,可能实现类似于 Mastodon 的跨服务器协作。他正在积极寻求反馈、贡献和支持,以完善该项目并构建一个简单、安全的workspace,让用户真正拥有自己的数据。

黑客新闻 新的 | 过去的 | 评论 | 提问 | 展示 | 工作 | 提交 登录 Eigen: 构建一个工作区 (reindernijhoff.net) 4 分,by todsacerdoti 2 小时前 | 隐藏 | 过去的 | 收藏 | 1 评论 synthBirba 1 小时前 [–] 有趣的文章!阅读其他人从想法到具体成果的历程总是令人愉快。 我认为走“WordPress 路线”可能是像这样的项目的成功之路。(但我觉得,现在添加“Fediverse 功能”可能会造成混乱,而不是带来好处)回复 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:
相关文章

原文

Last spring I started wondering: how hard would it be to build my own Google Workspace? Given the situation in the USA and the power large tech companies hold, a European alternative feels needed.

Of course, building a workspace yourself sounds impossible, but you only know for sure if you have tried :)

Surprisingly, after only two months of spare-time development (with some help from Mark), I had a working proof of concept. Mail, drive, docs, contacts and kanban boards are in place with real time collaboration. You can try it at eigen.is.

The name Eigen is Dutch/German for “own”, which turned out to describe the whole idea well.

Apps

The basics work:

  • eigen|mail>: a simple webmail client. You can read and send messages.
  • eigen|drive>: file storage and sharing. Upload files, create folders, share with others.
  • eigen|docs>: collaborative text editing using Yjs. Multiple users can edit the same document without conflicts.
  • eigen|contacts>: basic contact management.
  • eigen|stickies>: kanban boards like Trello. You can move cards around and collaborate in real time.

It’s all minimal, but functional enough to feel like a small ecosystem.

Under the hood

To prototype something quickly, I decided to use NPM packages and build on open source libraries. This is something I normally avoid. For my other projects, I often end up writing all code myself and reinventing wheels. Even the few NPM packages I published are completely dependency free.

The stack is standard and modern (at least, that’s what someone who knows these things told me): Bun for the server runtime, Elysia for server routing, Vite and React with TypeScript for the frontend, TanStack Router and TanStack Query for routing and data fetching, Tailwind CSS and shadcn/ui for the interface.

The interesting part is the architecture I accidentally ended up with. I started with a simple approach: each user gets their own directory. SQLite databases (per user) store metadata and structured data, actual content is stored as files. No shared databases, no complex central systems.

I did it that way because it was the simplest thing that could work.

But it has some nice properties:

  • Each user’s data is completely isolated. No shared database means no way to accidentally access someone else’s data.
  • Backups are trivial: just copy a user’s directory.
  • Adding users doesn’t affect existing ones. Easy to scale.
  • Each user could potentially bring their own storage backend.

Of course, it also creates a few interesting problems:

  • How do you share documents when each user’s data is isolated?
  • How do you enable real-time collaboration?
  • How do you handle search across file-based data?

For real time collaboration in docs and stickies, the server keeps Yjs documents in memory while they are active. They sync over WebSockets and are periodically written to disk. When everyone closes a doc, it disappears from memory.

Uploading multiple images to eigen|drive>
Collaborative editing in eigen|docs>

What’s Next?

After two months of spare time development, much more worked than I initially expected. That makes me excited to keep going and to see how far this can go. You never know if it will really work or become truly useful, but I would like to find out.

Reality check: I have built only a very small part of a minimum viable product. Probably less than five percent of what needs to be built, and it will take many years of work to reach production readiness.

Missing pieces:

  • End-to-end encryption
  • Calendar
  • Spreadsheets and presentations
  • Organization support (teams, shared resources)
  • Protocol compatibility (IMAP, CalDAV, WebDAV) for standard clients
  • Backup and migration tools

Beyond implementing missing pieces, there are fundamental questions to answer:

First, can the current architecture actually scale? I need to find out where the limits are before going too far in the wrong direction.

Second, is this the simplest approach? For example, could mapping workspace users 1-to-1 to Linux system users make everything easier or more secure? I chose the current structure because it seemed simple at the time, but there might be better solutions.

Third, how do we make Eigen extensible? The core will stay minimal by design. But organizations rolling this out should be able to extend it. We should figure out early what a plugin/API architecture should look like. How can third parties write deep integrations as extensions without forking the entire project.

Fourth, where should this go? I’m thinking of a model like WordPress: you can self-host Eigen (startups could run their own instance), while eigen.is would be a public platform running the same software. Ideally, users from different servers could still share and collaborate; similar to how Mastodon works with decentralized authentication. Whether and how to implement this is another question.

First steps:

  • Collect feedback, refine the scope and decide what to build first
  • Open source the code so others can look at it, try to break it and help validate the architecture

Looking for input and support

I would love input from others. The current structure is not leading and not a requirement. I want it to work. The aim is a simple and safe workspace where you own your data.

If you want to try early versions, contribute or sponsor, let me know. The project is at eigen.is. You can reach me at [email protected].

联系我们 contact @ memedata.com