Skip to main content

Importing and exporting private plugins

You worked hard developing your plugin - now share it!

Written by Ryan Kulp

There's a rich ecosystem of user-developed plugins outside of our official integrations, and it's very simple to share and utilize these handcrafted private plugins.

We've developed a standard ZIP file format that plugin developers (dare we say, artisans) can follow. It conveniently combines plugin settings, custom fields, and markup into one archive.

Exporting a private plugin

Exporting is as simple as clicking Export on the settings page for the specific plugin. A ZIP file will be downloaded with the entire contents of your plugin, including its settings, custom fields, and markup.

Importing a private plugin

On the Private Plugin settings page, simply click Import new and select the ZIP file to import. A new plugin will automatically be created and added to your playlist.

Plugin ZIP file contents

The ZIP archive of a private plugin is a flat list of files (no subdirectories). An export contains only the files your plugin uses, for example:

settings.yml
full.liquid
half_horizontal.liquid
half_vertical.liquid
quadrant.liquid
shared.liquid
transform.js # or .py, .rb, .php

settings.yml is required.

The .liquid files correspond to the individual Liquid HTML templates for each viewport, and shared.liquid holds code they all share. The maximum size of each file is 100 KB.

settings.yml

See this article for details on configuring custom_fields.

---
# required:
name: My Awesome Plugin
strategy: polling # polling | webhook | static | async_polling | plugin_merge | none
refresh_interval: 60 # minutes; 15 | 30 | 60 | 120 | 240 | 360 | 480 | 720 | 1440

# polling strategy only:
polling_url: https://example.com
polling_headers: ''
polling_verb: GET # GET | POST

# static strategy only:
static_data: '{"foo": "bar"}' # JSON string

# generic options:
no_screen_padding: 'no' # 'no' | 'yes' (quotes are necessary!)
dark_mode: 'no' # 'no' | 'yes' (quotes are necessary!)

# custom plugin form fields (optional, see docs):
custom_fields:
- keyname: units
name: Units
field_type: select
options:
- Metric
- Imperial

Related

Did this answer your question?