{
  "schema": "tesign-radar/item/1",
  "generated_at": "2026-09-17T01:56:13.055Z",
  "lang": "ko",
  "slug": "kage",
  "url": "https://tesign.com/item/kage/",
  "alternates": {
    "ko": {
      "html": "https://tesign.com/item/kage/",
      "json": "https://tesign.com/item/kage/index.json",
      "markdown": "https://tesign.com/item/kage/index.md"
    },
    "en": {
      "html": "https://tesign.com/en/item/kage/",
      "json": "https://tesign.com/en/item/kage/index.json",
      "markdown": "https://tesign.com/en/item/kage/index.md"
    }
  },
  "name": "kage",
  "use_label": "웹사이트 오프라인 보관 사본",
  "one_liner": "웹사이트를 헤드리스 크롬으로 렌더링한 뒤 스크립트를 전부 뺀 오프라인 사본으로 저장하는 CLI",
  "text": {
    "why": "'다른 이름으로 저장'한 페이지는 몇 달 뒤 빈 화면이나 멈춘 스피너로 열리기 쉽습니다. kage는 각 페이지를 실제 헤드리스 크롬에서 열어 안정될 때까지 기다린 뒤 DOM을 스냅샷하고, 자바스크립트를 모두 지우고 CSS·이미지·폰트를 로컬 경로로 내려받습니다. `kage pack`으로 Kiwix가 쓰는 ZIM 파일 하나 또는 사이트를 스스로 서비스하는 실행 파일 하나(약 13 MiB + 사이트)로 묶을 수 있습니다.",
    "take": "실제 브라우저가 본 결과를 코드 없이 남긴다는 한 가지 일을, 표준 포맷(ZIM)으로 끝맺는 점이 좋습니다.",
    "build": [
      "사내 문서 사이트를 `--refresh`로 주기적으로 다시 렌더링해 스크립트 없는 정적 사본으로 보관하는 작업이나, 크로미움이 포함된 컨테이너 이미지로 서버에서 돌리는 아카이빙 작업을 만들 수 있습니다. 순수 Go ZIM 읽기/쓰기 패키지(zim/)는 따로 가져다 쓸 수 있습니다."
    ],
    "who": [
      {
        "role": "글 모음을 오래 보관하려는 독자",
        "situation": "에세이 사이트 전체를 오프라인 폴더나 ZIM 한 파일로"
      },
      {
        "role": "문서 담당자",
        "situation": "문서 사이트를 스크립트 없는 사본으로 배포"
      },
      {
        "role": "Go 개발자",
        "situation": "순수 Go ZIM 패키지와 헤드리스 크롬 제어 코드 재사용"
      }
    ],
    "start": [
      {
        "command": false,
        "text": "brew install --cask tamnd/tap/kage   # Windows: scoop bucket add tamnd https://github.com/tamnd/scoop-bucket && scoop install kage / Go: go install github.com/tamnd/kage/cmd/kage@latest"
      },
      {
        "command": false,
        "text": "kage clone paulgraham.com"
      },
      {
        "command": false,
        "text": "kage serve $HOME/data/kage/paulgraham.com"
      },
      {
        "command": false,
        "text": "# open http://127.0.0.1:8800"
      },
      {
        "command": false,
        "text": "kage pack paulgraham.com               # -> paulgraham.com.zim"
      }
    ],
    "caveat": [
      "라이선스 MIT. 호스트에 Chrome/Chromium이 필요(컨테이너 이미지는 크로미움 포함). 기본은 robots.txt를 따름.",
      "ZIM 출력은 Kiwix 자체 팩의 전문 검색 인덱스를 만들지 않아 리더 안 검색이 제한됨. 실행 파일 묶음은 사이트 크기와 무관하게 약 13 MiB가 추가됨. 네이티브 창 뷰어는 cgo 빌드 옵션.",
      "무료. 최신 릴리스 v0.3.12(2026-09-15 확인), 0.x 단계."
    ]
  },
  "cta": {
    "type": "install",
    "label": "INSTALL",
    "url": "https://kage.tamnd.com/"
  },
  "ready": "install",
  "categories": [
    "dev-tools"
  ],
  "categories_confirmed": true,
  "tags": [
    "web-archiving",
    "offline",
    "headless-chrome",
    "cli",
    "go",
    "zim"
  ],
  "platform": [
    "cli",
    "macos",
    "windows",
    "linux"
  ],
  "license": {
    "spdx": "MIT",
    "scope": "permissive",
    "scope_text": "상업 이용·수정·재배포 가능. 저작권 고지는 유지.",
    "url": "https://spdx.org/licenses/MIT.html",
    "note": null,
    "open_source": true
  },
  "language": "Go",
  "source_urls": {
    "canonical": "https://kage.tamnd.com/",
    "github": "https://github.com/tamnd/kage",
    "huggingface": null,
    "app_store": null,
    "sightings": [
      {
        "source": "showhn",
        "url": "https://github.com/tamnd/kage",
        "posted_at": "2026-06-14T17:25:38.000Z",
        "hn_url": "https://news.ycombinator.com/item?id=48529990"
      },
      {
        "source": "github",
        "url": "https://github.com/tamnd/kage",
        "posted_at": "2026-06-14T18:00:00.000Z",
        "hn_url": null
      }
    ]
  },
  "numbers": {
    "as_of": "2026-09-16T21:00:00.000Z",
    "stars": 3399,
    "stars_unit": "GitHub stars",
    "stars_checked_at": "2026-09-15T19:34:34.150Z",
    "stars_observed_since_check": 0,
    "star_delta_24h": null,
    "star_delta_7d": null,
    "star_delta_30d": null,
    "star_delta_unit": "GitHub stars gained in the window, GH Archive events summed to as_of",
    "spark_14d": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ],
    "hf_likes": null,
    "hf_likes_observed_at": null,
    "hn_points": 712,
    "hn_points_observed_at": "2026-09-13T16:05:53.714Z",
    "store": null,
    "method": "별 총합 = GitHub에서 마지막으로 확인한 값(stars_checked_at) + 그 뒤 GH Archive에서 관측한 증가. 24h·7d·30d 증가는 GH Archive 시간별 이벤트를 기준 시각(as_of)까지 합한 값. 우리 점수는 없습니다."
  },
  "ranks": null,
  "activity": {
    "pushed_at": "2026-08-10T11:59:54.000Z",
    "owner_type": "User",
    "open_issues": 9,
    "contributors": 7,
    "releases_count": 18,
    "latest_release": {
      "tag": "v0.3.12",
      "published_at": "2026-08-10T07:20:08.000Z",
      "prerelease": false
    },
    "checked_at": "2026-09-15T19:34:34.150Z",
    "core_checked_at": "2026-09-15T19:34:34.150Z"
  },
  "signals": [
    {
      "kind": "cross",
      "label": "교차 신호",
      "value": "Show HN + GitHub"
    },
    {
      "kind": "back",
      "label": "과거 기록",
      "value": null
    }
  ],
  "images": {
    "og": "https://tesign.com/img/kage-f2e1003e91.png",
    "cover": "https://tesign.com/img/kage-f2e1003e91.png",
    "cover_width": 2000,
    "cover_height": 1496,
    "gallery": [
      "https://tesign.com/img/kage-f2e1003e91.png",
      "https://tesign.com/img/kage-ba556a1821.png",
      "https://tesign.com/img/kage-ebdbb0ec2d.png"
    ],
    "alt": "터미널 데모: paulgraham.com을 clone하고 한 파일로 pack한 뒤 오프라인으로 serve하는 과정",
    "tier": 2
  },
  "dates": {
    "first_seen_at": "2026-09-13T08:18:08.225Z",
    "source_created_at": "2026-06-14T11:21:55.000Z",
    "discovery_hours": 2180.9370069444444,
    "launch_signal_at": "2026-06-14T17:25:38.000Z",
    "kept_at": "2026-09-14T19:27:43.437Z",
    "first_published_at": "2026-09-14T19:27:43.735Z",
    "updated_at": "2026-09-15T04:36:56.895Z",
    "ingestion_mode": "backfill"
  },
  "notes": [
    "이 파일은 tesign.com 항목 페이지와 같은 빌드에서 같은 데이터로 만들어졌습니다. 소개 글은 편집자가 쓴 것이고, 숫자는 저장된 관측값입니다.",
    "JSON의 null은 관측하지 않았다는 뜻입니다 — 0이 아닙니다. 마크다운에서는 [확인 필요]로 적습니다.",
    "별 총합 = GitHub에서 마지막으로 확인한 값(stars_checked_at) + 그 뒤 GH Archive에서 관측한 증가. 24h·7d·30d 증가는 GH Archive 시간별 이벤트를 기준 시각(as_of)까지 합한 값. 우리 점수는 없습니다.",
    "과거 데이터를 되짚어 채운 항목입니다. 라이브 발견이 아닙니다.",
    "요약이며 법적 조언이 아닙니다."
  ]
}
