Open-source, self-hosted workspace for pages, databases and AI. One Node.js process with SQLite.
이 번역은 AI가 원문 README를 옮긴 것입니다. 원문이 항상 우선합니다.
Litpage는 직접 운영하는 오픈소스 워크스페이스입니다. 블록 에디터로 글을 쓰고, 페이지와 팀을 정리하고, 다양한 뷰를 갖춘 데이터베이스로 작업을 추적하고, 세밀한 권한으로 공유하며, 자신의 AI 키를 연결해 채팅, 에이전트, 글쓰기 도움을 받을 수 있습니다. 앱 전체가 하나의 Node.js 프로세스와 하나의 SQLite 파일로 동작하며, 노트북이나 단일 서버에서 돌릴 수 있을 만큼 작습니다.
데모 체험: litpage-demo-production.up.railway.app 을 열고 Try the demo를 클릭하면 가입 없이 사용할 수 있습니다.
샘플 페이지가 포함된 자신만의 워크스페이스가 주어지고, 다른 사람은 볼 수 없으며, 4시간 후 삭제됩니다. 데모에서는 AI가 연결되지 않습니다.
node:sqlite와 전문 검색), 파일은 한 폴더에 모입니다. Postgres, Redis, 큐를 따로 돌릴 필요가 없습니다.포함된 모든 것
docker build -t litpage.
docker run -d --name litpage -p 3001:3001 -v litpage-data:/data \
-e NC_BOOTSTRAP_EMAIL=you@example.com -e NC_BOOTSTRAP_PASSWORD='change-me' \
litpage
http://localhost:3001 을 열고 해당 이메일과 비밀번호로 로그인합니다("Continue with a password"). 데이터(SQLite 데이터베이스와 업로드된 파일)는 litpage-data 볼륨에 저장됩니다.
요구 사항: Node.js 26 이상과 pnpm 10(npm install -g pnpm@10.32.1).
pnpm install
pnpm dev # API on http://127.0.0.1:3001, web app on http://127.0.0.1:5173
http://127.0.0.1:5173 을 열고 아무 이메일 주소나 입력합니다. 개발 모드에서는 로그인 코드가 화면에 표시되고, 온보딩에서 첫 워크스페이스를 만듭니다. 데이터는 apps/server/data/에 저장됩니다.
API 서버가 3001 포트에서 제공하는 프로덕션 빌드의 경우:
pnpm build && pnpm start
다음 항목을 환경 변수로 설정합니다(개발 환경에서는 apps/server/.env.local도 읽으며, 이 파일은 git에서 무시됩니다).
| 변수 | 기본값 | 역할 | ||
|---|---|---|---|---|
PORT / HOST |
3001 / 127.0.0.1 |
서버가 수신하는 위치(Docker 이미지는 0.0.0.0 사용). |
||
NCDATADIR |
apps/server/data |
SQLite 데이터베이스와 업로드된 파일. 영구 볼륨을 여기에 마운트합니다. | ||
NCPUBLICURL |
http://127.0.0.1:5173 |
공개 주소로, 이메일 내 링크에 사용됩니다. | ||
NCBOOTSTRAPEMAIL, NCBOOTSTRAPPASSWORD |
설정 안 함 | 새 프로덕션 설치에서 첫 계정을 만듭니다. | ||
NCDEMOMODE |
설정 안 함 | 1로 설정하면 모든 방문자가 자신만의 임시 워크스페이스를 받는 강화된 공개 데모가 됩니다. 계정 신원, 워크스페이스 제어, 공유, 통합, 외부로 나가는 작업, 공개 노출이 차단됩니다. |
||
NCDEMOSANDBOX_HOURS |
4 |
데모 모드에서 방문자 워크스페이스가 삭제되기 전까지 유지되는 시간. | ||
NCDEMOMAX_SANDBOXES |
300 |
데모 모드에서 동시에 존재할 수 있는 방문자 워크스페이스 수. 가득 차면 만료된 것부터 삭제하고, 그렇지 않으면 새 방문자에게 나중에 다시 시도하라고 안내합니다. | ||
NCDEMOMAX_RECORDS |
5000 |
데모 모드에서 방문자 워크스페이스당 블록, 데이터베이스 행, 댓글 및 기타 레코드 수. | ||
NCDEMOMAXUPLOADMB, NCDEMOMAX_FILES |
25, 50 |
데모 모드에서 방문자 워크스페이스당 업로드 파일(각 파일은 5 MB로 제한). | ||
NCDEMOSANDBOXESPERIPHOUR, NCDEMOSANDBOXESPERIPDAY |
5, 20 |
데모 모드에서 클라이언트 주소당 새 워크스페이스 수(프록시 뒤에서는 NCTRUSTPROXY=1 설정). |
||
NCDEMORESET_HOURS |
설정 안 함 | 데모 모드에서 SQLite를 열기 전에 설정된 데이터 디렉터리를 지우고, 이 시간(시간 단위) 후에 정상 종료합니다(안전장치; NCDEMOSANDBOX_HOURS보다 길게 유지). 종료 후에는 플랫폼이 서비스를 재시작해야 합니다. |
||
NCSMTPURL, NCMAILFROM |
설정 안 함 | 발신 메일(smtp:// 또는 smtps:// URL). 없으면 메일은 개발용 아웃박스에만 보관됩니다. |
||
NCTRUSTPROXY |
설정 안 함 | 리버스 프록시 뒤에서 1로 설정하면 클라이언트 주소를 X-Forwarded-*에서 가져옵니다. |
||
NCALLOWEDORIGINS |
설정 안 함 | API를 호출할 수 있는 추가 오리진, 쉼표로 구분. | ||
| AI 변수 | 설정 안 함 | AI with your own key 항목 참고. |
NCDEMOMODE=1로 설정하면 공개 데모를 게시합니다. 로그인 페이지에 Try the demo가 표시되며, 한 번 클릭하면 임시 계정과 "Litpage Demo"라는 워크스페이스가 만들어집니다. 여기에는 "Start here" 페이지와 샘플 페이지(Roadmap, Projects, Meeting notes, Team wiki)가 포함되고 방문자가 로그인됩니다. 각 방문자는 자신의 워크스페이스만 볼 수 있으며, 생성 후 NCDEMOSANDBOX_HOURS가 지나면 페이지, 댓글, 기록, 검색 항목, 파일 등 모든 내용과 함께 삭제됩니다. 백그라운드 작업이 몇 분마다 확인합니다. 알림 바의 "Start over"는 새 워크스페이스로 교체합니다. 클라이언트 주소당 워크스페이스 수, 활성 워크스페이스 수, 레코드, 업로드에는 제한이 있습니다(위 표 참고).
서버는 계정 신원, 워크스페이스 관리, 초대, 공유 및 게시, 통합과 토큰, 웹훅, 공개 폼, AI 및 기타 외부로 나가는 작업, 그리고 다른 방문자에게 도달할 수 있는 모든 것을 거부합니다. NCBOOTSTRAPEMAIL과 NCBOOTSTRAPPASSWORD가 설정되어 있으면 로그인 페이지에 이메일 폼도 유지되어 해당 공유 계정으로 이전처럼 로그인할 수 있습니다. 설정하지 않으면 이메일 폼은 숨겨집니다. NCDEMORESET_HOURS는 추가로 시작 시 데이터 디렉터리를 지우고 주기적으로 프로세스를 재시작합니다. 모든 데모 데이터는 일회용으로 취급하고, 플랫폼이 종료 시 재시작하도록 설정하십시오.
모든 AI 기능은 서버에 설정된 하나의 제공자를 통해 동작합니다. 키는 서버에만 남습니다. 브라우저로 전송되지 않으며 로그와 오류에서 마스킹됩니다.
| 변수 | 역할 | ||
|---|---|---|---|
OPENAIAPIKEY |
OpenAI Responses API 호환 엔드포인트를 사용합니다. | ||
OPENAIBASEURL |
선택 사항, 기본값은 https://api.openai.com/v1. 호환 엔드포인트를 지정할 수 있습니다. |
||
ANTHROPICAPIKEY |
Anthropic API를 사용합니다(선택 사항 ANTHROPICBASEURL). |
||
NCAIMODEL, NCAIFAST_MODEL |
기본 모델, 그리고 제목·자동 채우기 같은 짧은 작업용 모델. | ||
NCAIPROVIDER |
openai, anthropic 또는 none. 설정하지 않으면 OPENAIAPIKEY가 있을 때 OpenAI, 없으면 ANTHROPICAPIKEY가 있을 때 Anthropic을 사용합니다. |
node scripts/tools/openai-smoke.mjs는 몇 개의 짧은 요청을 보내 실제 엔드포인트를 확인합니다. 테스트와 엔드투엔드 스크립트는 로컬 모의 서버와만 통신합니다.
/v1에서 페이지, 데이터베이스, 데이터 소스, 블록, 댓글, 사용자, 검색을 제공합니다. 설정에서 개인 액세스 토큰이나 통합을 만든 뒤: curl http://localhost:3001/v1/search \
-H "Authorization: Bearer $LITPAGE_TOKEN" \
-H "Litpage-Version: 2026-10-01" \
-H "Content-Type: application/json" \
-d '{"page_size": 10}'
/api/mcp에 있어 Model Context Protocol을 지원하는 AI 클라이언트가 접근 권한이 있는 페이지를 검색·편집할 수 있으며, 앱과 동일한 권한 검사를 적용합니다.Litpage-Version 헤더는 선택 사항이며 기본값은 현재 버전입니다.
flowchart LR
subgraph Browser
UI["React 19 app<br/>editor, databases, AI panel"]
end
subgraph Server["One Node.js process"]
RPC["JSON RPC<br/>/api/rpc"]
WS["Real-time sync<br/>WebSocket"]
REST["REST API and webhooks<br/>/v1"]
MCP["MCP endpoint<br/>/api/mcp"]
AI["AI service<br/>chat, agents, autofill"]
DB[("SQLite<br/>with full-text search")]
FILES[("Uploaded files")]
end
PROVIDER["Your AI provider<br/>OpenAI compatible or Anthropic"]
TOOLS["Your scripts and tools"]
CLIENTS["MCP clients"]
UI --> RPC
UI <--> WS
RPC --> DB
RPC --> FILES
WS --> DB
REST --> DB
TOOLS --> REST
CLIENTS --> MCP
MCP --> AI
RPC --> AI
AI --> PROVIDER
packages/shared records, operations, rich text, permissions, database query and formula engine
apps/server Node 26 + Hono + node:sqlite + WebSocket
apps/web React 19 + Vite
e2e end-to-end scripts (Chrome via playwright-core)
docs architecture.md, how-it-was-built.md
자세한 내용은 docs/architecture.md 참고.
pnpm typecheck
pnpm test # unit tests: shared, server, web
cd e2e && NC_BASE=http://127.0.0.1:5173 node smoke.mjs # end-to-end, one script per area
엔드투엔드 스크립트는 개발 서버를 대상으로 Google Chrome(기본 macOS 경로는 e2e/lib.mjs)을 구동합니다. 이 문서의 이미지는 scripts/readme/에서 생성됩니다(캡처 후 에셋 빌드).
Litpage는 YouTube 시리즈를 위한 실험으로 시작했습니다. AI 코딩 에이전트가 블록 기반 워크스페이스 앱 전체를 만들 때 어디까지 가능할까? 리드 Claude Code 세션이 작업을 영역별로 나누고 서브에이전트를 조율했으며, 단위 테스트와 엔드투엔드 테스트를 가드레일로 삼았습니다. 그 이야기는 docs/how-it-was-built.md에 있습니다. Litpage는 연구 및 시연 프로젝트이며 있는 그대로 제공됩니다.