Skip to main content

SDK scopes

Scopes define which SDK operations your app is allowed to call. metadata.scopes is mandatory in manifest.json.

Declare scopes in manifest.json under metadata.scopes. This is a partial snippet showing only the relevant part (not a full manifest):

{
"metadata": {
"name": "My App",
"scopes": ["design:state:read", "design:state:write"]
}
}

For a complete manifest.json example, see App manifest.

Supported scopes

These are the currently supported scopes:

  • design:state:read: read design and editor state via SDK APIs.
  • design:state:write: update design state (for example add, remove, and update objects).
  • uploads:create: upload files with kittl.upload.image.upload({ blob }); apps can then use their own uploaded files.
  • uploads:global:read: allows an app to read all uploads available in the current workspace (not limited to the current user's uploads).
  • ai:credit:spend: spend AI credits via kittl.ai.spendCredits.
  • fonts:create: upload custom fonts via kittl.font.createFont.
  • workspace:state:read: reserved for workspace state reads.
  • workspace:state:write: reserved for workspace state writes.

Scope to SDK API mapping

The table below shows the exact scope required for each SDK method. Methods not listed here (e.g. kittl.context.get) are exempt and always allowed.

design:state:read

MethodDescription
kittl.design.canvas.getPreviewImageGet a board preview image
kittl.design.canvas.getScreenshotCapture canvas screenshot
kittl.design.canvas.getExportExport to blob
kittl.design.object.getObjectGet object by ID
kittl.design.object.getAllByFilterQuery objects by predicate
kittl.state.viewport.getGet viewport state
kittl.state.viewport.setsee design:state:write
kittl.state.getSelectedObjectsIdsGet selected object IDs
kittl.state.getSelectedLayersIdsGet selected layer IDs
kittl.state.getSelectedArtboardIdsGet selected artboard IDs
kittl.state.getCanvasModeGet canvas mode
kittl.state.getActiveToolGet active tool
kittl.state.getHighlightedObjectIdGet highlighted object ID

design:state:write

MethodDescription
kittl.design.board.createStandardBoardCreate artboard
kittl.design.board.cloneArtboardClone artboard
kittl.design.board.updateArtboardUpdate artboard
kittl.design.text.addTextAdd text
kittl.design.text.updateTextUpdate text
kittl.design.text.updateRenderPluginUpdate text render plugin
kittl.design.text.updateDecorationPluginUpdate text decoration plugin
kittl.design.shape.createPredefinedShapeCreate predefined shape
kittl.design.shape.createBasicShapeCreate basic shape from SVG
kittl.design.shape.updateShapeUpdate shape
kittl.design.shape.convertShapeToMaskConvert shape to mask
kittl.design.image.addImageAdd image
kittl.design.image.updateImageUpdate image
kittl.design.video.addVideoAdd video
kittl.design.video.updateVideoUpdate video
kittl.design.video.updatePlaylistItemUpdate video playlist item
kittl.design.video.removePlaylistItemRemove video playlist item
kittl.design.object.removeObjectRemove object
kittl.design.object.setLockedStateLock/unlock object
kittl.design.object.setHiddenStateShow/hide object
kittl.design.object.rotateObjectRotate object
kittl.design.object.renameRename object
kittl.design.config.setConfigUpdate design config
kittl.design.loadingCard.createLoadingCardCreate loading card
kittl.design.loadingCard.updateLoadingCardUpdate loading card
kittl.design.mockupboard.addMockupBoardAdd mockup board
kittl.design.mockupboard.addMockupDesignObjectAdd mockup design object
kittl.design.mockupboard.updateMockupBoardUpdate mockup board
kittl.state.setSelectedObjectsIdsSet selected objects
kittl.state.setSelectedLayersIdsSet selected layers
kittl.state.setSelectedArtboardIdsSet selected artboards
kittl.state.setCanvasModeSet canvas mode
kittl.state.setActiveToolSet active tool
kittl.state.setHighlightedObjectIdSet highlighted object
kittl.state.setManyBatch-update state fields
kittl.state.viewport.setSet viewport state

Other scopes

ScopeMethod
ai:credit:spendkittl.ai.spendCredits
ai:credit:spendkittl.ai.startGeneration
ai:credit:spendkittl.ai.registerHandler
fonts:createkittl.font.createFont
uploads:createkittl.upload.image.upload({ blob })

Exempt methods

These methods are always allowed regardless of declared scopes:

  • kittl.context.get — host context (drag-and-drop offset)
  • kittl.dragAndDrop.startDragImageEvent / dropImage — client-side drag-and-drop helpers
  • kittl.stateless.send / subscribe / unsubscribe — inter-extension messaging
  • kittl.onReady — SDK readiness callback

Choosing scopes

If your app both reads and mutates design/editor state, declare both:

{
"metadata": {
"scopes": ["design:state:read", "design:state:write"]
}
}

If you upload images, include uploads:create:

{
"metadata": {
"scopes": [
"design:state:read",
"design:state:write",
"uploads:create"
]
}
}

Error behavior

If your app calls a method without required scope, the call fails with an SDK error result (isOk: false) and a permission-denied style message.

To avoid runtime failures, request the smallest scope set that still covers all methods your app calls.