Testing & Validation
Validate your plugin before submitting to the Marketplace.
Before submitting your plugin for review, validate it locally. The plugin system provides several levels of validation.
Live testing
The fastest way to test is to edit the plugin file in your workspace:
- Create
_stoa_plugins/your-plugin.jsin any project - Edit the file — output updates in ~100ms
- Check both sidebar and full-panel modes (click "Open" on the widget)
- Test with real data where possible
Tip
Test with empty data, missing fields, and error conditions. Reviewers will check these cases.
Manifest validation
Check that your plugin header is well-formed:
@stoa-pluginmarker is present@nameis set and descriptive (2-3 words)@typeis one ofwidget,renderer, oragent@iconis a valid Lucide icon name@refreshuses a valid unit (s,m,h)@filetypepatterns are valid globs (renderer plugins only)@permissionsuses validnetwork:syntax@toolbaris one ofpills,menu, oricons(agent plugins only)
Output validation
Verify your render() return value:
- Has a
typefield typeis one of the supported output types- Required fields are present for the output type (e.g.,
columnsandrowsfortable) - No unexpected fields that would be silently ignored
editableTableplugins export anonEditfunctioneditableHtmlplugins export anonEditfunction and definewindow.hydratein the iframe
Checklist before submission
All plugins
- Plugin loads without errors
- Output renders correctly in the sidebar
- Empty and error states are handled gracefully
-
@permissionsare minimal — only declare what you actually use -
@refreshinterval is reasonable (don't hammer APIs) -
@nameand@iconare clear and descriptive
Widgets
- Sidebar mode is compact (3-5 items)
- Full-panel mode adds meaningful detail
- Both modes are tested
- Network errors show
{ type: 'error' }, not blank output
Renderers
- Empty files handled:
{ type: 'empty', message: '...' } - Parse errors handled:
{ type: 'error', message: '...', details: '...' } -
onEditreturns valid file content (for editable renderers) -
onEdithandles all edit kinds (cell,addRow,deleteRow) - File round-trips: edit a cell, check the raw file content is correct
Agent plugins
- Prompt text is clear and complete
-
{activeFile}placeholders work with and without a file open - Labels are short enough for the toolbar
- Groups are logical (menu mode)
Performance
Plugins have a 5-second execution timeout. For most plugins this is generous, but keep in mind:
fetch()requests count toward the timeout- Large data processing should be efficient
- Avoid unnecessary work in the render function — it runs on every refresh
What reviewers check
When you submit to the Marketplace, a Stoa team member will:
- Install your plugin in a real workspace
- Test sidebar and full-panel modes
- Test with empty/missing data
- Review permissions for security
- Check that the output uses native types where appropriate
- Verify error handling
- Give specific, constructive feedback
Most plugins go through 1-2 feedback rounds before approval.