TL;DR

  • Ignis는 Obsidian에서 사용하는 Electron API를 브라우저 호환 방식으로 구현하는 호환성 계층으로, vault를 서버에 둔 채 표준 브라우저에서 Obsidian을 실행함.
  • Docker 컨테이너는 처음 실행할 때 Obsidian을 공식 출처에서 내려받으며, 프로젝트에는 Obsidian 자체가 포함되거나 배포되지 않음.
  • 현재는 자체 호스팅 서버 형태로 제공되며, 다중 vault, 탭 간 실시간 동기화, 플러그인 및 모바일 UI를 지원함.
  • 브라우저에서 사용할 수 없는 Electron·Node 기능 때문에 일부 플러그인과 기능에는 제한이 있으며, Ignis에는 내장 인증 기능이 없음.
  • 압축된 초기 응답, 실시간 파일 이벤트, 사전 캐시 및 기본 50MB의 LRU 캐시 등으로 대규모 vault와 느린 저장소의 사용을 고려함.

개요

  • Ignis는 Obsidian에서 사용하는 Electron API의 브라우저 호환 구현을 제공하는 호환성 계층(shim)으로, vault를 서버에 둔 채 표준 브라우저에서 Obsidian을 실행함.
  • Obsidian 자체는 이 프로젝트에 포함되거나 배포되지 않으며, Docker 컨테이너가 처음 실행될 때 Obsidian을 공식 출처에서 직접 내려받음.

개발 배경

  • Obsidian의 로컬 우선(local-first) 방식은 대부분의 사용자에게 잘 작동하지만, 개인 Obsidian 설치본에 원격으로 접근하는 방법은 사용자 경험이 좋지 않은 VNC 기반 솔루션에 제한돼 있음.
  • Ignis는 브라우저에서 개인 Obsidian 설치본에 네이티브에 가까운 형식으로 접근하려는 사용자를 위한 대안임.

프로젝트 상태

  • Ignis는 현재 일상적인 노트 작성에 사용하는 도구로 활발히 개발 중이며, 새 프로젝트인 만큼 확인되는 공백을 문서화하고 수정하는 중임.
  • 주요 계획 기능과 수정 사항의 개요는 로드맵에서 확인할 수 있음.

빠른 시작

  • Docker Compose로 Ignis를 실행하며, 기본 설정은 이미지 nobbe/ignis:latest, 포트 8080, 사용자 ID PUID=1000, 그룹 ID PGID=1000을 사용함.
  • vault 저장 위치는 ./vaults:/vaults, 앱 데이터는 ./data:/app/data, Obsidian 앱 파일은 obsidian-app:/app/obsidian-app에 연결하며, 컨테이너 재시작 정책은 unless-stopped임.
  • 설정을 docker-compose.yml로 저장한 뒤 docker compose up -d를 실행하고 http://localhost:8080에 접속함.
  • 첫 실행 시 Obsidian을 공식 출처에서 내려받으므로 1~2분 정도 걸릴 수 있으며, vault가 없으면 첫 vault를 만들 수 있도록 vault 관리자가 열림.
  • 다른 기기에서 접속하도록 공개하기 전에 인증을 적용하고 HTTPS로 제공해야 함.
  • Ignis에는 내장 인증이 없으므로 공개된 인스턴스에 접근할 수 있는 누구나 전체 vault를 읽고 쓸 수 있음.
  • HTTPS 또는 localhost 같은 안전한 컨텍스트가 아니면 브라우저가 Ignis에 필요한 기능을 비활성화함.
  • 전체 설정과 구성은 배포 안내서에 있으며, 나머지 문서는 설정, 보안 및 운영을 다룸.

배포 형태

  • Ignis는 현재 자체 호스팅 서버 형태로 제공되며, 데스크톱 플러그인 형태는 계획 중임.
  • 서버 버전은 apps/ignis-server/에 있으며 설정 방법은 문서에 안내돼 있음.

