{"slug":"full-stack-developer","snapshot":{"role":"fullstack","label":"Full-Stack Developer","degree":[{"count":1754,"share":58,"value":"none_mentioned"},{"count":786,"share":26,"value":"required"},{"count":372,"share":12.3,"value":"or_equivalent"},{"count":110,"share":3.6,"value":"preferred"}],"salary":{"markets":[{"n":1196,"p25":165000,"p75":226000,"median":200000,"country":"US","coverage":67.8,"currency":"USD","medianMax":226000,"medianMin":165000,"bySeniority":[{"n":34,"p25":136000,"p75":176000,"level":"mid","median":150000},{"n":431,"p25":174000,"p75":212000,"level":"senior","median":195000},{"n":227,"p25":205000,"p75":260000,"level":"staff","median":228000}]},{"n":91,"p25":139000,"p75":189000,"median":160000,"country":"CA","coverage":40.1,"currency":"CAD","medianMax":183000,"medianMin":136000,"bySeniority":[{"n":37,"p25":147000,"p75":187000,"level":"senior","median":165000}]},{"n":31,"p25":88000,"p75":119000,"median":103000,"country":"GB","coverage":16.1,"currency":"GBP","medianMax":105000,"medianMin":85000,"bySeniority":[]}],"coverage":48.1,"minSample":30},"skills":[{"slug":"react","label":"React","share":72.2,"margin":1.6,"category":"framework","requiredShare":63},{"slug":"typescript","label":"TypeScript","share":64,"margin":1.7,"category":"language","requiredShare":57.2},{"slug":"sql","label":"SQL / databases","share":61.6,"margin":1.7,"category":"backend","requiredShare":50.8},{"slug":"python","label":"Python","share":50.6,"margin":1.8,"category":"backend","requiredShare":42.8},{"slug":"aws","label":"AWS","share":41.7,"margin":1.8,"category":"cloud","requiredShare":30.9},{"slug":"ci-cd","label":"CI/CD","share":36.4,"margin":1.7,"category":"practice","requiredShare":28.3},{"slug":"ai-tools","label":"AI coding tools","share":36.1,"margin":1.7,"category":"ai","requiredShare":33.4},{"slug":"javascript","label":"JavaScript","share":34.5,"margin":1.7,"category":"language","requiredShare":30.2},{"slug":"llm-apps","label":"Building LLM features","share":33,"margin":1.7,"category":"ai","requiredShare":27},{"slug":"code-review","label":"Code review","share":32.7,"margin":1.7,"category":"practice","requiredShare":32.4},{"slug":"node","label":"Node.js","share":32.4,"margin":1.7,"category":"backend","requiredShare":28.4},{"slug":"mentoring","label":"Mentoring","share":30.8,"margin":1.6,"category":"practice","requiredShare":29.6},{"slug":"docker","label":"Docker / containers","share":29.2,"margin":1.6,"category":"cloud","requiredShare":18.5},{"slug":"testing","label":"Automated testing","share":28.5,"margin":1.6,"category":"testing","requiredShare":27.3},{"slug":"java","label":"Java / Kotlin (backend)","share":27.6,"margin":1.6,"category":"backend","requiredShare":22.7},{"slug":"observability","label":"Monitoring & analytics","share":27.5,"margin":1.6,"category":"quality","requiredShare":22.9},{"slug":"kubernetes","label":"Kubernetes","share":26,"margin":1.6,"category":"cloud","requiredShare":15.7},{"slug":"rest","label":"REST APIs","share":23.4,"margin":1.5,"category":"api","requiredShare":21.1},{"slug":"system-design","label":"Architecture / system design","share":22.3,"margin":1.5,"category":"practice","requiredShare":21.3},{"slug":"messaging","label":"Message queues / event streaming","share":20.6,"margin":1.4,"category":"backend","requiredShare":13},{"slug":"git","label":"Git","share":19.5,"margin":1.4,"category":"practice","requiredShare":15.7},{"slug":"web-performance","label":"Web performance","share":19.3,"margin":1.4,"category":"quality","requiredShare":16},{"slug":"go","label":"Go","share":19.3,"margin":1.4,"category":"backend","requiredShare":14.8},{"slug":"ux-collab","label":"Working with designers / UX","share":18.2,"margin":1.4,"category":"design","requiredShare":17.9},{"slug":"agile","label":"Agile / Scrum","share":17.9,"margin":1.4,"category":"practice","requiredShare":16.2},{"slug":"nosql","label":"NoSQL (MongoDB, DynamoDB…)","share":17.3,"margin":1.3,"category":"backend","requiredShare":13.7},{"slug":"api-design","label":"API design","share":16.9,"margin":1.3,"category":"api","requiredShare":14.9},{"slug":"gcp","label":"Google Cloud","share":16.6,"margin":1.3,"category":"cloud","requiredShare":11.9},{"slug":"microservices","label":"Microservices","share":16.1,"margin":1.3,"category":"backend","requiredShare":13.2},{"slug":"distributed-systems","label":"Distributed systems","share":16,"margin":1.3,"category":"backend","requiredShare":13.6},{"slug":"iac","label":"Infrastructure as code (Terraform)","share":16,"margin":1.3,"category":"cloud","requiredShare":9},{"slug":"angular","label":"Angular","share":14.6,"margin":1.3,"category":"framework","requiredShare":11.4},{"slug":"azure","label":"Azure","share":14.6,"margin":1.3,"category":"cloud","requiredShare":10.8},{"slug":"nextjs","label":"Next.js","share":14.1,"margin":1.2,"category":"meta-framework","requiredShare":11.6},{"slug":"data-pipelines","label":"Data pipelines (Spark, Airflow, ETL)","share":13.1,"margin":1.2,"category":"backend","requiredShare":9.9},{"slug":"graphql","label":"GraphQL","share":12.9,"margin":1.2,"category":"api","requiredShare":9.4},{"slug":"caching","label":"Redis / caching","share":12.5,"margin":1.2,"category":"backend","requiredShare":9.6},{"slug":"dotnet","label":".NET / C#","share":12.4,"margin":1.2,"category":"backend","requiredShare":9.5},{"slug":"css","label":"CSS","share":11.1,"margin":1.1,"category":"language","requiredShare":10.3},{"slug":"vue","label":"Vue","share":10.9,"margin":1.1,"category":"framework","requiredShare":9.8},{"slug":"html","label":"HTML","share":8.2,"margin":1,"category":"language","requiredShare":7.6},{"slug":"websockets","label":"WebSockets / real-time","share":7.5,"margin":0.9,"category":"api","requiredShare":5.4},{"slug":"ruby","label":"Ruby / Rails","share":7.4,"margin":0.9,"category":"backend","requiredShare":6.6},{"slug":"auth","label":"Authentication (OAuth, SSO)","share":7.4,"margin":0.9,"category":"backend","requiredShare":5.3},{"slug":"responsive-design","label":"Responsive design","share":7,"margin":0.9,"category":"design","requiredShare":6.8},{"slug":"accessibility","label":"Accessibility (WCAG)","share":6.9,"margin":0.9,"category":"quality","requiredShare":6.2},{"slug":"e2e","label":"End-to-end testing (Cypress, Playwright)","share":6.9,"margin":0.9,"category":"testing","requiredShare":5.9},{"slug":"react-native","label":"React Native","share":6.7,"margin":0.9,"category":"mobile","requiredShare":5.4},{"slug":"design-systems","label":"Design systems","share":6.7,"margin":0.9,"category":"design","requiredShare":5},{"slug":"state-management","label":"State management","share":6.3,"margin":0.9,"category":"state","requiredShare":5.9},{"slug":"linux","label":"Linux","share":6.2,"margin":0.9,"category":"backend","requiredShare":3.1},{"slug":"serverless","label":"Serverless","share":5.6,"margin":0.8,"category":"cloud","requiredShare":4.1},{"slug":"cpp","label":"C++","share":5.4,"margin":0.8,"category":"backend","requiredShare":4.8},{"slug":"search","label":"Search (Elasticsearch)","share":5,"margin":0.8,"category":"backend","requiredShare":2.8},{"slug":"rust","label":"Rust","share":4.9,"margin":0.8,"category":"backend","requiredShare":3.9},{"slug":"data-viz","label":"Data visualisation","share":4.4,"margin":0.7,"category":"graphics","requiredShare":3},{"slug":"web-security","label":"Web security","share":4.2,"margin":0.7,"category":"quality","requiredShare":3.3},{"slug":"tailwind","label":"Tailwind CSS","share":4.2,"margin":0.7,"category":"styling","requiredShare":3},{"slug":"jest","label":"Jest / Vitest","share":3.5,"margin":0.7,"category":"testing","requiredShare":2.9},{"slug":"edge","label":"Vercel / Netlify / edge","share":3.4,"margin":0.6,"category":"cloud","requiredShare":2.4},{"slug":"concurrency","label":"Concurrency / multithreading","share":3.2,"margin":0.6,"category":"backend","requiredShare":3},{"slug":"scala","label":"Scala","share":3.2,"margin":0.6,"category":"backend","requiredShare":1.2},{"slug":"redux","label":"Redux","share":3.2,"margin":0.6,"category":"state","requiredShare":2.8},{"slug":"php","label":"PHP","share":3,"margin":0.6,"category":"backend","requiredShare":2.6},{"slug":"component-libraries","label":"Component libraries (MUI, Radix…)","share":2.7,"margin":0.6,"category":"styling","requiredShare":2.2},{"slug":"figma","label":"Figma","share":2,"margin":0.5,"category":"design","requiredShare":1.3},{"slug":"tanstack-query","label":"TanStack Query","share":1.9,"margin":0.5,"category":"state","requiredShare":1.2},{"slug":"monorepo","label":"Monorepos (Nx, Turborepo)","share":1.7,"margin":0.5,"category":"build","requiredShare":1},{"slug":"webgl","label":"WebGL / 3D / Canvas","share":1.6,"margin":0.4,"category":"graphics","requiredShare":0.5},{"slug":"vite","label":"Vite","share":1.5,"margin":0.4,"category":"build","requiredShare":1.1},{"slug":"micro-frontends","label":"Micro-frontends","share":1.3,"margin":0.4,"category":"meta-framework","requiredShare":1.1},{"slug":"seo","label":"SEO","share":1.2,"margin":0.4,"category":"quality","requiredShare":0.9},{"slug":"testing-library","label":"Testing Library","share":1.1,"margin":0.4,"category":"testing","requiredShare":0.9},{"slug":"ssr","label":"Server-side rendering","share":1.1,"margin":0.4,"category":"meta-framework","requiredShare":0.8},{"slug":"svelte","label":"Svelte","share":1,"margin":0.4,"category":"framework","requiredShare":0.9},{"slug":"flutter","label":"Flutter","share":1,"margin":0.3,"category":"mobile","requiredShare":0.7},{"slug":"spa","label":"Single-page apps","share":1,"margin":0.3,"category":"meta-framework","requiredShare":0.7},{"slug":"webpack","label":"Webpack","share":1,"margin":0.3,"category":"build","requiredShare":0.8},{"slug":"zustand","label":"Zustand","share":1,"margin":0.3,"category":"state","requiredShare":0.9},{"slug":"i18n","label":"Internationalisation","share":1,"margin":0.3,"category":"quality","requiredShare":0.6},{"slug":"elixir","label":"Elixir / Erlang","share":0.9,"margin":0.3,"category":"backend","requiredShare":0.7},{"slug":"sass","label":"Sass / SCSS","share":0.9,"margin":0.3,"category":"styling","requiredShare":0.8},{"slug":"storybook","label":"Storybook","share":0.8,"margin":0.3,"category":"testing","requiredShare":0.4},{"slug":"browser-internals","label":"Browser internals / DOM","share":0.7,"margin":0.3,"category":"quality","requiredShare":0.7},{"slug":"trpc","label":"tRPC","share":0.7,"margin":0.3,"category":"api","requiredShare":0.5},{"slug":"electron","label":"Electron / desktop","share":0.7,"margin":0.3,"category":"mobile","requiredShare":0.5},{"slug":"ember","label":"Ember.js","share":0.6,"margin":0.3,"category":"framework","requiredShare":0.5},{"slug":"css-in-js","label":"CSS-in-JS","share":0.6,"margin":0.3,"category":"styling","requiredShare":0.5},{"slug":"jquery","label":"jQuery","share":0.6,"margin":0.3,"category":"framework","requiredShare":0.5},{"slug":"nuxt","label":"Nuxt","share":0.5,"margin":0.2,"category":"meta-framework","requiredShare":0.5},{"slug":"pwa","label":"Progressive web apps","share":0.5,"margin":0.2,"category":"meta-framework","requiredShare":0.4},{"slug":"remix","label":"Remix","share":0.4,"margin":0.2,"category":"meta-framework","requiredShare":0.1},{"slug":"mobx","label":"MobX","share":0.4,"margin":0.2,"category":"state","requiredShare":0.4},{"slug":"wasm","label":"WebAssembly","share":0.4,"margin":0.2,"category":"graphics","requiredShare":0.1},{"slug":"web-components","label":"Web Components","share":0.3,"margin":0.2,"category":"framework","requiredShare":0.2},{"slug":"animation","label":"Animation","share":0.3,"margin":0.2,"category":"design","requiredShare":0.2},{"slug":"bundlers","label":"Other bundlers (esbuild, Rollup…)","share":0.3,"margin":0.2,"category":"build","requiredShare":0.2},{"slug":"rxjs","label":"RxJS","share":0.2,"margin":0.2,"category":"state","requiredShare":0.2},{"slug":"css-modules","label":"CSS Modules","share":0.2,"margin":0.2,"category":"styling","requiredShare":0.2},{"slug":"pinia","label":"Pinia / Vuex","share":0.2,"margin":0.1,"category":"state","requiredShare":0.1},{"slug":"astro","label":"Astro","share":0.1,"margin":0.1,"category":"meta-framework","requiredShare":0},{"slug":"gatsby","label":"Gatsby","share":0.1,"margin":0.1,"category":"meta-framework","requiredShare":0},{"slug":"solid","label":"SolidJS","share":0,"margin":0.1,"category":"framework","requiredShare":0}],"sources":["Greenhouse","Lever","Ashby"],"postings":{"raw":3874,"unique":3022,"companies":1471},"countries":[{"count":1664,"share":55.1,"value":"US"},{"count":227,"share":7.5,"value":"CA"},{"count":221,"share":7.3,"value":"IN"},{"count":192,"share":6.4,"value":"GB"},{"count":101,"share":3.3,"value":"unknown"},{"count":96,"share":3.2,"value":"BR"},{"count":92,"share":3,"value":"FR"},{"count":84,"share":2.8,"value":"DE"},{"count":69,"share":2.3,"value":"PL"},{"count":66,"share":2.2,"value":"SG"},{"count":59,"share":2,"value":"ES"},{"count":56,"share":1.9,"value":"MX"}],"crawledAt":"2026-11-13","seniority":[{"count":1193,"share":39.5,"value":"none"},{"count":1151,"share":38.1,"value":"senior"},{"count":386,"share":12.8,"value":"staff"},{"count":99,"share":3.3,"value":"mid"},{"count":83,"share":2.7,"value":"lead"},{"count":68,"share":2.3,"value":"junior"},{"count":42,"share":1.4,"value":"intern"}],"workplace":[{"count":1182,"share":39.1,"value":"none"},{"count":720,"share":23.8,"value":"remote"},{"count":653,"share":21.6,"value":"hybrid"},{"count":467,"share":15.5,"value":"onsite"}],"experience":{"median":5,"buckets":[{"count":1236,"share":40.9,"value":"none"},{"count":475,"share":15.7,"value":"5"},{"count":287,"share":9.5,"value":"3"},{"count":245,"share":8.1,"value":"8+"},{"count":188,"share":6.2,"value":"2"},{"count":186,"share":6.2,"value":"4"},{"count":144,"share":4.8,"value":"6"},{"count":123,"share":4.1,"value":"7"},{"count":122,"share":4,"value":"1"},{"count":16,"share":0.5,"value":"0"}],"statedShare":59.1},"generatedAt":"2026-11-13","extractVersion":"skills-v0.8"},"validation":{"labelled":200,"salaryAudit":{"checked":120,"correct":117},"skillRecall":98,"rolePrecision":85,"skillPrecision":98},"assessmentRole":"fullstack","stack":{"path":"/careers/full-stack-developer/tech-stack","core":{"label":"React","share":72.1},"picks":[{"label":"TypeScript","share":77.4},{"label":"SQL / databases","share":64.9},{"label":"Python","share":49.4},{"label":"AWS","share":44.1},{"label":"Docker / containers","share":27.8},{"label":"REST APIs","share":24.1},{"label":"Next.js","share":19.2}],"pickMin":15},"license":{"name":"CC BY 4.0","url":"https://creativecommons.org/licenses/by/4.0/","credit":"Coursecrit, https://coursecrit.com/careers/full-stack-developer","attributions":["Company list: LastRound AI ATS Company Directory (https://datahub.io/lastroundai-hiring-data/lastroundai-hiring-data/ats-directory), CC BY 4.0","Job postings: public job boards on Greenhouse, Lever and Ashby. Only aggregate counts are published, never posting text."]}}