Skip to content

Publishing Plugins

Once your plugin is working, you can share it with others by publishing to GitHub and adding it to the plugin registry.

Before publishing, verify your plugin is ready:

Ensure all fields are accurate:

{
"id": "my-plugin",
"name": "My Plugin",
"version": "0.1.0",
"description": "Clear, concise description of what it does",
"author": "Your Name",
"main": "index.js",
"permissions": {
"read": ["transactions", "accounts"],
"schemaName": "plugin_my_plugin"
}
}
  • Build the plugin: npm run build
  • Install locally: tl plugin install .
  • Test all features in the desktop app
  • Verify it works with both light and dark themes
  • Test with real data (not just demo mode)
  • Remove debug console.log() statements
  • Handle errors gracefully with sdk.toast.error()
  • Ensure subscriptions are cleaned up in onDestroy()

The template includes automation for releasing. When you push a tag, GitHub Actions builds and publishes your plugin.

Terminal window
./scripts/release.sh 0.1.0

This script:

  1. Updates the version in manifest.json
  2. Builds the plugin
  3. Commits the version bump
  4. Creates a git tag
  5. Pushes to GitHub

The GitHub Actions workflow then:

  1. Checks out the code
  2. Installs dependencies
  3. Builds the plugin
  4. Creates a GitHub release with manifest.json and dist/index.js

Follow semver for version numbers:

  • MAJOR (1.0.0) - Breaking changes
  • MINOR (0.1.0) - New features, backwards compatible
  • PATCH (0.0.1) - Bug fixes

Keep versions in sync across:

  • manifest.json - version field
  • package.json - version field (optional but recommended)
  • Git tags - v0.1.0 format

Once you have a GitHub release, submit your plugin to the plugin registry.

Fork treeline-money/treeline on GitHub.

Add your plugin to plugins.json:

{
"id": "my-plugin",
"name": "My Plugin",
"description": "Clear description of what it does",
"author": "Your Name",
"repo": "https://github.com/yourusername/my-plugin"
}

Fields:

FieldRequiredDescription
idYesMust match your manifest.json
nameYesDisplay name
descriptionYesBrief description (under 100 chars)
authorYesYour name or organization
repoYesGitHub repository URL
featuredNoSet by maintainers only

Create a PR with:

  • Title: Add [plugin-name] plugin
  • Description: Brief explanation of what your plugin does
  • Link to your repository

Maintainers will review your PR for:

  • Working GitHub release
  • Accurate manifest.json
  • Reasonable permissions (not requesting more than needed)
  • No malicious code
  • Make plugins that solve real problems
  • Document your plugin’s features
  • Respond to issues and PRs
  • Keep dependencies minimal
  • Test with the latest Treeline version
  • Request unnecessary permissions
  • Include tracking or analytics
  • Bundle large dependencies
  • Copy other plugins without attribution
  • Include offensive content
  • Never log or transmit user financial data
  • Only access tables declared in permissions
  • Don’t make network requests without user consent

When you release a new version:

  1. Update manifest.json with the new version
  2. Run ./scripts/release.sh <version>
  3. The new version appears automatically for users

The registry pulls from your latest GitHub release. No PR needed for updates.

If you need help:

All plugins should include a PLUGIN_PREVIEW.md file in their GitHub repository. This file is used to display plugin information on the treeline.money landing page and in the desktop app’s plugin browser.

See these plugins for examples of how to structure your PLUGIN_PREVIEW.md:

Study these plugins for inspiration:

PluginDescriptionRepo
BudgetTag-based budget trackingplugin-budget
GoalsSavings goal trackingplugin-goals
Cash FlowIncome/expense planningplugin-cashflow
SubscriptionsRecurring charge detectionplugin-subscriptions
Emergency FundFund runway calculatorplugin-emergency-fund