Publishing to the Marketplace
This guide explains how to publish your forms, workflows, and applications to the NetPad Marketplace. Whether you want to share a single form, a workflow template, or a complete application bundle, this guide covers the package formats and publishing process for each.
Overviewโ
The marketplace supports three package types:
| Package Type | What It Contains | npm Keyword | Use Case |
|---|---|---|---|
| Application | Forms + Workflows + Connections | netpad-app | Complete solutions |
| Form | Single form definition | netpad-form | Reusable form templates |
| Workflow | Single workflow definition | netpad-workflow | Automation patterns |
Publishing Methodsโ
There are two ways to publish to the marketplace:
- Web UI Publishing - Publish directly from the NetPad interface (easiest)
- npm Publishing - Publish as an npm package for developer distribution
Method 1: Web UI Publishingโ
Publishing a Formโ
If you've built a form you want to share:
- Open your form in the Form Builder
- Click the menu icon (โฎ) in the top right
- Select "Publish to Marketplace"
- Fill out the publishing form:
- Name: Display name for the marketplace
- Description: What the form does and who it's for
- Category: Select the best fit (Business, Support, Healthcare, etc.)
- Tags: Keywords for discovery (e.g., "survey", "feedback", "nps")
- Screenshots: Upload previews showing the form in action
- Click "Submit for Review"
- Platform admins will review and approve your submission
What Gets Published:
- Complete form schema (all fields, validation rules)
- Conditional logic configuration
- Theming and styling settings
- Form metadata (description, collection name, etc.)
Publishing a Workflowโ
If you've built a workflow automation pattern:
- Open your workflow in the Workflow Editor
- Click the menu icon (โฎ) in the top right
- Select "Publish to Marketplace"
- Fill out the publishing form:
- Name: Display name for the marketplace
- Description: What the workflow automates
- Category: Select the best fit
- Tags: Keywords (e.g., "notification", "approval", "sync")
- Trigger Type: Document what triggers the workflow
- Click "Submit for Review"
What Gets Published:
- Complete workflow definition (all nodes, connections)
- Node configurations
- Trigger configuration
- Variable mappings
Publishing an Applicationโ
Applications are complete solution bundles:
- Navigate to your Application in the Applications list
- Click "Publish to Marketplace"
- Fill out the comprehensive publishing form:
- Name: Application display name
- Description: Full description of what the app does
- Category: Primary category
- Tags: Discovery keywords
- Screenshots: Multiple screenshots showing the app
- Documentation: Usage instructions, setup guide
- License: License terms
- Click "Submit for Review"
What Gets Published:
- All forms in the application
- All workflows in the application
- Form-to-workflow connections
- Application configuration
- Release version information
Method 2: npm Package Publishingโ
For developers who want to distribute packages via npm.
Package Formatsโ
Application Package Formatโ
my-application/
โโโ package.json # npm metadata + netpad config
โโโ dist/
โ โโโ bundle.json # Complete application bundle
โโโ README.md
โโโ CHANGELOG.md
package.json:
{
"name": "@yourorg/netpad-customer-portal",
"version": "1.0.0",
"description": "Customer self-service portal with intake forms and approval workflows",
"keywords": ["netpad", "netpad-app", "portal", "customer"],
"main": "dist/bundle.json",
"netpad": {
"type": "application",
"name": "Customer Portal",
"category": "business",
"tags": ["portal", "customer", "intake"],
"minNetPadVersion": "3.0.0"
}
}
bundle.json structure:
{
"version": "1.0.0",
"type": "application",
"application": {
"name": "Customer Portal",
"description": "Customer self-service portal",
"category": "business"
},
"forms": [
{
"name": "Customer Intake",
"slug": "customer-intake",
"schema": { /* complete form schema */ },
"config": { /* form configuration */ }
}
],
"workflows": [
{
"name": "Intake Approval",
"nodes": [ /* workflow nodes */ ],
"edges": [ /* node connections */ ],
"trigger": { /* trigger config */ }
}
],
"connections": [
{
"formSlug": "customer-intake",
"workflowId": "intake-approval",
"trigger": "submission"
}
]
}
Form Package Formatโ
my-form/
โโโ package.json
โโโ dist/
โ โโโ form.json # Form definition
โโโ README.md
package.json:
{
"name": "@yourorg/netpad-nps-survey",
"version": "1.0.0",
"description": "Net Promoter Score survey form with analytics",
"keywords": ["netpad", "netpad-form", "survey", "nps", "feedback"],
"main": "dist/form.json",
"netpad": {
"type": "form",
"name": "NPS Survey",
"category": "feedback",
"tags": ["survey", "nps", "feedback", "analytics"],
"minNetPadVersion": "3.0.0"
}
}
form.json structure:
{
"version": "1.0.0",
"type": "form",
"form": {
"name": "NPS Survey",
"description": "Collect Net Promoter Scores from customers",
"slug": "nps-survey",
"collectionName": "nps_responses",
"formType": "create",
"schema": {
"fields": [
{
"id": "nps_score",
"type": "rating",
"label": "How likely are you to recommend us?",
"required": true,
"config": {
"min": 0,
"max": 10
}
},
{
"id": "feedback",
"type": "textarea",
"label": "What's the main reason for your score?",
"required": false
}
]
},
"validation": {
"rules": []
},
"conditionalLogic": [],
"theme": {
"preset": "professional"
}
}
}
Workflow Package Formatโ
my-workflow/
โโโ package.json
โโโ dist/
โ โโโ workflow.json # Workflow definition
โโโ README.md
package.json:
{
"name": "@yourorg/netpad-email-notification",
"version": "1.0.0",
"description": "Send email notifications on form submission",
"keywords": ["netpad", "netpad-workflow", "email", "notification"],
"main": "dist/workflow.json",
"netpad": {
"type": "workflow",
"name": "Email Notification",
"category": "integrations",
"tags": ["email", "notification", "alert"],
"triggerType": "form-submission",
"minNetPadVersion": "3.0.0"
}
}
workflow.json structure:
{
"version": "1.0.0",
"type": "workflow",
"workflow": {
"name": "Email Notification",
"description": "Send email when a form is submitted",
"trigger": {
"type": "form-submission",
"config": {
"formId": null
}
},
"nodes": [
{
"id": "trigger_1",
"type": "trigger",
"position": { "x": 100, "y": 100 },
"data": {
"triggerType": "form-submission"
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 100, "y": 250 },
"data": {
"to": "{{submitter_email}}",
"subject": "Form Submission Received",
"body": "Thank you for your submission!"
}
}
],
"edges": [
{
"source": "trigger_1",
"target": "email_1"
}
],
"variables": [
{
"name": "submitter_email",
"description": "Email address from form submission",
"source": "trigger.data.email"
}
]
}
}
Publishing to npmโ
Using the CLIโ
# 1. Create a new package
netpad create my-package --type form
# 2. Build the package
netpad build
# 3. Validate before publishing
netpad validate
# 4. Publish to npm
netpad publish
# Or publish directly to npm
npm publish --access public
Manual Processโ
-
Export from NetPad:
- Forms: Form menu โ Export โ JSON
- Workflows: Workflow menu โ Export โ JSON
- Applications: Application menu โ Export Bundle
-
Create package structure (see formats above)
-
Add package.json with
netpadfield -
Publish to npm:
npm publish --access public -
Sync to marketplace: The marketplace automatically discovers npm packages with
netpad-app,netpad-form, ornetpad-workflowkeywords.
Package Discoveryโ
How Packages Are Foundโ
The marketplace discovers npm packages by:
- Keywords: Packages with
netpad-app,netpad-form, ornetpad-workflow - Scope: Official
@netpad/scope and community packages - Naming: Packages starting with
netpad-
Naming Conventionsโ
| Type | Official Scope | Community Pattern |
|---|---|---|
| Application | @netpad/app-* | @yourorg/netpad-* or netpad-app-* |
| Form | @netpad/form-* | @yourorg/netpad-form-* or netpad-form-* |
| Workflow | @netpad/workflow-* | @yourorg/netpad-workflow-* or netpad-workflow-* |
The Review Processโ
What Happens After Submissionโ
- Submitted: Your package enters the review queue
- In Review: Platform admins check functionality, documentation, and quality
- Approved: Package is published to the marketplace
- Or Rejected: You receive feedback on what to improve
Review Criteriaโ
- Functionality: Does the package work as described?
- Documentation: Is there clear documentation for users?
- Quality: Does it follow NetPad best practices?
- Security: No security concerns or malicious code
- Originality: Not a duplicate of existing packages
Tips for Approvalโ
- Write clear descriptions explaining what the package does
- Include screenshots showing the package in use
- Test thoroughly before submitting
- Document configuration if any setup is required
- Use appropriate categories and tags for discovery
Managing Published Packagesโ
My Publicationsโ
Access your published packages at Marketplace โ My Publications:
- View stats: Installs, ratings, reviews
- Edit listing: Update description, screenshots, tags
- Publish updates: Release new versions
- Unpublish: Remove from marketplace
- Delete: Permanently remove (requires confirmation)
Updating Packagesโ
Web UI:
- Make changes to your form/workflow/application
- Go to the published listing
- Click "Update Version"
- Submit for review
npm:
- Update your package files
- Bump version in package.json
npm publish- Marketplace syncs automatically
Best Practicesโ
For Formsโ
- Include meaningful field labels and help text
- Set up validation rules appropriately
- Use conditional logic to simplify complex forms
- Choose an appropriate theme that others can customize
- Include sample data or clear field descriptions
For Workflowsโ
- Document what trigger type the workflow expects
- Use clear, descriptive node labels
- Include error handling nodes
- Document any required connections or API keys
- Provide variable mapping documentation
For Applicationsโ
- Ensure all forms and workflows work together
- Include a setup guide in documentation
- Document any external dependencies
- Create a release with semantic versioning
- Provide example use cases
Next Stepsโ
- Marketplace Overview - Browse and install packages
- Applications - Build applications
- CLI Package - Use the CLI for publishing
- npm Integration API - API documentation