Stack Preferences
Set your preferred programming languages and frameworks to customize your training experience. SecureCodingHub automatically shows challenges in your preferred stack.
Setting Your Preferences
When you first visit the platform, a 3-step wizard guides you through selecting your preferred languages and frameworks:
| Step | Selection | Options |
|---|---|---|
| Step 1 | Backend Language | JavaScript, TypeScript, Python, Java, C#, PHP, Go |
| Step 2 | Frontend Framework | React (TS/JS), Vue (TS/JS), Angular (TS/JS) |
| Step 3 | Mobile Platform | Swift (iOS), Kotlin (Android) |
How Preferences Work
Each topic in SecureCodingHub has a stackType that maps to one of your preference categories. When you open a challenge, the platform automatically selects the language matching your preferences.
| Stack Type | Mapped Preference | Example Topics |
|---|---|---|
| Backend | Your backend language preference | SQL Injection, SSRF, Command Injection |
| Frontend | Your frontend framework preference | XSS, DOM Clobbering, Prototype Pollution |
| Mobile | Your mobile platform preference | Insecure Storage, WebView Injection, Certificate Pinning |
The correct language is shown by default when you open a challenge. You can always switch to another language using the language selector within any challenge.
Changing Preferences
You can update your preferences at any time from the settings page. Navigate to your profile settings and select "Stack Preferences" to re-open the wizard. Changes take effect immediately across all challenges and topics.
For Admins
Preferences are stored per user. Admins cannot set preferences for learners — each developer chooses their own stack. This ensures that every team member trains in the language they actually work with day-to-day.
Why Stack Matters
A TypeScript developer reading a PHP challenge spends most of their attention parsing unfamiliar syntax instead of looking for the vulnerability. The cognitive load is real and the time cost is real. Stack preferences exist so the language used to teach a concept does not become a barrier to learning the concept. When the syntax is fluent, your eye goes straight to the trust boundary and the unsafe primitive. That is the muscle memory you want to build. A challenge in a language you only half-read trains you in the wrong direction: you become an averagely-good debugger of unfamiliar code, not a confident reviewer of your own.
This is also why preferences are per-user, not per-organization. A team admin cannot force a Python engineer to do Java challenges. Each developer should train in the stack they will be reviewing, shipping, and on-calling for. See Practice Mode for how the selected language drives the default snippet shown in any challenge.
When to Broaden Your Stack Settings
Stack preferences are not permanent. Full-stack engineers who genuinely move between backend and frontend should pick their primary backend and frontend, then use the in-challenge language selector to switch on demand. Engineers learning a new language for an upcoming project are the other common case for broadening: spend a few weeks training in the new stack to build review fluency before the first pull request lands. You can switch back at any time from settings.
A specific case worth flagging is the senior or staff engineer who reviews pull requests across multiple stacks. Picking a single backend language hides the cross-language patterns that appear in API and infrastructure-adjacent vulnerabilities. Rotating preferences quarterly is a reasonable habit for that role.
How Stack Interacts With Team Assignments
When an Org Admin creates an assignment in Quick Start, they pick a category, topic, or scenario. They do not pick a language. Each assigned learner sees the assigned content in the language matching their own stack preferences. A single "OWASP Web Top 10" assignment can land as Python challenges for the backend team, React challenges for the frontend team, and Swift challenges for the iOS team. That is the intended design: one assignment, many stacks, consistent coverage. Admins should not try to work around it by creating duplicate per-language assignments.