Skip to content

qweeze/miro-command-palette

Repository files navigation

Command palette

A plugin for Miro collaborative board that empowers users to extend built-in features and automate routine tasks by creating their own custom scripts

Usage

  • Install plugin
  • Fire up command palette by clicking its icon on board's bottom toolbar
  • Enter new command to open command editor
  • To edit, view and delete your commands use manage command

Examples

Rationale and motivation

The idea of the plugin was inspired by Sublime's command palette tool which was also adopted by other modern IDE's and text editors (e.g. VSCode, IDEA).

A significant amount of Miro customers are software development teams meaning there's a significant amount of programmers among Miro users. Having that in mind, this plugin aims to enhance developers' experience and to lower the barrier of entry into using Miro's SDK by introducing a developer-friendly tooling for scripting. The idea is that a simpler approach to using SDK features will encourage more users to take advantage of scripting for their own needs.

The core feature is a fast and easy way to extend built-in functionality as well as automate time-consuming tasks with ad-hoc scripts without having to create a full-fledged plugin, implement authorization, set up hosting, configure SSL, etc. One can think of this as somewhat similar to the capabilities that VBA scripting brings to MS Excel or Photoshop.

Moreover, performing complex and/or repetitive actions with keyboard commands instead of navigating sophisticated UI might be a more convenient and familiar way to do things for certain categories of users.

Features and improvements ideas

  • More granular scoping of commands: i.e. introduce user, board, team and global scopes. That will allow to create commands for private usage only, board-specific commands, cross-board commands, and publicly accessible commands respectively.
  • Fuzzy and smart text autocompletion with better UI, possibly based on a predictive semantic model trained on board's text content.
  • User-defined keyboard shortucts (currenly not supported by the API)
  • Client-side commands and widget data encryption to eliminate the possibility of users' data leakage even in case the backend is compromised. That could be especially useful for companies whose security policy prohibits sending sensitive data to external services. Another possible solution may be to host the plugin in-house storing private data on internal servers and to have a script/command that binds that data to widgets.
  • Support attaching commands to event handlers to take advantage of event-driven macros, e.g. subscribe to specific widgets' updates and receive Slack notifications when they occur (doesn't seem doable at the moment without ugly hacks due to iframes and Window.postMessage() limitations).
  • Support other programming languages for scripting (requires to implement API wrappers for those languages)

Running locally

docker build -t miro-command-palette .
docker run \
    -e APP_SECRET=<app-secret> \
    -e REDIRECT_URI=<redirect-uri> \
    -p 8000:8000 \
    miro-command-palette