Skip to main content

ARC 2.0.0-beta.28

Manifest and capabilities

Declare a Blocklet with blocklet.yaml fields the current parser and checker accept — not wishlists.

blocklet.yaml is the declared boundary of a Blocklet package. Authority for field acceptance is the current parser (packages/core/src/blocklet/parse-manifest.ts / BlockletManifest in types.ts) and the CLI checker — not historical product docs.

Verified baseline: arc 2.0.0-beta.28.

Minimum package (scaffold)

arc blocklet create ./demo-basic --recipe basic --name demo-basic writes:

yaml
specVersion: 2
id: demo-basic
name: demo-basic
did: did:blocklet:demo-basic
version: 0.1.0
description: ""

That is enough for arc blocklet check (profile basic) and arc blocklet build.

Identity fields

FieldTypeNotes
specVersionnumber2 for packaging-oriented manifests
idstringStable package id (scaffold uses kebab name)
namestringHuman-readable display name (not forced to kebab)
didstringdid:blocklet:<id> from scaffold
versionstringSemVer string, e.g. 0.1.0
descriptionstringOne-line purpose

FieldTypeNotes
logostringRelative path or URL (SVG preferred)
keywordsstring[]Discovery
tagsstring[]UI categories
author{ name, email?, url? }Primary author
contributors / maintainersauthor[]Optional
copyright{ owner?, year? }Optional
licensestringSPDX / UNLICENSED / etc.
homepage, documentation, community, supportstringURLs or support contact
repositorystring or { type, url, directory? }Source pointer
screenshotsstring[]Paths or URLs
hiddenbooleantrue hides from catalogue UIs; still activatable via ?blocklet=

Runtime declaration fields

These are not cosmetic metadata. Only use what the package needs.

FieldMeaning
scopeapp (default), user, root, or agent — AFS namespace visibility
mountsProvider mount declarations (uri or module + target + required, optional ops, aup, seed, …)
systemSystem service dependencies (e.g. users)
sitesNamed sites: name, domains, optional port, bindings
surfacesExternally accessible paths
instance{ required?, mount?, seed? } — whether a real /instance DID Space is required
cronDeclarative scheduled tasks registered on activation
replicatedReplicated collection contracts (incompatible with scope: root)
networkReadAllow network-origin reads of selected /instance/** base paths
redistributableRedistribution terms for selected /instance/** subtrees
indexIndex domain declarations for search
blockletsSub-blocklet composition list
ioIO surface / binding declarations
arc / enginesCompatibility ranges
entrypointScript path (specVersion 1 style; optional in v2)
saveBookmark + selection-note capability. Omit = on, floating chrome. false / { enabled: false } opts out. chrome: buttons binds [data-arc-save]. Hidden until login. See Bookmark and note.

Mount entry shape (code-backed)

yaml
mounts:
  - uri: "ash://"          # or module: "./providers/…"
    target: /ash           # absolute AFS path
    required: true
    ops: [list, read]      # optional whitelist

uri and module are mutually exclusive. See MountDeclaration in core types for aup, seed, shared, options.

Sites and bindings (example pattern)

Production packages such as Discuss Kit declare domains and URL→AFS→page bindings under sites. Use bindings when pretty URLs map onto instance content. Route files under .route/ remain the handler-level declaration for web vs app entry.

Scope reminder

ScopeTypical use
appDefault application package; supports replicated collections
userCaller-scoped overlays (e.g. personal storage UIs)
rootFull host AFS visibility — not combined with replicated
agentAgent-oriented packaging

Capabilities implied by recipes

Recipes report capabilities when listed:

bash
arc blocklet recipe explain minimal-app

Recipe capability labelTypical files
manifestblocklet.yaml only
webpages/, .web/
aup.aup/
agentagents/
settingsseed/settings/…

Profile checks for complete apps (minimal-app, agent-workspace, support-community) enforce the recipe contract, not only the presence of blocklet.yaml.

Checker profiles

bash
arc blocklet check . --profile basic
arc blocklet check . --profile minimal-app

ProfileExpectation (summary)
basicValid package directory / minimal contract
minimal-appAUP pages, web section, agent, settings counts per recipe
agent-workspaceWorkspace-oriented complete app contract
support-communitySupport-community complete app contract

What not to invent

  • Do not document fields that exist only in planning docs or unmerged designs.
  • Do not claim store marketplace publication from metadata alone.
  • Do not treat hidden: true as a security boundary — it only affects catalogue visibility.

Full CLI surface: arc blocklet. Data path details: Data and AFS.