2026-02-13 14:04:06 -07:00
<!doctype html>
< html lang = "en" class = "no-js" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width,initial-scale=1" >
< link rel = "next" href = "Docs/Address/" >
< link rel = "icon" href = "assets/external/postalpoint.app/images/favicon-voxel.png" >
< meta name = "generator" content = "mkdocs-1.6.1, mkdocs-material-9.7.1" >
< title > PostalPoint Plugin Development< / title >
< link rel = "stylesheet" href = "assets/stylesheets/main.484c7ddc.min.css" >
< link rel = "stylesheet" href = "assets/stylesheets/palette.ab4e12ef.min.css" >
< link rel = "stylesheet" href = "assets/external/fonts.googleapis.com/css.49ea35f2.css" >
< style > : root { --md-text-font : "Roboto" ; --md-code-font : "Roboto Mono" } < / style >
< link rel = "stylesheet" href = "assets/styles.css" >
< script > _ _md _scope = new URL ( "." , location ) , _ _md _hash = e => [ ... e ] . reduce ( ( ( e , _ ) => ( e << 5 ) - e + _ . charCodeAt ( 0 ) ) , 0 ) , _ _md _get = ( e , _ = localStorage , t = _ _md _scope ) => JSON . parse ( _ . getItem ( t . pathname + "." + e ) ) , _ _md _set = ( e , _ , t = localStorage , a = _ _md _scope ) => { try { t . setItem ( a . pathname + "." + e , JSON . stringify ( _ ) ) } catch ( e ) { } } < / script >
<!-- Matomo -->
< script >
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.netsyms.net/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '57']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
< / script >
<!-- End Matomo Code -->
< script > "undefined" != typeof _ _md _analytics && _ _md _analytics ( ) < / script >
< / head >
< body dir = "ltr" data-md-color-scheme = "default" data-md-color-primary = "blue" data-md-color-accent = "indigo" >
< input class = "md-toggle" data-md-toggle = "drawer" type = "checkbox" id = "__drawer" autocomplete = "off" >
< input class = "md-toggle" data-md-toggle = "search" type = "checkbox" id = "__search" autocomplete = "off" >
< label class = "md-overlay" for = "__drawer" > < / label >
< div data-md-component = "skip" >
< a href = "#overview" class = "md-skip" >
Skip to content
< / a >
< / div >
< div data-md-component = "announce" >
< / div >
< div data-md-color-scheme = "default" data-md-component = "outdated" hidden >
< / div >
< header class = "md-header md-header--shadow" data-md-component = "header" >
< nav class = "md-header__inner md-grid" aria-label = "Header" >
< a href = "https://postalpoint.app" title = "PostalPoint Plugin Development" class = "md-header__button md-logo" aria-label = "PostalPoint Plugin Development" data-md-component = "logo" >
< img src = "assets/logo.svg" alt = "logo" >
< / a >
< label class = "md-header__button md-icon" for = "__drawer" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z" / > < / svg >
< / label >
< div class = "md-header__title" data-md-component = "header-title" >
< div class = "md-header__ellipsis" >
< div class = "md-header__topic" >
< span class = "md-ellipsis" >
PostalPoint Plugin Development
< / span >
< / div >
< div class = "md-header__topic" data-md-component = "header-topic" >
< span class = "md-ellipsis" >
Overview
< / span >
< / div >
< / div >
< / div >
< label class = "md-header__button md-icon" for = "__search" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5" / > < / svg >
< / label >
< div class = "md-search" data-md-component = "search" role = "dialog" >
< label class = "md-search__overlay" for = "__search" > < / label >
< div class = "md-search__inner" role = "search" >
< form class = "md-search__form" name = "search" >
< input type = "text" class = "md-search__input" name = "query" aria-label = "Search" placeholder = "Search" autocapitalize = "off" autocorrect = "off" autocomplete = "off" spellcheck = "false" data-md-component = "search-query" required >
< label class = "md-search__icon md-icon" for = "__search" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5" / > < / svg >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z" / > < / svg >
< / label >
< nav class = "md-search__options" aria-label = "Search" >
< button type = "reset" class = "md-search__icon md-icon" title = "Clear" aria-label = "Clear" tabindex = "-1" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" / > < / svg >
< / button >
< / nav >
< / form >
< div class = "md-search__output" >
< div class = "md-search__scrollwrap" tabindex = "0" data-md-scrollfix >
< div class = "md-search-result" data-md-component = "search-result" >
< div class = "md-search-result__meta" >
Initializing search
< / div >
< ol class = "md-search-result__list" role = "presentation" > < / ol >
< / div >
< / div >
< / div >
< / div >
< / div >
< / nav >
< / header >
< div class = "md-container" data-md-component = "container" >
< main class = "md-main" data-md-component = "main" >
< div class = "md-main__inner md-grid" >
< div class = "md-sidebar md-sidebar--primary" data-md-component = "sidebar" data-md-type = "navigation" >
< div class = "md-sidebar__scrollwrap" >
< div class = "md-sidebar__inner" >
< nav class = "md-nav md-nav--primary" aria-label = "Navigation" data-md-level = "0" >
< label class = "md-nav__title" for = "__drawer" >
< a href = "https://postalpoint.app" title = "PostalPoint Plugin Development" class = "md-nav__button md-logo" aria-label = "PostalPoint Plugin Development" data-md-component = "logo" >
< img src = "assets/logo.svg" alt = "logo" >
< / a >
PostalPoint Plugin Development
< / label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item md-nav__item--active" >
< input class = "md-nav__toggle md-toggle" type = "checkbox" id = "__toc" >
< label class = "md-nav__link md-nav__link--active" for = "__toc" >
< span class = "md-ellipsis" >
Overview
< / span >
< span class = "md-nav__icon md-icon" > < / span >
< / label >
< a href = "." class = "md-nav__link md-nav__link--active" >
< span class = "md-ellipsis" >
Overview
< / span >
< / a >
< nav class = "md-nav md-nav--secondary" aria-label = "Table of contents" >
< label class = "md-nav__title" for = "__toc" >
< span class = "md-nav__icon md-icon" > < / span >
Table of contents
< / label >
< ul class = "md-nav__list" data-md-component = "toc" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "#what-plugins-can-do" class = "md-nav__link" >
< span class = "md-ellipsis" >
What plugins can do
< / span >
< / a >
2026-02-14 08:02:13 +00:00
< / li >
< li class = "md-nav__item" >
< a href = "#postalpoint-devtools-and-testing-builds" class = "md-nav__link" >
< span class = "md-ellipsis" >
PostalPoint DevTools and Testing Builds
< / span >
< / a >
2026-02-13 14:04:06 -07:00
< / li >
< li class = "md-nav__item" >
< a href = "#plugin-package-structure" class = "md-nav__link" >
< span class = "md-ellipsis" >
Plugin Package Structure
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#postalpoint-plugin-api" class = "md-nav__link" >
< span class = "md-ellipsis" >
PostalPoint Plugin API
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#minimal-plugin-code" class = "md-nav__link" >
< span class = "md-ellipsis" >
Minimal Plugin Code
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#plugin-metadata-file" class = "md-nav__link" >
< span class = "md-ellipsis" >
Plugin Metadata File
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_2" >
< label class = "md-nav__link" for = "__nav_2" id = "__nav_2_label" tabindex = "0" >
< span class = "md-ellipsis" >
Docs
< / span >
< span class = "md-nav__icon md-icon" > < / span >
< / label >
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_2_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_2" >
< span class = "md-nav__icon md-icon" > < / span >
Docs
< / label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "Docs/Address/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Address object
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Docs/Carrier_Service/" class = "md-nav__link" >
< span class = "md-ellipsis" >
getCarrierName and getServiceName
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Docs/Database/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Database Drivers
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Docs/Events/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Event Bus
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Docs/FormPS1583/" class = "md-nav__link" >
< span class = "md-ellipsis" >
FormPS1583 object
< / span >
< / a >
< / li >
2026-03-11 21:22:47 +00:00
< li class = "md-nav__item" >
< a href = "Docs/HTTP_API_Server/" class = "md-nav__link" >
< span class = "md-ellipsis" >
HTTP API Server
< / span >
< / a >
< / li >
2026-03-19 23:25:57 +00:00
< li class = "md-nav__item" >
< a href = "Docs/HiddenConfigs/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Configuration Flags
< / span >
< / a >
< / li >
2026-02-13 14:04:06 -07:00
< li class = "md-nav__item" >
< a href = "Docs/Parcel/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Parcel/Package Object
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Docs/Receipt/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Receipt Objects
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Docs/ReceiptPrinter/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Receipt Printer driver functions
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Docs/TrackingBarcode/" class = "md-nav__link" >
< span class = "md-ellipsis" >
TrackingBarcode class
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_3" >
< label class = "md-nav__link" for = "__nav_3" id = "__nav_3_label" tabindex = "0" >
< span class = "md-ellipsis" >
Examples
< / span >
< span class = "md-nav__icon md-icon" > < / span >
< / label >
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_3_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_3" >
< span class = "md-nav__icon md-icon" > < / span >
Examples
< / label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "Examples/01Minimal/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Minimal Plugin
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Examples/02Basic/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Basic Plugin
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Examples/03Shipping/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Shipping Plugin
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Examples/04CardProcessor/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Card Payments
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Examples/05CryptoProcessor/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Cryptocurrency Payments
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_4" >
< label class = "md-nav__link" for = "__nav_4" id = "__nav_4_label" tabindex = "0" >
< span class = "md-ellipsis" >
Plugin API
< / span >
< span class = "md-nav__icon md-icon" > < / span >
< / label >
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_4_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_4" >
< span class = "md-nav__icon md-icon" > < / span >
Plugin API
< / label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "Plugin%20API/barcode/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Barcode
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/database/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Database
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/fs/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Fs
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/global%20functions/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Global functions
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/graphics/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Graphics
< / span >
< / a >
< / li >
2026-03-11 20:55:37 +00:00
< li class = "md-nav__item" >
< a href = "Plugin%20API/httpserver/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Httpserver
< / span >
< / a >
< / li >
2026-02-13 14:04:06 -07:00
< li class = "md-nav__item" >
< a href = "Plugin%20API/i18n/" class = "md-nav__link" >
< span class = "md-ellipsis" >
I18n
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/kiosk/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Kiosk
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/mailboxes/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Mailboxes
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/pos/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Pos
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/print/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Print
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/reports/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Reports
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/settings/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Settings
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/shipping/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Shipping
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/storage/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Storage
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/ui/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Ui
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/user/" class = "md-nav__link" >
< span class = "md-ellipsis" >
User
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "Plugin%20API/util/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Util
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< / ul >
< / nav >
< / div >
< / div >
< / div >
< div class = "md-sidebar md-sidebar--secondary" data-md-component = "sidebar" data-md-type = "toc" >
< div class = "md-sidebar__scrollwrap" >
< div class = "md-sidebar__inner" >
< nav class = "md-nav md-nav--secondary" aria-label = "Table of contents" >
< label class = "md-nav__title" for = "__toc" >
< span class = "md-nav__icon md-icon" > < / span >
Table of contents
< / label >
< ul class = "md-nav__list" data-md-component = "toc" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "#what-plugins-can-do" class = "md-nav__link" >
< span class = "md-ellipsis" >
What plugins can do
< / span >
< / a >
2026-02-14 08:02:13 +00:00
< / li >
< li class = "md-nav__item" >
< a href = "#postalpoint-devtools-and-testing-builds" class = "md-nav__link" >
< span class = "md-ellipsis" >
PostalPoint DevTools and Testing Builds
< / span >
< / a >
2026-02-13 14:04:06 -07:00
< / li >
< li class = "md-nav__item" >
< a href = "#plugin-package-structure" class = "md-nav__link" >
< span class = "md-ellipsis" >
Plugin Package Structure
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#postalpoint-plugin-api" class = "md-nav__link" >
< span class = "md-ellipsis" >
PostalPoint Plugin API
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#minimal-plugin-code" class = "md-nav__link" >
< span class = "md-ellipsis" >
Minimal Plugin Code
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#plugin-metadata-file" class = "md-nav__link" >
< span class = "md-ellipsis" >
Plugin Metadata File
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / div >
< / div >
< / div >
< div class = "md-content" data-md-component = "content" >
< article class = "md-content__inner md-typeset" >
< h1 id = "overview" > Overview< / h1 >
< p > PostalPoint® supports JavaScript plugin extensions. Plugins can hook into PostalPoint to add features and integrations.< / p >
< h2 id = "what-plugins-can-do" > What plugins can do< / h2 >
< ul >
< li > Process card payments and handle saved payment methods< / li >
< li > Process cryptocurrency payments< / li >
< li > Add additional carriers, providing shipping rates and labels< / li >
< li > Print to label and receipt printers, letting PostalPoint handle hardware support and drivers< / li >
< li > Extend support for prepaid label acceptance, prepaid barcode recognition, and carrier dropoff QR codes< / li >
< li > Install pages in the Tools menu, creating new interfaces and features< / li >
< li > Receive transaction receipts for ingestion into third-party accounting or business software< / li >
< li > Display interactive HTML5 content on the customer-facing screen< / li >
< li > Run both Node.JS and browser code.< / li >
< / ul >
2026-02-14 08:02:13 +00:00
< h2 id = "postalpoint-devtools-and-testing-builds" > PostalPoint DevTools and Testing Builds< / h2 >
< p > The < a href = "https://build.netsyms.net/job/PostalPoint_Retail/" > PostalPoint build server< / a >
creates installers from the latest prerelease changes. It is not recommended to use these
builds for production purposes, but they contain the latest changes to plugin APIs.< / p >
< p > For Windows developers, you'll want to download a "postalpoint-retail-sdk_x.xx.exe" installer,
as it contains the Chromium DevTools.< / p >
< p > To enable DevTools on Linux, simply run < code > sudo apt install nw.js-sdk< / code > and restart PostalPoint.< / p >
< p > To access the DevTools, press F12 or right-click anywhere inside PostalPoint and click Inspect.
Depending on various factors, some plugin console output may go to the "background page";
right-click and click "Inspect background page" to view that console.< / p >
2026-02-13 14:04:06 -07:00
< h2 id = "plugin-package-structure" > Plugin Package Structure< / h2 >
< p > A plugin is distributed as a simple ZIP file, containing a folder. The folder then has at least one file, named < code > plugin.js< / code > .
The < code > exports.init< / code > function in < code > plugin.js< / code > is executed when PostalPoint launches, allowing the plugin
to request involvement with various events in PostalPoint.< / p >
< p > PostalPoint installs plugin packages by unzipping their contents into a plugins folder.
Plugins are uninstalled by deleting their folder.< / p >
< h2 id = "postalpoint-plugin-api" > PostalPoint Plugin API< / h2 >
< p > The PostalPoint plugin API is a globally-available object named < code > global.apis< / code > .
It contains many useful functions for integrating with PostalPoint.
All the APIs listed under the Plugin API section must be prefixed with < code > global.apis.< / code > in order to work.< / p >
< h2 id = "minimal-plugin-code" > Minimal Plugin Code< / h2 >
< div class = "language-javascript highlight" > < span class = "filename" > plugin-name/plugin.js< / span > < pre > < span > < / span > < code > < span id = "__span-0-1" > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nx" > exports< / span > < span class = "p" > .< / span > < span class = "nx" > init< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "kd" > function< / span > < span class = "w" > < / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< / span > < span id = "__span-0-2" > < a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "w" > < / span > < span class = "nb" > global< / span > < span class = "p" > .< / span > < span class = "nx" > apis< / span > < span class = "p" > .< / span > < span class = "nx" > alert< / span > < span class = "p" > (< / span > < span class = "s2" > " This message appears when PostalPoint launches." < / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "s2" > " Hello!" < / span > < span class = "p" > );< / span >
< / span > < span id = "__span-0-3" > < a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "p" > };< / span >
< / span > < / code > < / pre > < / div >
< p > Yes, the smallest plugin really is just two lines of code, and accessing PostalPoint features
really is that easy.< / p >
< h2 id = "plugin-metadata-file" > Plugin Metadata File< / h2 >
< p > While not strictly required, a < code > package.json< / code > is encouraged, and allows specifying the plugin's
display name, PostalPoint version compatibility, and other metadata.< / p >
< p > Sample:< / p >
< div class = "language-json highlight" > < pre > < span > < / span > < code > < span id = "__span-1-1" > < a id = "__codelineno-1-1" name = "__codelineno-1-1" href = "#__codelineno-1-1" > < / a > < span class = "p" > {< / span >
< / span > < span id = "__span-1-2" > < a id = "__codelineno-1-2" name = "__codelineno-1-2" href = "#__codelineno-1-2" > < / a > < span class = "w" > < / span > < span class = "nt" > " name" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " plugin-id-here" < / span > < span class = "p" > ,< / span >
< / span > < span id = "__span-1-3" > < a id = "__codelineno-1-3" name = "__codelineno-1-3" href = "#__codelineno-1-3" > < / a > < span class = "w" > < / span > < span class = "nt" > " main" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " plugin.js" < / span > < span class = "p" > ,< / span >
< / span > < span id = "__span-1-4" > < a id = "__codelineno-1-4" name = "__codelineno-1-4" href = "#__codelineno-1-4" > < / a > < span class = "w" > < / span > < span class = "nt" > " description" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Human-readable description of the plugin" < / span > < span class = "p" > ,< / span >
< / span > < span id = "__span-1-5" > < a id = "__codelineno-1-5" name = "__codelineno-1-5" href = "#__codelineno-1-5" > < / a > < span class = "w" > < / span > < span class = "nt" > " version" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " 1.0.0" < / span > < span class = "p" > ,< / span >
< / span > < span id = "__span-1-6" > < a id = "__codelineno-1-6" name = "__codelineno-1-6" href = "#__codelineno-1-6" > < / a > < span class = "w" > < / span > < span class = "nt" > " author" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Your Name" < / span > < span class = "p" > ,< / span >
< / span > < span id = "__span-1-7" > < a id = "__codelineno-1-7" name = "__codelineno-1-7" href = "#__codelineno-1-7" > < / a > < span class = "w" > < / span > < span class = "nt" > " license" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Code license name" < / span > < span class = "p" > ,< / span >
< / span > < span id = "__span-1-8" > < a id = "__codelineno-1-8" name = "__codelineno-1-8" href = "#__codelineno-1-8" > < / a > < span class = "w" > < / span > < span class = "nt" > " postalpoint" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< / span > < span id = "__span-1-9" > < a id = "__codelineno-1-9" name = "__codelineno-1-9" href = "#__codelineno-1-9" > < / a > < span class = "w" > < / span > < span class = "nt" > " pluginname" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " Display Name for Plugin" < / span > < span class = "p" > ,< / span >
< / span > < span id = "__span-1-10" > < a id = "__codelineno-1-10" name = "__codelineno-1-10" href = "#__codelineno-1-10" > < / a > < span class = "w" > < / span > < span class = "nt" > " minVersion" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " 000034" < / span > < span class = "p" > ,< / span >
< / span > < span id = "__span-1-11" > < a id = "__codelineno-1-11" name = "__codelineno-1-11" href = "#__codelineno-1-11" > < / a > < span class = "w" > < / span > < span class = "nt" > " maxVersion" < / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > " 001000" < / span >
< / span > < span id = "__span-1-12" > < a id = "__codelineno-1-12" name = "__codelineno-1-12" href = "#__codelineno-1-12" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
< / span > < span id = "__span-1-13" > < a id = "__codelineno-1-13" name = "__codelineno-1-13" href = "#__codelineno-1-13" > < / a > < span class = "p" > }< / span >
< / span > < / code > < / pre > < / div >
< p > PostalPoint version codes are MMMnnn where MMM is the major version and nnn is the minor version, zero-padded.
So version 0.35 is "000035", and 1.23 is "001023".< / p >
< / article >
< / div >
< script > var target = document . getElementById ( location . hash . slice ( 1 ) ) ; target && target . name && ( target . checked = target . name . startsWith ( "__tabbed_" ) ) < / script >
< / div >
< / main >
< footer class = "md-footer" >
< div class = "md-footer-meta md-typeset" >
< div class = "md-footer-meta__inner md-grid" >
< div class = "md-copyright" >
Made with
< a href = "https://squidfunk.github.io/mkdocs-material/" target = "_blank" rel = "noopener" >
Material for MkDocs
< / a >
< / div >
< / div >
< / div >
< / footer >
< / div >
< div class = "md-dialog" data-md-component = "dialog" >
< div class = "md-dialog__inner md-typeset" > < / div >
< / div >
< script id = "__config" type = "application/json" > { "annotate" : null , "base" : "." , "features" : [ "content.code.copy" ] , "search" : "assets/javascripts/workers/search.2c215733.min.js" , "tags" : null , "translations" : { "clipboard.copied" : "Copied to clipboard" , "clipboard.copy" : "Copy to clipboard" , "search.result.more.one" : "1 more on this page" , "search.result.more.other" : "# more on this page" , "search.result.none" : "No matching documents" , "search.result.one" : "1 matching document" , "search.result.other" : "# matching documents" , "search.result.placeholder" : "Type to start searching" , "search.result.term.missing" : "Missing" , "select.version" : "Select version" } , "version" : { "alias" : true , "provider" : "mike" } } < / script >
< script src = "assets/javascripts/bundle.79ae519e.min.js" > < / script >
< script src = "assets/external/unpkg.com/mermaid@11/dist/mermaid.min.js" > < / script >
< / body >
< / html >