Overview
Every project has its own isolated secret storage. This ensures complete separation between projects, so secrets from one project are never accessible to another. Key security features:- Encryption at rest - All secrets are encrypted before storage
- Isolated storage - Each project has its own dedicated secret vault
- Masked in logs - Secret values are never written to execution logs
- Masked in API responses - API responses always display
********instead of actual values - Automatic cleanup - Secrets are permanently deleted when a project is deleted
- Automatic rotation - Encryption keys are rotated automatically to maintain security
Using Secrets in Flows
Access your secrets in any flow configuration using the{{env.KEY_NAME}} template syntax.
In HTTP Node Headers
In URLs
In Request Bodies
With Default Values
Use thedefault pipe to provide fallback values:
Common Use Cases
External API Authentication
Database Connection Strings
Store complete connection URLs as secrets:Webhook Secrets
Store secrets used for webhook signature verification:Third-Party Service Credentials
Best Practices
Naming Conventions
Use descriptive, consistent names:| Pattern | Example | Use Case |
|---|---|---|
SERVICE_API_KEY | STRIPE_API_KEY | API keys |
SERVICE_SECRET | WEBHOOK_SECRET | Shared secrets |
SERVICE_TOKEN | GITHUB_TOKEN | Access tokens |
SERVICE_URL | DATABASE_URL | Connection strings |
Environment-Specific Secrets
For different environments (staging, production), use separate Dualship projects with their own secrets. This ensures complete isolation between environments.Security Guarantees
| Aspect | Protection |
|---|---|
| Storage | Encrypted at rest in a dedicated secrets vault |
| Transmission | All API calls use HTTPS |
| Isolation | Each project has completely separate secret storage |
| Access | Secrets only accessible to authorized project members |
| Logging | Values never appear in execution logs |
| API Responses | Values always masked as ******** |
| Deletion | Permanently removed when project is deleted |
Caching
For performance, secrets are cached with automatic invalidation. When you create, update, or delete a secret, the cache is cleared and new values take effect immediately.Limits
| Plan | Secrets Limit |
|---|---|
| Free | Unlimited |
| Hobby | Unlimited |
| Pro | Unlimited |
Related
- Template Expressions - How to use
{{env.KEY}}syntax - Project Settings - Log masking for additional security
- HTTP Node - Making authenticated API calls