App manifest
Each Miro app must include an app manifest file. The app manifest is a YAML file with essential metadata information about the app.
For example, it defines the app name, the Web SDK version it uses, the resources it can access, the actions it can perform, as well as OAuth details such as the redirect URI used in the OAuth code grant flow.
This reference describes the properties in the current app manifest.
appName
appName
string
- required
Defines the name of the app.
When the app is published, the app name may be displayed on the Miro UI, the Miro Marketplace, as well as in app management flows, based on the app configuration.
sdkVersion
sdkVersion
string
- required
Selects the Web SDK version that the app should use.
- After selecting the Web SDK 2.0, it's not possible to undo the action.
- The Miro Web SDK 1.0 is deprecated, and it's flagged for retirement in the near future.
sdkUri
sdkUri
string
The URL of the server hosting your app.
Required only for apps that use the Web SDK.
To enable rendering the app on a board, specify the URL pointing to your app on the server that hosts it.
The protocol must be HTTPS.
Public vs private app URL
- If you're developing locally, you can use
localhost
and HTTP.
Example:http://localhost:3000/
- If you set a URL that is part of a LAN or a VPN, the app is available to all users who can access the LAN or VPN.
In this case:
- The app isn't publicly available through the internet.
- It's not possible to register Miro webhooks with a non public URL.
- If you set a URL that is publicly accessible on the internet, the app is available to any users who can access the URL.
In this case:
- The app is publicly available through the internet.
- It is possible to register Miro webhooks with a public URL.
scopes
scopes
- list of strings
- required
The Miro REST API and the Web SDK implement user access control through scopes. Scopes define the permissions your app requires to interact with a board and to work as designed.
When users install your app, they are prompted to provide consent for the required scopes.
Allowed scopes:
boards:read
boards:write
identity:read
identity:write
team:read
team:write
microphone:listen
webcam:record
screen:record
auditlogs:read
(Enterprise plan only)organizations:read
(Enterprise plan only)organizations:teams:read
(Enterprise plan only)organizations:teams:write
(Enterprise plan only)
boardPicker.allowedDomains
boardPicker.allowedDomains
- list of strings
- required
BoardsPicker enables users to select a board to embed, and to set its access settings.
BoardsPicker only runs on domains that are on the allowedDomains
list. If you're developing locally, use localhost
as a domain.
The allowedDomains
list must contain only the domain where BoardsPicker is allowed to run. It cannot contain the transport protocol (http://
, https://
).
redirectUris
redirectUris
- list of strings
Required only for apps that use the REST API.
If you want to authorize your app users with OAuth2.0, you need to connect your server with the Miro REST API.
Provide a redirect URI pointing to the page that you intend to load after a successful user authorization.
redirectUriForSdk
redirectUriForSdk
string
Redirect URI used during Web SDK authorization.
If you specify a redirect URI here, the Web SDK authorization process also starts the OAuth 2.0 code grant flow for the REST API.
icons.outline
icons.outline
string
The <svg .../>
contents of your app's monochrome icon.
The shape of the icon image must be square.
Monochrome icons cannot include more than 1 color.
The monochrome outline icon is visible on the app toolbar, after installing the app.
To split the icon into multiple lines in the YAML file, you can use block scalars (>-
).
icons.colored
icons.colored
string
The <svg .../>
contents of your app's full-color icon.
The shape of the icon image must be square.
If you publish your app, the full-color icon is visible on the app toolbar panel and on the Miro Marketplace.
To split the icon into multiple lines in the YAML file, you can use block scalars (>-
).
Example app manifest file
appName: My application
sdkVersion: SDK_V2
sdkUri: https://my.webapp.com/sdk.html
boardPicker:
allowedDomains:
- my.webapp.com
- localhost
redirectUris:
- http://localhost:3000/auth/redirect
- https://my.webapp.com/auth/redirect
redirectUriForSdk: https://my.webapp.com/auth/redirect
scopes:
- boards:read
- boards:write
icons:
colored: >-
<svg viewBox="0 0 24 24" height="48" width="48"
xmlns="http://www.w3.org/2000/svg" class="outline-icon--app"
fill="currentColor"><path d="M18.071 10.172 20.9 7.343a1 1 0 0 1 1.415
1.414l-2.829 2.829 2.122 2.121-4.243 4.243a6 6 0 0 1-8.485
0l-.707-.707-4.243 4.242a1 1 0 1 1-1.414-1.414l4.242-4.243-.707-.707a6 6 0 0
1 0-8.485l4.243-4.243 2.121 2.122 2.829-2.829a1 1 0 1 1 1.414 1.415l-2.829
2.828 4.243 4.243zm-7.778-4.95L7.464 8.05a4 4 0 0 0 0 5.657l2.829 2.829a4 4
0 0 0 5.657 0l2.828-2.829-8.485-8.485z"/></svg>
outline: >-
<svg viewBox="0 0 24 24" height="48" width="48"
xmlns="http://www.w3.org/2000/svg" class="outline-icon--app"
fill="currentColor"><path d="M18.071 10.172 20.9 7.343a1 1 0 0 1 1.415
1.414l-2.829 2.829 2.122 2.121-4.243 4.243a6 6 0 0 1-8.485
0l-.707-.707-4.243 4.242a1 1 0 1 1-1.414-1.414l4.242-4.243-.707-.707a6 6 0 0
1 0-8.485l4.243-4.243 2.121 2.122 2.829-2.829a1 1 0 1 1 1.414 1.415l-2.829
2.828 4.243 4.243zm-7.778-4.95L7.464 8.05a4 4 0 0 0 0 5.657l2.829 2.829a4 4
0 0 0 5.657 0l2.828-2.829-8.485-8.485z"/></svg>