• Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
catalloc

catalloc

catnip

Public
Open source Discord bot template built for Val Town
Like
catnip
Home
Code
13
discord
13
services
13
test
2
.env.example
.gitignore
.vtignore
AGENTS.md
CHANGELOG.md
CONTRIBUTING.md
LICENSE
README.md
SECURITY.md
deno.json
Connections
Environment variables
8
Branches
1
Pull requests
Remixes
History
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
SECURITY.md
Code
/
SECURITY.md
Search
3/11/2026
Viewing readonly version of main branch: v304
View latest version
SECURITY.md

Security Policy

Reporting a Vulnerability

If you discover a security vulnerability in Catnip, please report it responsibly:

  1. Do not open a public GitHub issue
  2. Email catalloc (see GitHub profile) with a description of the vulnerability
  3. Include steps to reproduce if possible

You should receive an acknowledgment within 48 hours. Fixes for confirmed vulnerabilities will be released as soon as practical.

Security Practices

Catnip implements the following security measures:

  • Ed25519 signature verification on all Discord interactions
  • HMAC-SHA256 state tokens with 10-minute expiry for OAuth2 CSRF protection
  • Timing-safe comparisons for all secret/token validation (prevents timing attacks)
  • Parameterized SQL queries throughout the KV layer (prevents injection)
  • Mention sanitization to prevent @everyone/@here abuse
  • Content-Security-Policy, X-Frame-Options, and X-Content-Type-Options headers on HTML pages
  • Explicit null defaults for optional secrets — features fail loudly instead of operating with empty credentials
  • Rate limiting on Patreon webhooks and per-user command cooldowns
  • Exactly-once delivery for cron jobs via atomic claimDelete() operations
  • Retry with exponential backoff for Discord API calls, respecting 429 Retry-After
  • 30-second request timeouts on all outbound HTTP calls
  • Guild allowlist support via ALLOWED_GUILD_IDS

Environment Variables

All secrets are read from environment variables at runtime — nothing is hardcoded. See .env.example for the full list. Required variables cause the bot to fail at startup if missing.

FeaturesVersion controlCode intelligenceCLIMCP
Use cases
TeamsAI agentsSlackGTM
DocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
AboutAlternativesPricingBlogNewsletterCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Open Source Pledge
Terms of usePrivacy policyAbuse contact
© 2026 Val Town, Inc.