샌드박스 플러그인이 작동하면 다른 사이트에서 설치할 수 있도록 게시하세요. 게시는 샌드박스 전용입니다 — 네이티브 플러그인은 npm을 통해 배포됩니다.
게시하면 CLI가 자신의 Atmosphere 계정에 릴리스를 기록합니다. tarball은 직접 호스팅합니다 — GitHub 릴리스 에셋, R2, S3 또는 공개 URL로 — 레지스트리는 이에 대한 링크를 저장합니다.
사전 요구 사항
slug,publisher,license, 작성자(author또는authors) 및 보안 연락처(security또는securityContacts)가 포함된 유효한emdash-plugin.jsonc.emdash-plugin validate를 실행하여 확인하세요.version(package.json또는 레지스트리 전용 플러그인의 경우 manifest에 있음).- 게시할 Atmosphere 계정.
Atmosphere 계정
**Atmosphere 계정**으로 게시합니다: Bluesky 및 AT 프로토콜 네트워크의 다른 앱에서 사용되는 휴대용 사용자 소유 ID입니다. 하나의 계정이 네트워크 전체에서 단일 로그인이며, 어디에서나 동일한 @handle을 가지며, ID와 데이터는 특정 앱에 연결되지 않습니다. EmDash는 이 계정을 게시자 ID로 사용합니다: 게시하는 모든 릴리스는 자신의 계정에 있는 레코드이며, 귀하로 서명됩니다.
EmDash는 사이트의 Atmosphere 로그인과 동일한 Atmosphere 계정을 사용합니다.
기존 계정 사용
이미 Bluesky 계정 또는 다른 Atmosphere 계정이 있는 경우 해당 핸들로 로그인하세요:
emdash-plugin login alice.bsky.social
이렇게 하면 계정 제공자의 로그인 페이지가 브라우저에서 열립니다. EmDash는 비밀번호를 절대 볼 수 없습니다. emdash-plugin whoami는 저장된 세션을 나열합니다; emdash-plugin switch <did>는 활성 세션을 변경합니다.
계정 가입
아직 Atmosphere 계정이 없는 경우 제공자를 통해 생성한 다음 emdash-plugin login <your-handle>을 실행하세요. 옵션:
- Bluesky와 같은 앱. Bluesky에 가입하면 Bluesky가 호스팅하는 Atmosphere 계정이 생성됩니다. 이것이 가장 빠른 경로입니다.
- 독립 제공자. 커뮤니티 운영 또는 개인 정보 보호 중심 계정 호스트. atmosphereaccount.com에서 옵션을 찾아보세요.
- 셀프 호스팅. ID와 데이터를 완전히 제어하기 위해 자체 제공자를 실행합니다.
어떤 것을 선택하든 해당 계정의 @handle이 emdash-plugin login에 전달하는 것이며, 계정의 DID가 manifest에서 publisher로 고정하는 것입니다.
세 단계
다음 명령은 로그인하고, tarball을 빌드하고, 호스팅된 tarball을 가리키는 릴리스를 게시합니다:
emdash-plugin login # 아직 로그인하지 않은 경우
emdash-plugin bundle # dist/<slug>-<version>.tar.gz 생성
# 해당 tarball을 공개 URL에 업로드한 다음:
emdash-plugin publish --url https://your-host/<slug>-<version>.tar.gz
bundle은 완료되면 --url 호출을 포함한 다음 두 단계를 출력하므로 형식을 기억할 필요가 없습니다.
Bundle
bundle은 build를 실행하고, 유효성을 검사하고, 에셋을 수집하고, tarball을 생성합니다. tarball 내에서 plugin.mjs는 backend.js(레지스트리가 기대하는 파일 이름)로 패킹됩니다.
명령은 다음 플래그를 허용합니다:
emdash-plugin bundle [--dir <path>] [--out-dir|-o <path>] [--validate-only]
| 플래그 | 기본값 | 설명 |
|---|---|---|
--dir | 현재 디렉토리 | 플러그인 소스 디렉토리. |
--out-dir, -o | dist | tarball의 출력 디렉토리. |
--validate-only | false | tarball을 건너뛰지만 dist/ 아티팩트는 생성합니다. |
Tarball 내용
| 파일 | 필수 | 설명 |
|---|---|---|
manifest.json | 예 | 생성된 manifest: id, version, capabilities, hosts 및 소스에서 읽은 훅과 경로. 수동으로 유지 관리하지 않습니다. |
backend.js | 예 | 빌드된 독립형 런타임 파일(dist/plugin.mjs). |
README.md | 아니요 | 플러그인 문서. |
icon.png | 아니요 | 256×256 PNG. |
screenshots/ | 아니요 | 최대 5개, 최대 1920×1080. |
유효성 검사
bundle(및 --validate-only)은 다음을 확인합니다:
- 크기 제한(RFC 0001, 압축 해제됨): 총 ≤256 KB, 파일당 ≤128 KB, ≤20개 파일. gzip 압축된 tarball은 그 일부입니다.
backend.js에 Node 내장 모듈 없음 — 샌드박스 코드는fs,path,child_process등을 가져올 수 없습니다. Web API를 사용하거나 해당 로직을 네이티브 플러그인으로 이동하세요.- Capability 건전성 — 이름은 인식된 세트에 있어야 합니다.
- 신뢰 계약 일관성 — manifest의
network:request/allowedHosts교차 규칙. - 에셋 제한 — 아이콘 256×256, ≤5개 스크린샷 ≤1920×1080.
게시하기 전에 tarball을 검사하려면 내용을 나열하세요:
emdash-plugin bundle
tar tzf dist/my-plugin-1.1.0.tar.gz
Publish
게시는 릴리스 레코드를 작성합니다. tarball은 이미 공개 URL에 호스팅되어 있어야 합니다:
emdash-plugin publish --url <hosted-tarball-url>
--url은 필수입니다: 플러그인의 바이트가 있는 위치이며 레지스트리 레코드가 이를 가리킵니다. 레코드를 작성하기 전에 호스팅된 URL이 빌드한 정확한 바이트를 제공하는지 확인하려면 --local을 전달하세요:
emdash-plugin publish --url https://your-host/foo-1.0.0.tar.gz --local dist/foo-1.0.0.tar.gz
publish가 수행하는 작업:
--url에서 tarball을 가져오고(URL 및 크기 가드 포함) 해당 바이트에서 manifest를 추출합니다.- Atmosphere 계정 세션을 재개하고 게시자 고정을 확인합니다 — 활성 세션은 manifest의 고정된
publisher와 일치해야 하며, 그렇지 않으면MANIFEST_PUBLISHER_MISMATCH로 거부됩니다. - 첫 번째 게시 시 manifest에서 패키지 프로필을 생성합니다(
license, 작성자, 보안 연락처). 이후 게시에서는 기존 프로필이 우선합니다. - 프로필 및 릴리스 레코드를 계정에 게시합니다.
첫 번째 게시 시 manifest 대신 플래그(--license, --security-email, …)로 프로필 필드를 제공할 수 있습니다; 명시적 플래그는 manifest 값을 재정의하며, 이는 CI에서 유용합니다. --no-manifest는 manifest를 완전히 선택 해제합니다.
버전은 불변입니다
게시된 버전은 덮어쓰거나 다시 게시할 수 없습니다. 다시 게시하기 전에 version을 증가시키세요. 빌드는 package.json에서 version을 읽습니다(manifest 참조 참조). 확장된 신뢰 계약의 경우 major를, 새로운 훅 또는 경로의 경우 minor를, 수정의 경우 patch를 증가시키세요.
게시자 불일치
publish가 MANIFEST_PUBLISHER_MISMATCH로 실패하면 활성 세션은 manifest의 고정된 publisher와 다른 Atmosphere 계정입니다. emdash-plugin switch <did>로 고정된 계정으로 전환하거나, 플러그인을 새 계정으로 정말 이전하는 경우 manifest의 publisher를 업데이트하세요. 세션 관리는 기존 계정 사용을 참조하세요.
다음으로 읽을 내용
emdash-pluginCLI — 모든 명령- manifest — 필드, 신뢰 계약, 게시자 고정
- Capabilities 및 보안