기능

  • Obsidian 핵심 기능: 편집기, 캔버스, 베이스, 명령 팔레트, 컨텍스트 메뉴, 테마 및 CSS 스니펫.
  • Obsidian 플러그인 API를 기반으로 만든 커뮤니티 플러그인 대부분.
  • Node 네이티브 모듈 또는 child_process가 필요한 플러그인은 로드되지 않음.
  • 파일 업로드: 리본, 마우스 오른쪽 클릭, 끌어다 놓기.
  • 파일 다운로드: 개별 파일 또는 ZIP 형식의 폴더.
  • 다중 vault: 생성, 열기, 전환, 이름 변경 및 삭제, 브라우저 탭마다 별도의 vault 사용.
  • WebSocket을 통한 탭 간 실시간 동기화로 편집 내용이 1초 이내에 전파됨.
  • 저장된 작업 공간을 ?workspace= URL 매개변수로 별도 탭에서 열기.
  • ?file= 매개변수로 URL에서 노트를 바로 열기.
  • 노트 메뉴의 ‘경로 복사’ 항목에 ‘Ignis URL로’ 옵션이 있음.
  • 로그인한 탭에서 사용하는 Obsidian Sync 또는 탭을 열지 않아도 작동하는 서버 측 Headless Sync.
  • 플러그인 요청을 위한 교차 출처 프록시와 CORS 호환 호스트를 위한 직접 요청 허용 목록.
  • 작은 화면용 모바일 UI.
  • 전체 기능과 설정 방법은 문서에서 확인할 수 있음.

제한 사항

  • 브라우저에서 Obsidian을 실행하면 대응되는 기능이 없는 일부 Electron 및 Node 기능 때문에 특정 플러그인과 기능의 사용이 제한되거나 불가능함.
  • 자세한 내용은 제한 사항 및 플러그인 호환성 문서에 안내돼 있음.

성능

  • 사전 압축된 초기 응답 한 번으로 vault 정보, vault 목록, 메타데이터 트리 및 플러그인 목록을 전달함.
  • 실시간 파일 이벤트를 이용해 vault 파일 트리를 최신 상태로 유지함.
  • 인덱서 사전 가져오기가 콘텐츠 캐시를 예열하므로 Obsidian 시작 시 인덱싱 요청이 네트워크 대신 캐시를 사용함.
  • 기본 50MB인 LRU 콘텐츠 캐시로 메모리 사용량을 제한하며, vault 전체를 메모리에 보관하지 않음.
  • 대규모 vault에서 파일 감시 부하를 줄이도록 파일 감시 대상에서 경로를 제외할 수 있음.
  • 느린 파일 시스템(rclone, FUSE, NFS, SMB)을 위한 선택적 쓰기 병합 기능은 빠른 쓰기를 디바운스하며, WRITE_COALESCE_MS를 설정하지 않으면 꺼져 있음.
  • 자세한 설명은 설정 문서에 안내돼 있음.

기여

  • 기여를 환영하며, 플러그인 호환성 문제 보고 방법을 포함한 지침은 CONTRIBUTING.md에 안내돼 있음.
  • 작업할 항목은 공개 이슈에서 확인할 수 있음.

아키텍처

  • 호환성 계층, 플러그인 시스템 및 서버 내부 구조에 관한 자세한 내용은 ARCHITECTURE.md에 안내돼 있음.

라이선스

  • 이 프로젝트는 GNU Affero General Public License v3.0에 따라 라이선스가 부여됨.

법적 고지

  • Ignis는 Dynalist Inc. 또는 Obsidian과 제휴하거나, 이들의 보증을 받거나, 이들과 관련된 프로젝트가 아님.
  • 이 프로젝트는 독립적으로 개발된 상호 운용성 도구이며 Obsidian 소스 코드, 바이너리 또는 자산을 포함하지 않음.
  • Obsidian의 어떤 부분도 이 저장소에 배포되거나 포함되지 않으며, Docker 컨테이너가 실행 시 Obsidian을 공식 출처에서 직접 내려받음.
  • 이 작업은 유럽연합 소프트웨어 지침인 Directive 2009/24/EC 제6조의 상호 운용성 조항에 해당함. 전체 근거는 LEGAL.md에 안내돼 있음.
  • 이 프로젝트는 Obsidian을 매일 사용하며 브라우저에서도 접근하고자 하는 데서 비롯됐으며, Obsidian, Dynalist Inc. 또는 이들의 사업에 해를 끼치려는 의도는 없음.
  • Dynalist Inc. 관계자는 ignis@thiefling.com으로 연락해 프로젝트에 관해 논의할 수 있음.