-
Notifications
You must be signed in to change notification settings - Fork 0
Contributing
Thanks for your interest in contributing to the nSelf plugin ecosystem.
Free MIT plugins for the nSelf CLI. There are 25 free plugins available to everyone.
- nSelf CLI
- Node.js 22+ (for registry/SDK tools)
- Go 1.22+ (for Go plugins)
-
Clone the repo and the CLI:
git clone https://github.com/nself-org/plugins.git git clone https://github.com/nself-org/cli.git
-
Install the nSelf CLI:
cd cli && make install
-
Start a local nSelf stack:
mkdir testproject && cd testproject nself init nself start
-
Install a plugin for development:
nself plugin install <plugin-name> --dev
Plugins live in free/, community/, and monitoring/ directories. Each plugin lives in <directory>/<plugin-name>/ with this layout:
free/<plugin-name>/
plugin.json # Plugin manifest
install.sh # Installation script
README.md # Plugin-specific docs
docker-compose.yml # If adding a service
ts/src/ # TypeScript source
types.ts
client.ts
database.ts
server.ts
index.ts
migrations/ # SQL migrations (optional)
- TypeScript strict mode
- All tables use the
np_prefix (e.g.,np_notify_subscriptions) - Every handler includes
source_account_idfor multi-tenancy - pnpm only (no npm or yarn)
- All shell scripts must be Bash 3.2 compatible (no
echo -e, no${var,,}, nodeclare -A) - Follow existing code patterns; include comments for complex logic; use
printfnotecho -e
Read Standards BEFORE contributing. Violations will cause automated build failures.
All plugins must comply with:
- Universal
np_table prefix -
source_account_idmulti-app isolation - Official category assignment (1 of 13)
- Lowercase-with-hyphens naming (
my-service, notMyService)
ALL tables must:
- Be prefixed with
np_(e.g.np_stripe_customers, notstripe_customers) - Include
source_account_idfor multi-tenant isolation - Include standard columns:
created_at,synced_at - Use JSONB for flexible data
- Add indexes for common queries
Example:
CREATE TABLE np_myplugin_resources (
id UUID PRIMARY KEY,
source_account_id VARCHAR(255) NOT NULL, -- REQUIRED
name VARCHAR(255) NOT NULL,
metadata JSONB DEFAULT '{}',
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
synced_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
INDEX idx_np_myplugin_resources_account (source_account_id)
);plugin.json must include:
{
"multiApp": {
"supported": true,
"isolationColumn": "source_account_id",
"pkStrategy": "uuid",
"defaultValue": "primary"
}
}Choose ONE of the 13 official categories:
- authentication, automation, commerce, communication, content
- data, development, infrastructure, integrations, media
- streaming, sports, compliance
See Standards for category descriptions.
Before submitting, run these checks:
# 1. Validate JSON syntax
jq empty plugins/my-plugin/plugin.json
# 2. Check table prefixes (should return nothing)
jq -r '.tables[] | select(startswith("np_") | not)' plugins/my-plugin/plugin.json
# 3. Check multi-app isolation (should output: source_account_id)
jq -r '.multiApp.isolationColumn' plugins/my-plugin/plugin.json
# 4. Check category is valid
jq -r '.category' plugins/my-plugin/plugin.jsonAll checks must pass or your PR will fail automated validation.
- Fork the repository
- Create a feature branch from
main - New plugins need a
plugin.json,install.sh, and README - Make your changes, following existing plugin patterns
- Test with a local nSelf stack
- Submit a PR with a clear description of what changed and why
Conventional commits: feat:, fix:, chore:, docs:, test:
Open an issue on GitHub with:
- nSelf CLI version (
nself version) - Plugin name and version
- Steps to reproduce
- Expected vs actual behavior
Do not open a public issue for security vulnerabilities. Follow the process in SECURITY.md.
- GitHub Discussions — preferred for questions about plugin development
- Community: nself.org
- GOVERNANCE.md — decision model
- ENFORCEMENT.md — code of conduct enforcement
- CODEOWNERS — who reviews what
- Plugin-Development — detailed plugin dev guide
- All Plugins: the full plugin catalog
- Commands
- File Processing Commands
- GitHub Commands
- ID.me Commands
- Jobs Commands
- Notifications Commands
- Realtime Commands
- Shopify Commands
- Stripe Commands
View All: Home (or see the full alphabetical list below — 129/129 synced with registry.json)
- Access-Controls
- Admin-Api
- AI-CLI
- AI-Studio
- Alerts
- Analytics
- API
- Audit
- Audit-Analytics
- Audit-Log
- Auth-Enterprise
- Backup
- BYOK
- CDC
- CDN
- CI
- Claw-CLI
- Cloudflare
- Compliance
- Content-Acquisition
- Content-Progress
- Content-Safety
- Costs
- CRDT
- Cron
- DDNS
- Devices
- DLQ
- Documents
- Dogfood
- Donorbox
- DR
- E2EE
- Encryption
- Entitlements
- Event-Bus
- Family-Ancestry
- Family-FamilySearch
- Family-GEDCOM
- Family-MyHeritage
- Family-WikiTree
- Feature-Flags
- Federation
- File-Processing
- Flags
- Forgejo
- Functions-V8
- Game-Metadata
- Gateway
- Gauth
- GDPR
- Geocoding
- GitHub
- GitHub-Runner
- HIPAA
- Home
- IDme
- Infra
- Invitations
- Job-Queue
- Jobs
- K8s
- Link-Preview
- Maintenance
- MDNS
- Media-Processing
- Meetings
- MLflow
- Model
- Monitor
- Monitoring
- Notifications
- Notify
- nSelf-Cloud
- nSelf-Eval-Gate
- nSelf-Geo
- nSelf-Image
- nSelf-PDF
- nSelf-Scan
- nSelf-Sync
- nSelf-Vault
- Object-Storage
- Observability
- Ollama
- Payments
- PayPal
- Pentest
- Pentest-Kit
- Plugin-ClawDE
- Plugin-Gauth
- Plugin-LLM-Gateway
- Plugin-PTY
- Plugin-Retrieval
- Podcast
- Post
- Push
- Queue
- Region
- Release
- Retro-Gaming
- Rom-Discovery
- Search
- Sentry-CLI
- Shared-Utils
- Shopify
- SIEM
- SMS
- Soak
- Sports
- Storage
- Storage-Transform
- Stripe
- Subtitle-Manager
- Tenant
- Tenant-Controller
- TMDB
- Tokens
- Torrent-Manager
- Transactional-Email
- VPN
- WAF
- Warehouse
- Watchdog
- Web3
- Webhooks
- Workflows
Related