Show HN: 오픈소스 워크스페이스 (메일, 문서, 스프레드시트, 드라이브) 웹/iOS
요약
데이터 소유권을 보장하는 셀프 호스팅 기반의 오픈소스 생산성 플랫폼입니다. 메일, 캘린더, 문서, 스프레드시트 등 6개의 통합 앱을 제공하며, 표준 프로토콜과 CRDTs를 활용한 실시간 협업 기능을 지원합니다.
핵심 포인트
- 데이터 주권 보장을 위한 셀프 호스팅 및 오픈소스 모델
- 표준 프로토콜 지원으로 다양한 클라이언트와 호환 가능
- CRDTs 기반의 실시간 협업 및 문서/스프레드시트 지원
- Docker를 통한 간편한 배포 및 저비용 운영 가능
팀을 위한 셀프 호스팅 (Self-hosted) 생산성 제품군이자, 여러분이 차세대 앱을 구축할 수 있는 플랫폼입니다. 표준 프로토콜을 사용하며, 데이터를 직접 소유하고, 영원히 무료로 사용할 수 있습니다.
동일한 프로젝트로 향하는 두 개의 문이 있습니다. 하나는 15분 만에 팀을 위한 작동 가능한 생산성 제품군으로 이어집니다. 다른 하나는 여러분이 차세대 앱을 구축할 수 있는 플랫폼으로 이어집니다.
1export default {
2 name: 'CRM',
3 slug: 'crm',
...
일상적인 생산성을 아우르는 긴밀하게 통합된 6개의 앱입니다. 각 앱은 네이티브 프로토콜 (Native protocols)을 지원하므로 웹 UI, 모바일 앱, 또는 즐겨 사용하는 데스크톱 클라이언트를 사용할 수 있습니다.
스레드형 대화 (Threaded conversations), 라벨, 첨부 파일 및 전송 추적 기능을 갖춘 완전한 이메일입니다. 모든 IMAP 또는 SMTP 클라이언트와 연결할 수 있습니다.
반복 일정, 게스트 관리, RSVP, 알림 및 색상별 카테고리 기능이 포함된 공유 캘린더입니다.
즐겨찾기, 메모 및 조직 전체 공유 기능이 있는 공유 연락처 디렉토리입니다. 모든 CardDAV 클라이언트와 동기화됩니다.
버전 관리, 공유 링크, 역할 기반 권한 (Role-based permissions), 썸네일 및 휴지통 기능을 갖춘 클라우드 파일 저장소입니다.
탭 안에 있는 텍스트 영역 (Textarea)이 아닌 진짜 문서 편집기입니다. 풍부한 서식, 표, 댓글을 지원하며 CRDTs를 통한 실시간 협업이 가능하고, .docx 및 Markdown의 완전한 호환성 (Full-fidelity round-trips)을 제공합니다. 모바일 네이티브: 키보드와 씨름할 필요 없이 휴대폰에서 서식을 지정하고 편집할 수 있습니다.
기능 완비 · 가벼운 실전 테스트 완료
휴대폰에서도 잘 작동하는 스프레드시트입니다. 수식, 이름 지정 범위 (Named ranges), 워크북 스냅샷, 그리고 Drive 기반의 실시간 공동 편집을 지원합니다. 서식이 유지된 상태로 CSV 및 .xlsx 가져오기/내보내기가 가능하여, 팀이 이미 사용 중인 도구들과 원활하게 호환됩니다.
기능 완비 · 가벼운 실전 테스트 완료
공식 TinyCld iOS 앱이 출시되었습니다. 여러분의 서버에 연결하고 로그인하면, 메일, 캘린더, 연락처 및 드라이브가 실제로 사용하는 곳에 나타납니다. 중간 매개체도 없고, 분석 데이터 수집도 없으며, 데이터를 다시 호스팅할 필요도 없습니다.
Google 데이터를 내보내세요. ZIP 파일을 TinyCld로 드래그하세요. 우리는 웹 워커 (Web worker)에서 .mbox, .ics, .vcf를 파싱하고, vCard UID를 통해 연락처의 중복을 제거하며, ICAL_UID를 통해 캘린더를 병합하고, 파일을 원래 폴더로 다시 되돌려 놓습니다.
.zip
TinyCld로 바로 들어갑니다 - 압축을 풀 필요가 없습니다. 파싱 (Parsing)은 웹 워커 (Web Worker)에서 수행되므로, 20GB 용량에서도 UI가 빠릿하게 유지됩니다. ICAL_UID를 통해 캘린더를 이름으로 재사용합니다. 다른 서비스의 래퍼 (Wrapper)가 아닙니다. 빠르고 가벼우며 팀의 자유를 존중하는 바닥부터 새로 만든 구현체입니다.
사용자당 과금 방식(Per-seat pricing)도, 프리미엄 등급도, 예상치 못한 추가 비용도 없습니다. TinyCld는 허용적인 라이선스 (Permissive license) 하에 오픈 소스로 제공됩니다. 월 5달러짜리 VPS에 셀프 호스팅 (Self-host)하거나 저희의 호스팅 옵션을 사용하세요.
귀하의 이메일, 파일, 연락처는 귀하의 서버에 존재합니다. 데이터 마이닝도, 광고도, 종속 (Lock-in)도 없습니다. 언제든 무엇이든 내보낼 수 있습니다.
단일 Docker 이미지는 5달러짜리 VPS, 홈랩 (Homelab), 또는 Dokku 원라이너 (One-liner)에서 실행됩니다. 헬스체크 (Healthchecks)와 Let's Encrypt가 내장되어 있어 운영 팀 (Ops team)이 필요하지 않습니다.
자신의 서버에 셀프 호스팅하면 TinyCld는 절대 외부로 정보를 보내지 않습니다. 분석 (Analytics), 충돌 핑 (Crash pings), 사용량 보고서 등이 전혀 없습니다. 외부 이메일 이미지는 범위 제한 토큰 (Scoped token)을 통해 귀하의 서버를 거쳐 프록시 (Proxy) 처리되므로, 발신자가 귀하의 IP, 수신 확인 (Read receipts), 또는 사용자 에이전트 (User agent)를 볼 수 없습니다. 빅테크 기업은 아무것도 볼 수 없습니다. 아무것도 전송되지 않기 때문입니다.
IMAP, SMTP, CalDAV, CardDAV, WebDAV - Apple Mail, Thunderbird, 모든 CalDAV 클라이언트를 사용하거나 드라이브를 네트워크 폴더로 마운트 (Mount)하여 사용하세요.
사용자는 서로 다른 역할을 가진 여러 조직 (Organizations)에 속할 수 있습니다. 조직 경계 내에서 캘린더, 연락처, 메일함, 파일을 공유합니다.
웹, iOS, Android를 위한 단일 앱 - 여기에 표준 프로토콜 (Standard protocols)을 지원하여 Apple Mail, Thunderbird, Finder가 함께 바로 작동합니다.
서버 전송 이벤트 (Server-sent events)를 통해 모든 앱에서 실시간 업데이트가 이루어집니다. 폴링 (Polling)이나 수동 새로고침이 필요 없습니다. 다른 사용자나 기기에서의 변경 사항이 즉시 나타납니다.
모든 앱은 고유의 네이티브 프로토콜 (Native protocol)을 사용합니다. 저희의 웹 UI를 사용하거나, 즐겨 사용하는 데스크톱 클라이언트를 사용하거나, 혹은 둘 다 사용하세요. 항상 귀하의 선택에 달려 있습니다.
:993
:465
:443
:443
:443
작은 Linux VM에 TinyCld를 직접 호스팅하세요. 단 하나의 Docker 컨테이너와 하나의 컴포즈 (Compose) 파일만 있으면, 약 15분 만에 작동하는 이메일과 HTTPS를 구축할 수 있습니다.
# Docker가 설치된 모든 Linux VM에서
$ mkdir tinycld && cd tinycld
$ curl -O https://raw.githubusercontent.com/tinycld/app/main/docker-compose.yml
...
모든 패키지는 이미 까다로운 부분들을 처리하고 있는 작동 가능한 앱 셸 (app shell)로 시작합니다. manifest.ts를 넣기만 하면, 이 모든 기능을 무료로 얻고 여러분에게 실제로 중요한 부분들만 출시할 수 있습니다.
세션 (Sessions), 회원가입 (signup), 로그인 (login), 그리고 OAuth 준비가 된 사용자 레코드 (user records).
const { user } = useAuth()
조직별 역할 (per-org roles)을 가진 여러 조직 내의 사용자들. 라우트 (Routes)는 조직 범위 (org-scoped)로 지정됩니다.
const { orgId, orgSlug } = useOrgInfo()
TanStack DB를 이용한 반응형 쿼리 (Reactive queries). 업데이트가 자동으로 푸시됩니다.
useOrgLiveQuery((q, { orgId }) => …)
롤백 (rollback) 기능이 포함된 낙관적 업데이트 (Optimistic updates). 시퀀싱 (sequencing)을 위한 제너레이터 (Generator) 기반 방식.
const m = useMutation({ mutationFn: …})
최종 사용자를 위한 트랜잭션 (transactional) + IMAP/SMTP 서비스 제공. 단 하나의 설정.
mailer.Send(ctx, msg)
업로드, 버전 관리, 공유. 썸네일 (Thumbnails), MIME 감지, 역할 범위 (role-scoped) 적용.
drive.insert({ file, parent, owner })
앱 내 드로어 (drawer) + 토스트 (toasts). 모든 패키지 이벤트에 대한 단일 피드.
notify({ title, body, data })
기본 제공되는 네이티브 iOS + Android 푸시 (push). 사용자별 디바이스 토큰 (device tokens).
push.SendToUser(ctx, userId, msg)
모든 변경 사항에 대한 추가 전용 (Append-only) 기록. 탐색 및 내보내기를 위한 UI.
audit.Record(ctx, "contact.created", …)
Hook Form + Zod, 엔드 투 엔드 (end-to-end) 타입 지정. 스타일에 맞춰 스타일링된 입력창.
useForm({ resolver: zodResolver(schema) })
라이트 + 다크 모드, 시맨틱 토큰 (semantic tokens), 사용자가 선택 가능한 컬러 팔레트 (color palettes).
useThemeColor('foreground')
단일 코드베이스. Expo Router 라우트가 웹과 모바일 모두에서 작동합니다.
<Link href={orgHref('crm/[id]', …)} />
여기에 PocketBase가 제공하는 모든 것 (관리자 UI, 파일 스토리지, 실시간 기능, OAuth 프로바이더)과 Expo가 제공하는 모든 것 (웹 + iOS + Android에서의 Expo Router, EAS 빌드, OTA 업데이트)이 더해집니다. 여러분이 직접 구축할 필요가 없는 스택입니다.
패키지는 manifest.ts가 포함된 폴더입니다. 매니페스트 (manifest)는 리포지토리 (repo)에 이미 존재하는 디렉토리를 가리키며, 제너레이터 (generator)는 빌드 타임 (build time)에 이 모든 것을 실행 중인 앱에 연결합니다.
1export default {
2 slug: 'crm',
3 routes: { directory: 'screens' },
...
screens/ : 조직 범위 라우트 (Org-scoped routes) collections.ts
settings/ : 타입이 지정된 pbtsdb 연결 (Typed pbtsdb wiring)
pb-hooks/ : 설정 패널 (Settings panels)
PocketBase JS hooks pb-migrations/
DB migrations server/ (Go)
First-class Go ext public-screens/
Top-level routes tests/
Vitest + Playwright npm install
이를 워크스페이스 멤버로 연결합니다. 각 패키지는 자체적인 히스토리, 이슈(Issues), 그리고 PR(Pull Requests)을 가진 독립적인 git 저장소입니다. 여러분의 기술 스택에 맞는 것 — JavaScript, Go, 또는 둘 다 — 을 선택하여 이번 주말에 바로 수정 사항을 배포해 보세요.
스캐폴딩(Scaffolding) CLI는 작동 가능한 매니페스트(Manifest), 예시 스크린, 그리고 실행 중인 앱 쉘(App shell)에 연결된 심볼릭 링크(Symlink)를 포함한 형제 저장소(Sibling repo)를 설정합니다.
npm create 단계에서
브라우저의 라이브 라우트(Live route)까지 이어집니다.
# 워크스페이스 루트에서
$ npx @tinycld/bootstrap
? 패키지 이름은 무엇입니까? crm
...
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Posts의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기