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.
Skipping a step
Every wizard step has a Skip button next to its primary action. Skipping does not abandon the wizard — it applies a sensible default for that step and lets you keep going. The defaults are:
- Backend:
JavaScript - Frontend:
React (TypeScript) - Mobile:
Kotlin (Android)
Skip is the right choice when a step does not apply to you today — for example, a frontend engineer skipping the backend step to take the default. You can come back later and override the default through the same wizard.
Changing Preferences
The stack indicator chip on the top bar (showing your selected stack icons) re-opens the wizard on click — that is the everyday way to update preferences. Changes take effect immediately across all challenges and topics. Preferences also live on your profile under Stack Preferences, which is useful when you want to inspect what is set without re-launching the picker.
When a topic does not exist in your language
Not every challenge ships in every language yet. When you open a topic whose author has not yet provided a snippet for your preferred language, the platform falls back through a deterministic chain: your stack preference for that topic's area, then the topic's own author-defined default, then JavaScript, then the first available language. You will see the language label change in the challenge header so the fallback is never silent — but you will not see a "topic not available" screen.
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.