
Security News
pnpm 12’s Rust Rewrite Cuts Install Times by Up to 90%
pnpm 12 rewrites the package manager in Rust, cutting install times by up to 90% while preserving pnpm 11 workflows and lockfiles.
@securecode/sdk
Advanced tools
The official Node.js SDK for SecureCodeHQ — the secrets vault for developers who build with Claude Code.
npm install @securecode/sdk
The fastest way to get started is through the MCP onboarding — just tell Claude Code:
You: "Set up SecureCode for this project"
This creates your account, imports your .env files, and configures everything automatically. After onboarding, a .securecoderc file is created in your project root — the SDK reads it automatically.
Set your API key and start using secrets:
export SECURECODE_API_KEY=sc_your_key_here
import { getSecret } from '@securecode/sdk';
const stripeKey = await getSecret('STRIPE_SECRET_KEY');
const dbUrl = await getSecret('DATABASE_URL');
Inject all your secrets into process.env with a single API call:
import { loadEnv } from '@securecode/sdk';
await loadEnv();
// Now use process.env.STRIPE_SECRET_KEY, process.env.DATABASE_URL, etc.
Options:
await loadEnv({
tags: { env: 'production', project: 'acme' }, // filter by tags
override: false, // don't overwrite existing env vars
});
Note:
overridedefaults totrue— secrets from the vault overwrite existingprocess.envvalues. Setoverride: falseto preserve local values.
Use instrumentation.ts to load secrets at startup. Important: Next.js compiles this file for both Node.js and Edge runtimes. Use the NEXT_RUNTIME guard to avoid Edge bundling issues:
// src/instrumentation.ts
export async function register() {
if (process.env.NEXT_RUNTIME === "nodejs") {
const { loadEnv } = await import("@securecode/sdk");
await loadEnv();
}
}
For Next.js 14, add
experimental: { instrumentationHook: true }tonext.config.mjs.
Call loadEnv() before your app starts:
import { loadEnv } from '@securecode/sdk';
await loadEnv();
// Now start your server — all secrets are in process.env
For fine-grained audit trails, use getSecret() instead of loadEnv():
import { getSecret } from '@securecode/sdk';
// Each call = 1 HTTP request + 1 audit log entry
const stripe = await getSecret('STRIPE_KEY');
const db = await getSecret('DATABASE_URL');
When to use which:
loadEnv() — 1 API call, all secrets in process.env, ideal for app startupgetSecret() — 1 call per secret, individual audit trail per secret, ideal for on-demand accessScan and import your .env files into SecureCodeHQ:
npx securecode migrate # scan all .env* files
npx securecode migrate .env.production # import specific file
npx securecode migrate --tags "project:acme" # apply tags
npx securecode migrate --ttl 720 -y # 30-day TTL, skip confirm
Load secrets into process.env and run your command:
npx securecode-run node server.js
npx securecode-run -- npm start
npx securecode-run --tags "env:production" node app.js
The SDK resolves the API key from these sources (in order):
SECURECODE_API_KEY environment variable.securecoderc file in the project root (created during onboarding).mcp.json file (MCP server configuration)The .securecoderc file can also set project and environment filters:
SECURECODE_API_KEY=sc_your_key_here
SECURECODE_PROJECT=acme
SECURECODE_ENV=staging
When SECURECODE_PROJECT and/or SECURECODE_ENV are set, loadEnv() and listSecrets() automatically filter by those tags.
For more control, create a client instance:
import { SecureCodeClient } from '@securecode/sdk';
const client = new SecureCodeClient({
apiKey: 'sc_your_key_here',
});
// Get a secret value
const value = await client.getSecret('OPENAI_API_KEY');
// Get a secret with tags to disambiguate
const prodKey = await client.getSecret('DB_URL', { env: 'production' });
// Reveal mode — value returned to caller (audited as conscious action)
const revealed = await client.getSecret('DB_URL', undefined, undefined, { reveal: true });
// List all secrets (metadata only, no values)
const secrets = await client.listSecrets();
// Filter by tags
const prodSecrets = await client.listSecrets({
tags: { env: 'production', project: 'acme' },
});
// Create a secret with tags and TTL
await client.createSecret({
name: 'NEW_API_KEY',
value: 'sk-...',
description: 'OpenAI production key',
tags: { env: 'production', project: 'acme' },
ttlHours: 720, // expires in 30 days
});
// Update a secret
await client.updateSecret('NEW_API_KEY', {
value: 'sk-new-value...',
tags: { env: 'production', rotated: 'true' },
});
// Renew an expired secret
await client.renewSecret('EXPIRED_KEY', 48); // 48 hours
// Delete a secret
await client.deleteSecret('OLD_KEY');
// Export all secrets as .env format
const envContent = await client.exportEnv({ format: 'env' });
When an MCP rule blocks access, the SDK throws McpRuleBlockedError:
import { SecureCodeClient, McpRuleBlockedError } from '@securecode/sdk';
const client = new SecureCodeClient({ apiKey: 'sc_...' });
try {
const value = await client.getSecret('STRIPE_LIVE_KEY');
} catch (err) {
if (err instanceof McpRuleBlockedError) {
console.log(err.ruleAction); // 'block_always' | 'require_confirmation' | ...
console.log(err.ruleName); // 'Block production secrets'
// For require_confirmation rules, acknowledge and retry:
if (err.ruleAction === 'require_confirmation') {
const value = await client.getSecret('STRIPE_LIVE_KEY', undefined, err.ruleId);
}
}
}
// List active rules (read-only)
const rules = await client.getActiveRules();
Control when Claude Code can access your secrets:
// Wake session with scoped access
await client.wakeSession({
scope: [{ project: 'acme', env: 'staging' }],
autoSleepMinutes: 60,
});
// Check session status
const status = await client.getSessionStatus();
console.log(status.status); // 'active' | 'sleeping'
// Lock session when done
await client.sleepSession();
The SDK automatically handles API key rotation. If a request returns 401, the SDK re-reads the API key from its source (env var, .securecoderc, or .mcp.json) and retries once. This means you can rotate keys without restarting your application.
MIT
FAQs
SecureCodeHQ SDK - Access your secrets programmatically
The npm package @securecode/sdk receives a total of 4 weekly downloads. As such, @securecode/sdk popularity was classified as not popular.
We found that @securecode/sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
pnpm 12 rewrites the package manager in Rust, cutting install times by up to 90% while preserving pnpm 11 workflows and lockfiles.

Security News
Socket CTO Ahmad Nassri joins AppSec leaders at Black Hat to discuss active malware, package manager risks, and software supply chain defense.

Research
/Security News
Thirteen malicious Packagist themes expose visitors on unpatched iPhones to a WebKit-to-kernel exploit chain that steals device data and wallet seeds.