runlot.json
프로젝트 디렉토리의 설정 파일입니다. 이름·진입점·자산 디렉토리와, 무엇을 켰는지의 기록이 들어갑니다.
web/apps/cli/src/config.ts 와 internal/bundle/bundle.go 입니다. 이 페이지는 빌드할 때 그 코드에서 만들어집니다.{
"name": "my-app",
"org": "me",
"main": "src/index.ts",
"assets": "public",
"database": true
}필드
| 필드 | 형 | 필수 | 뜻 |
|---|---|---|---|
name | string | 예 | 프로젝트 이름. 배포 주소의 첫 라벨이 됩니다 |
org | string | 아니오 | 조직 slug. --org 가 이 값을 이깁니다 |
main | string | 아니오 | 워커 진입점. 없으면 정적 자산만 배포합니다 |
assets | string | 아니오 | 정적 자산 디렉토리 |
compatibilityDate | string | 아니오 | workerd 호환 날짜 (YYYY-MM-DD) |
database | boolean | 아니오 | 데이터베이스를 쓴다는 기록. runlot pg create 가 적습니다 |
storage | boolean | 아니오 | 파일 저장소를 쓴다는 기록. runlot storage create 가 적습니다 |
auth | boolean | 아니오 | 앱의 로그인을 쓴다는 기록. runlot auth create 가 적습니다 |
framework | "next" | 아니오 | 프레임워크 어댑터. 지금 아는 값은 next 하나입니다 |
name 은 없으면 배포가 거절됩니다. main 과 assets 중 적어도 하나는 있어야 합니다 — 둘 다 없으면 서빙할 것이 없기 때문입니다. framework 를 적은 프로젝트는 예외입니다: 진입점과 자산을 빌드가 만듭니다.
기록이지 선언이 아닙니다
database · storage · auth 는 runlot pg create · runlot storage create · runlot auth create 가 적는 기록입니다. runlot deploy 는 이 값을 보고 만들지 않습니다 — 배포가 프로비저닝 경로이면 오타 하나가 조용히 데이터베이스를 만들고, 그것을 지우는 길은 배포에 없기 때문입니다. 기록과 실제가 어긋나면 배포가 경고합니다.
값이 이름이 아니라 true 인 이유는 한 프로젝트에 한 벌씩이기 때문입니다. 고를 것이 없으니 워커에서는 늘 env.db · env.storage · env.auth 입니다.
번들 매니페스트
runlot deploy 는 위 파일을 그대로 올리지 않습니다. 번들 안에 들어가는 runlot.json 은 빌드 결과를 가리키는 매니페스트이고, CLI 가 만듭니다. 사용자가 직접 적을 일은 없지만 검사 규칙은 알아 둘 만합니다.
| 필드 | 뜻 |
|---|---|
main | 번들 안의 워커 진입 모듈. 없으면 자산만 서빙하는 진입점이 자동으로 들어갑니다 |
assets | 번들 안의 자산 디렉토리 |
compatibilityDate | YYYY-MM-DD. 없으면 2024-09-23 입니다 |
compatibilityFlags | 허용 목록입니다. 지금 켤 수 있는 것은 nodejs_compat 하나뿐입니다 |
modules | 추가 모듈. wasm 형만 받습니다 |
framework | 프레임워크 어댑터. 아는 값은 next 하나입니다 |
compatibilityFlags 가 허용 목록인 이유는, 사용자 코드가 프로세스를 통째로 쥐게 하는 플래그를 어떤 매니페스트도 켤 수 없어야 하기 때문입니다. nodejs_compat 은 CLI 가 알아서 켭니다 — 번들에 Node 내장 모듈 import 가 있으면 그 플래그 없이는 로드 오류라, 사용자가 고를 것이 없습니다.
WASM 이 modules 로만 들어가는 이유는 workerd 가 번들 안에서 new WebAssembly.Module(bytes) 로 컴파일하는 길을 막기 때문입니다. Prisma 의 쿼리 컴파일러가 이 길로 들어갑니다.
번들 상한
| 축 | 상한 |
|---|---|
| 업로드(압축) | 64 << 20 |
| 푼 뒤 누적 | 512 << 20 |
| 항목 하나 | 64 << 20 |
| 항목 수 | 20_000 |
번들에는 실제 파일만 담깁니다. 심볼릭 링크, 프로젝트 루트 밖을 가리키는 경로, 중복 항목은 모두 거절됩니다.