Package Registries
Automatically publish your generated SDKs to package registries so your users can easily install them using their preferred package manager.
How It Works
After your SDK code is merged and released on GitHub, Packable can automatically trigger publishing to the appropriate package registry for each language. This ensures your users always have access to the latest SDK version.
Configuring Registry Publishing
In the Packable dashboard:
- Navigate to your Project Settings
- Select the SDK you want to configure
- Click Package Registry Settings
- Toggle Auto-publish on or off
- Add the required credentials (see table below)
You can enable auto-publish for some SDKs and keep it manual for others. For example, auto-publish patch versions but manually publish major versions.
Required Credentials by Registry
Different package registries require different authentication credentials. Configure these in your SDK settings:
| Language | Registry | Required Credentials | Where to Get It |
|---|---|---|---|
| TypeScript/JavaScript | npm | NPM_TOKEN | npmjs.com → Account → Access Tokens |
| Python | PyPI | PYPI_TOKEN | pypi.org → Account Settings → API tokens |
| Java | Maven Central | MAVEN_USERNAMEMAVEN_PASSWORDGPG_PRIVATE_KEYGPG_PASSPHRASE | sonatype.org |
| Ruby | RubyGems | RUBYGEMS_API_KEY | rubygems.org → Settings → API Keys |
| PHP | Packagist | None (auto-syncs from Git) | Submit to packagist.org once, then auto-syncs |
| C# | NuGet | NUGET_API_KEY | nuget.org → API Keys |
| Go | Go Modules | None (auto-syncs from Git) | Uses GitHub releases automatically via proxy.golang.org |
Keep your API tokens secure. Never commit them to your repository. Packable encrypts and stores them securely.
Publishing Workflow
Automatic Publishing
When enabled, publishing happens automatically after code is merged:
- PR is approved and merged to the target branch
- GitHub release is created with version tag
- Packable detects the new release
- SDK is built and packaged for the registry
- Package is published to the registry
- Users can install the new version
Manual Publishing
If auto-publish is disabled:
- PR is approved and merged to the target branch
- GitHub release is created with version tag
- You receive a notification that the SDK is ready to publish
- Navigate to Releases in your Packable dashboard
- Click Publish to Registry for the release
- Confirm and publish
Registry-Specific Configuration
npm (TypeScript/JavaScript)
Package Scope: Use scoped packages (@yourorg/package-name) to avoid naming conflicts.
Access Level:
- Public packages are free
- Private packages require an npm Teams subscription
Additional Settings:
- Package name (must be unique on npm)
- License
- Repository URL
- Homepage URL
PyPI (Python)
Package Name: Must be unique across all of PyPI. Consider prefixing with your organization name.
Additional Settings:
- Package name
- License
- Classifiers (Python version compatibility)
- Project URLs
Note: Use a scoped token limited to your specific package for better security.
Maven Central (Java)
Requirements:
- Group ID (usually your reversed domain, e.g.,
com.yourcompany) - Artifact ID (your package name)
- GPG signing (required for all artifacts)
Additional Settings:
- Group ID
- Artifact ID
- License
- Developer information
- SCM (source control) information
Note: Initial setup requires domain verification. Learn more
RubyGems (Ruby)
Package Name: Must be unique across all of RubyGems.
Additional Settings:
- Gem name
- License
- Homepage URL
- Source code URL
Packagist (PHP)
Auto-sync: Packagist automatically syncs from your GitHub repository.
Setup:
- Submit your package URL once at packagist.org
- Enable the GitHub webhook for automatic updates
- No credentials needed in Packable
Additional Settings:
- Package name (vendor/package format)
- composer.json must be in the repository
NuGet (C#)
Package Name: Must be unique across all of NuGet.org.
Additional Settings:
- Package ID
- License expression (e.g., MIT, Apache-2.0)
- Project URL
- Icon URL
Go Modules (Go)
Auto-sync: Go modules automatically sync from GitHub via proxy.golang.org.
Setup:
- Ensure your repository has proper version tags (v1.2.3)
- No credentials or registration needed
- Users can install directly using
go get
Module Path: Must match your repository path (e.g., github.com/yourorg/package)
Versioning and Releases
All package registries use the version number from your GitHub release tag. Ensure you follow semantic versioning principles.
Version Format: v1.2.3 (Git tag) → 1.2.3 (package registry)
Use pre-release tags (e.g., v1.2.3-beta.1) to publish beta versions to registries for testing before the stable release.
Troubleshooting
Publishing Failed
Common issues and solutions:
Invalid Credentials:
- Verify your API token is still valid
- Check token permissions/scopes
- Regenerate and update the token if needed
Package Name Conflict:
- Package name is already taken on the registry
- Use a scoped/namespaced name
- Update the package name in your SDK settings
Verifying Published Packages
After publishing, verify your package is available:
# npm
npm view @yourorg/package-name
# PyPI
pip index versions yourorg-package-name
# Maven Central (may take up to 2 hours)
# Check at https://central.sonatype.com/
# RubyGems
gem search -r ^yourorg-package-name$
# NuGet
nuget list yourorg.packagename
# Go
go list -m github.com/yourorg/package@latest
Best Practices
- Test before enabling auto-publish: Manually publish the first few versions to ensure everything works
- Monitor notifications: Set up alerts for publishing failures in Github
- Keep credentials updated: Rotate API tokens regularly and update them in Github
- Document installation: Update your SDK's README with installation instructions
- Publish carefully: Remember that published versions cannot be deleted from most registries
Next Steps
- Set up automation to automatically create releases
- Learn about versioning to control version numbering
- Configure custom code to customize generated SDKs