Security Scanning
Every module submitted through Studio undergoes automated security scanning prior to persistent storage. This automated gate ensures that buyers receive verified, policy-compliant components and maintains marketplace integrity.
Upload Verification Lifecycle
When you submit in Studio, Code SCE creates an isolated staging environment and runs the multi-scanner pipeline:
- Asset Validation: Verifies that visual previews are valid images (
.png,.jpg,.jpeg,.gif,.webp,.svg), the README is valid markdown, and no prohibited executables or raw ZIP archives are present. - Analysis Execution: Scanners execute concurrently across code demos, text documentation, and visual screenshots.
- Policy Evaluation: The pipeline aggregates scanner verdicts into an overall score and categorical decisions: published, hold, or reject.
- Storage or Cleanup: If the submission passes or is held, assets are stored in Cloudflare R2 and recorded in PostgreSQL. If rejected, files are instantly wiped from disk and an explanatory notification is dispatched to the author.
Scanner Modules
1. Static Analysis & Code Quality
| Scanner | Purpose |
|---|---|
| Semgrep | Detects insecure coding patterns, prototype pollution, dangerous DOM sinks, and injection vulnerabilities. |
| ESLint | Enforces JavaScript/TypeScript correctness, syntax integrity, and best practices. |
| Dependency Audit | Scans embedded dependencies for known CVEs and vulnerable packages. |
| Code Duplication | Detects excessive internal code cloning and boilerplate repetition. |
2. Policy & Content Moderation
| Scanner | Purpose |
|---|---|
| Environment Detector | Enforces frontend-only modules. Uploads containing server-side runtimes (e.g. Node.js backend listeners, arbitrary child processes) are automatically rejected (backend_module_rejected). |
| Keyword Filter | Inspects text metadata and documentation for prohibited, malicious, or abusive keywords (content_rejected). |
| NSFW Image Moderation | Analyzes uploaded screenshots and visual proofs to ensure visual content is free from explicit or adult imagery (adult_content_rejected). |
3. Simhash & Fingerprint Deduplication
To prevent spam and listing plagiarism, the platform computes Simhash & content fingerprints for uploaded assets:
- Exact duplicates: Identical asset hashes already registered on the platform are blocked.
- Near-duplicates: High Jaccard similarity (≥ 85%) against existing listings triggers a hold status for manual review rather than automatic publishing.
Decision Outcomes
┌─────────── Reject (Files purged, 422 error + notification)
│
Submission ──▶ Pipeline ─┼─────────── Hold (Stored as Draft for manual review)
│
└─────────── Pass (Published live or saved as Draft per author choice)✅ Published (Pass)
The upload satisfies all security thresholds with no policy flags. If the author selected "Save & Finish", the listing goes live immediately on the marketplace.
⏸️ Hold (Manual Review)
The submission contains borderline signals (e.g., high similarity to an existing listing, minor accessibility flags, or unrecognized structures). The module is safely saved as a private draft under the author's account pending human moderator review.
❌ Rejected
The upload violates core platform security rules (such as backend code execution, prohibited keywords, or NSFW imagery).
- Files are immediately discarded from staging and are never written to object storage.
- An HTTP
422 Unprocessable Entityresponse is returned with the exact error code (backend_module_rejected,content_rejected,adult_content_rejected, orsecurity_rejected). - An in-app notification with the rejection reason is sent to the author's dashboard.
Rejections are Actionable
A rejection does not penalize your account. Simply address the flagged issue — such as replacing an invalid screenshot or removing server-side code — and resubmit.
Next Step
Learn how your listing is displayed to developers: Publish a Module →.

