runtime.pyodideBrowser Runtime observed

Pyodide / Web AI 실행 범위

브라우저의 pyproc machine에서 가능한 DartLab 실행 범위와 성능, 영속성, 격리 제한을 구분한다.

이 스킬

Pyodide / Web AI 실행 범위

브라우저의 pyproc machine에서 가능한 DartLab 실행 범위와 성능, 영속성, 격리 제한을 구분한다.

Runtime observed runtime.pyodideBrowser

절차

실행 순서

  1. 1

    skill search 결과의 `runtimeCompatibility.pyodide.status`를 먼저 확인한다.

  2. 2

    `supported`는 브라우저 내 파일 또는 자동 lazy 로드 데이터로 바로 실행할 수 있다.

  3. 3

    `limited`는 HF snapshot, 업로드 파일, prebuilt parquet 같은 제한 조건을 함께 표시한다.

  4. 4

    `unsupported`는 로컬 Python 또는 서버 ask 경로를 안내한다.

  5. 5

    브라우저에서 말하는 최신성은 live API가 아니라 사용한 snapshot의 asOf 기준으로만 표현한다.

  6. 6

    블로그의 `dartlab 이야기` Python 코드펜스는 페이지가 열리면 즉시 편집 가능한 셀로 보인다.

  7. 7

    페이지 진입만으로 Python, wheel, 데이터를 받지 않는다. 실행 버튼 클릭이나 명시적 hover 같은 사용자 의도 뒤에만 공용 worker를 준비한다.

  8. 8

    블로그 셀, 브라우저 노트북, 플레이그라운드는 한 `WorkerEngine`과 한 pyproc machine을 공유한다. 별도 main-thread Pyodide를 만들지 않는다.

  9. 9

    블로그 글을 전체 화면으로 투영한 `post:<slug>` 노트북은 기본 `sequential`, `autoRun: false`다. 일반 브라우저 노트북만 기본 reactive 자동 실행을 사용한다.

  10. 10

    블로그 셀에서 만든 Python 전역은 전체 화면 노트북의 첫 실행 전에 새 machine으로 격리한다. 저장된 옛 글 노트북의 reactive 중복 정의 오류는 로드 시 제거하되 코드와 정상 출력은 보존한다.

  11. 11

    Pyodide와 DartLab 버전 정본은 `landing/runtime-manifest.json`이다. pyproc은 `landing/package.json`의 npm exact dependency와 root `package-lock.json`을 쓰며, 브라우저 캐시 namespace에는 빌드 시 확인한 실제 설치 버전을 넣는다.

  12. 12

    Chromium Gate B에서 외부 Pyodide 배포판을 pyproc 기본 버전 대신 쓸 때는 같은 manifest의 `pyodideScriptIntegrity`로 브라우저 스크립트를 검증한다. pyproc에 다른 버전용 기본 SRI를 적용하지 않는다.

예시

이런 질문이 들어오면 이 skill 을 쓴다

  • 파이오디드에서 바로 가능한 분석 뭐가 있나

출력

기대 결과

  • runtime limits
  • available skill list

절차

  • skill search 결과의 runtimeCompatibility.pyodide.status를 먼저 확인한다.
  • supported는 브라우저 내 파일 또는 자동 lazy 로드 데이터로 바로 실행할 수 있다.
  • limited는 HF snapshot, 업로드 파일, prebuilt parquet 같은 제한 조건을 함께 표시한다.
  • unsupported는 로컬 Python 또는 서버 ask 경로를 안내한다.
  • 브라우저에서 말하는 최신성은 live API가 아니라 사용한 snapshot의 asOf 기준으로만 표현한다.

DartLab 웹 실행 계약

  • 블로그의 dartlab 이야기 Python 코드펜스는 페이지가 열리면 즉시 편집 가능한 셀로 보인다.
  • 페이지 진입만으로 Python, wheel, 데이터를 받지 않는다. 실행 버튼 클릭이나 명시적 hover 같은 사용자 의도 뒤에만 공용 worker를 준비한다.
  • 블로그 셀, 브라우저 노트북, 플레이그라운드는 한 WorkerEngine과 한 pyproc machine을 공유한다. 별도 main-thread Pyodide를 만들지 않는다.
  • 블로그 글을 전체 화면으로 투영한 post:<slug> 노트북은 기본 sequential, autoRun: false다. 일반 브라우저 노트북만 기본 reactive 자동 실행을 사용한다.
  • 블로그 셀에서 만든 Python 전역은 전체 화면 노트북의 첫 실행 전에 새 machine으로 격리한다. 저장된 옛 글 노트북의 reactive 중복 정의 오류는 로드 시 제거하되 코드와 정상 출력은 보존한다.
  • Pyodide와 DartLab 버전 정본은 landing/runtime-manifest.json이다. pyproc은 landing/package.json의 npm exact dependency와 root package-lock.json을 쓰며, 브라우저 캐시 namespace에는 빌드 시 확인한 실제 설치 버전을 넣는다.
  • Chromium Gate B에서 외부 Pyodide 배포판을 pyproc 기본 버전 대신 쓸 때는 같은 manifest의 pyodideScriptIntegrity로 브라우저 스크립트를 검증한다. pyproc에 다른 버전용 기본 SRI를 적용하지 않는다.
  • import dartlab을 실행하기 전에 lxml, numpy, polars, pyarrow를 Pyodide 배포판에서 명시적으로 적재하고 DartLab exact wheel을 설치한다. 지연 import만 믿지 않는다.
  • 기본 실행, 파일, 출력, 환경 진단은 pyproc machine 공개 계약을 쓴다. runtime.raw는 ASGI 안정화 폴백에만 허용한다.

capability 경계

기능현재 계약
기본 Python 셀모든 현대 브라우저에서 지원
soft interruptcrossOriginIsolatedSharedArrayBuffer가 있을 때만 지원
OPFS workspace지원 시 notebook별 mount, Web Lock 단독 writer
core와 wheel 캐시OPFS 지원 시 사용, 버전별 최근 2세대 유지, 사용량 90% 이상이면 우회
checkpointpyproc machine history의 휘발성 branching tree
durable historyworker deterministic replay loader 검증 전 비활성
process poolworker 자식 loader 검증 전 비활성
browser-as-serverpyproc ASGI가 기본, 손수 ASGI는 한 안정화 주기의 kill-switch

COOP/COEP가 없다는 이유로 기본 machine 부팅을 실패시키면 안 된다. 이 경우 interrupt=hard, processes=unavailable-worker-loader처럼 능력만 낮춰서 보고한다.

업그레이드 게이트

pyproc은 1.0 전까지 patch도 breaking으로 취급한다. Dependabot은 npm exact dependency와 lockfile을 같은 PR에서 갱신하며, 모든 후보는 다음을 통과하고 사람이 리뷰해야 한다.

  1. Node Gate A: root boot, exact DartLab 설치, transitive C 확장 import, machine FS, stdout, branching history, ASGI health.
  2. Chromium Gate B: 실제 COI와 JSPI 환경, root machine, exact DartLab, branching history, 2-lane process pool.
  3. landing check, 전체 unit test, production build.
  4. 일반 non-COI 블로그에서 초기 무실행, 첫 셀 실행, 편집 후 재실행 수동 smoke.
  5. 글 전체 화면 투영에서 초기 무실행, 순차 단일 셀 실행, reactive 전환, 옛 저장본 정규화 smoke.

예약 작업이 package.json의 버전 문자열을 직접 바꾸거나 후보 브랜치를 만들지 않는다. npm lockfile PR과 전용 호환성 워크플로를 사용하며 자동 병합은 금지한다.

런타임

실행 환경별 호환성

환경상태비고 / 제한
Local Python supported·
Server supported·
MCP supported·
Web AI supported·
Pyodide supported
  • live KRX/DART/OpenAI OAuth 호출은 브라우저에서 제한된다.
  • pyproc durable history와 process pool은 worker loader 계약이 검증될 때까지 비활성이다.
  • COOP/COEP가 없으면 기본 셀은 실행되지만 soft interrupt와 process 기능은 사용할 수 없다.

실패 회피

흔한 실패 · 절대 금지

흔한 실패
  • 서버 전용 skill을 브라우저에서 가능하다고 말함
  • Pyodide가 지연 import의 C 확장 의존성을 자동 발견한다고 가정함
  • SharedArrayBuffer가 없는 일반 페이지에서 기본 machine 부팅까지 막음
  • pyproc 0.x patch를 하위 호환으로 간주하고 게이트 없이 올림
절대 금지
  • Pyodide 가능 여부 허위 단정
  • 블로그를 열기만 했는데 Python 또는 데이터 다운로드 시작
  • durable history와 process 기능을 기능 확인 없이 노출