A community-curated bank of front-end engineering interview questions, maintained by the H5BP (HTML5 Boilerplate) project. The repository ships an exhaustive question list organized by topic, a published Eleventy website that renders the same content for browsing, and 35 community translations of the master question set. There are no answers, no scoring rubrics, and no automation — the value of the project is the questions themselves and the cross-language reach of the maintained translations.
This guide explains how candidates, interviewers, and translators work with the project: where to read the questions, how to build the site locally if you want a customized copy, the categories that organize the bank, and how to contribute new questions or fix translations.
1. Quick Start
The fastest way to use this project is to read it. You do not need Node.js, you do not need to clone anything, and you do not need to run a build. Three browse paths are supported, in order of friction:
- Read the published site — h5bp.org/Front-end-Developer-Interview-Questions/ renders every category and every translation in a styled, navigable layout.
- Read the GitHub README — github.com/h5bp/Front-end-Developer-Interview-Questions shows the master English question list with anchored sections.
- Read the raw markdown — each category is a single markdown file under
src/questions/(for example,src/questions/javascript-questions.md), and each translation is a self-contained README undersrc/translations/<language>/README.md.
Tip
If you only want the questions, stop at step 1. The build pipeline, the Eleventy config, and the Node toolchain exist purely to render the same markdown into a static site. Reading the markdown directly gets you everything that matters.
What this project is
A single, curated, opinion-free question bank for front-end engineering interviews. Questions are open-ended on purpose — most have no single correct answer, and the README explicitly warns interviewers not to ask every question to one candidate. The point is to start conversations, not to grade.
| Trait | Detail |
|---|---|
| Repository owner | h5bp (HTML5 Boilerplate organization) |
| License | MIT (LICENSE.md) |
| Build system | Eleventy 2.0 (@11ty/eleventy) static site generator |
| Languages | English master + 35 translations |
| Question topics | 8 in-tree categories + 1 external (Accessibility) |
| Total English questions | ~146 across 8 in-tree categories |
| Repository size | 84 tracked files |
| Site URL | h5bp.org/Front-end-Developer-Interview-Questions/ |
Five-minute path: clone and serve locally
If you want to render the site on your own machine — to preview a translation edit, customize the styling, or share an offline copy — clone, install, and start the dev server:
git clone https://github.com/h5bp/Front-end-Developer-Interview-Questions.git
cd Front-end-Developer-Interview-Questions
npm install
npm start
[Eleventy] Writing _site/index.html from ./src/index.njk
[Eleventy] Writing _site/translations/spanish/index.html from ./src/translations/spanish/README.md
[Eleventy] Wrote 76 files in 0.84 seconds (v2.0.1)
[Eleventy] Watching…
[Eleventy] Server at http://localhost:9090/Front-end-Developer-Interview-Questions/
Open http://localhost:9090/Front-end-Developer-Interview-Questions/ in a browser. Eleventy will rebuild on every save under src/.
Note
The
npm startcommand uses port9090and serves under the path prefix/Front-end-Developer-Interview-Questions/to mirror the production site. The path prefix is set by the--pathprefixflag inpackage.json'sbuildscript and the--servedefaults instart.
What to do next
- Candidate preparing for an interview — Skim
src/questions/general-questions.mdfirst, then drill into the topics you are weakest on. See the Core Usage section for a category-by-category roadmap. - Interviewer building a question bank — Pick 5–8 questions across 2–3 categories per candidate. Never ask all questions to one person; the README is explicit about this.
- Translator — Compare the English
src/translations/_template/README.mdagainst your target language's existing translation, then open a PR. See Common Tasks recipe 3. - Contributor adding a question — Edit the relevant
src/questions/<topic>-questions.md, follow the existing question style (open-ended, no hint at an answer), and open a PR.
2. Installation
Local installation is only required if you want to run the Eleventy site locally, contribute changes, or render a customized PDF/static export. For reading questions, skip this section.
Prerequisites
| Component | Version | Source |
|---|---|---|
| Node.js | >=14 (per the bundled @11ty/eleventy engine field) |
nodejs.org |
| npm | Bundled with Node.js | — |
| Git | Any modern version | git-scm.com |
Important
The lockfile in this repo (
package-lock.json, lockfile version 3) pins@11ty/eleventy@2.0.1along with its transitive@babel/parser@7.13.11and other older sub-dependencies. Issue #936 tracks an audit of these tooling dependencies. Ifnpm installcomplains about deprecation warnings or peer-dependency mismatches, that is a known state of the project rather than a bug in your environment.
Clone and install
git clone https://github.com/h5bp/Front-end-Developer-Interview-Questions.git
cd Front-end-Developer-Interview-Questions
npm install
The install pulls roughly 600 transitive dev-dependencies (Eleventy plus its template engines: nunjucks, liquidjs, pug, markdown-it, handlebars, mustache, etc.). All of them are devDependencies — there are no runtime dependencies because nothing runs at request time; the output is a fully static site.
Verify the build
npm run build
[Eleventy] Writing _site/index.html from ./src/index.njk
[Eleventy] Writing _site/about.html from ./src/about.njk
[Eleventy] Writing _site/translations.html from ./src/translations.njk
[Eleventy] Writing _site/sitemap.xml from ./src/sitemap.xml.njk
[Eleventy] Writing _site/404.html from ./src/404.njk
[Eleventy] Writing _site/questions/general-questions/index.html from ./src/questions/general-questions.md
[Eleventy] Writing _site/questions/html-questions/index.html from ./src/questions/html-questions.md
[Eleventy] Writing _site/questions/css-questions/index.html from ./src/questions/css-questions.md
[Eleventy] Writing _site/questions/javascript-questions/index.html from ./src/questions/javascript-questions.md
[Eleventy] Writing _site/questions/testing-questions/index.html from ./src/questions/testing-questions.md
[Eleventy] Writing _site/questions/performance-questions/index.html from ./src/questions/performance-questions.md
[Eleventy] Writing _site/questions/network-questions/index.html from ./src/questions/network-questions.md
[Eleventy] Writing _site/questions/coding-questions/index.html from ./src/questions/coding-questions.md
[Eleventy] Writing _site/questions/fun-questions/index.html from ./src/questions/fun-questions.md
[Eleventy] Writing _site/translations/arabic/index.html from ./src/translations/arabic/README.md
…
[Eleventy] Wrote 76 files in 0.84 seconds (v2.0.1)
Open _site/index.html directly in a browser, or run npm start for hot-reload during development.
Warning
Do not check in the
_site/directory. It is the build output and is intentionally excluded from the repository (.gitignore). Onlysrc/content is canonical.
Update the contributors list
The README and the about page show a contributors block generated by the all-contributors-cli. The repository keeps the data in .all-contributorsrc (a JSON file at the repo root).
npm run contributors:add
This launches an interactive prompt that asks for the GitHub username, the contribution type (doc, translation, infra, review, question, talk, maintenance, ideas), and updates .all-contributorsrc. Then sync into the data directory:
npm run contributors:generate
The contributors:generate script regenerates the contributors badge and copies .all-contributorsrc to src/_data/contributors.json so Eleventy can render it.
Tip
You only run the
contributors:*scripts if you are a maintainer merging a PR. For ordinary edits or translations, skip this. New contributors get added by maintainers as part of merging a PR.
3. Configuration
This is a documentation/curation repo with a thin static-site shell. There are very few user-facing settings, and most of what looks like configuration is content. The handful of switches that matter are listed below; full operator-level detail lives in the Administrator & Developer Guide.
Site identity (src/_data/site.json)
The site title, description, language, and Twitter handle are surfaced from a single JSON file:
{
"title": "Front-end Developer Interview Questions",
"url": "https://h5bp.org/Front-end-Developer-Interview-Questions/",
"description": "A list of helpful front-end related questions you can use to interview potential candidates, test yourself or completely ignore.",
"keywords": "front-end, interview questions, css questions, js questions, html questions, performance questions, interview test",
"language": "en_US",
"twitter": "@h5bp"
}
If you fork the repo to host your own customized question bank, this is the file to edit first.
Category list (src/_data/questions.json)
The category navigation comes from src/_data/questions.json. Every entry maps an abbreviation, a display title, and a URL. Set external: true to link off-site (this is how the Accessibility category is rendered as a link to Scott O'Hara's external bank).
Note
Editing
questions.jsononly changes the navigation. To add a new category you also need to create the matchingsrc/questions/<slug>-questions.mdfile. Removing an entry fromquestions.jsondoes not delete the markdown — it just hides the category from the navigation.
Translation list (src/_data/translations.json)
The languages page (src/translations.njk) iterates over src/_data/translations.json. Each entry is a language display name and a url pointing at the folder under src/translations/. Adding a new language entry here without creating the corresponding src/translations/<language>/README.md will produce a build that renders a navigation link to a non-existent page.
Path prefix and dev port (package.json scripts)
Two flags are baked into the npm scripts:
| Script | Effect |
|---|---|
npm run build |
Runs Eleventy with --config=config/eleventy.config.js --pathprefix='Front-end-Developer-Interview-Questions/'. Output lands in _site/. |
npm start |
Runs Eleventy with --serve --port 9090 --quiet. Hot reload at http://localhost:9090/Front-end-Developer-Interview-Questions/. |
If you self-host under a different path, edit the --pathprefix flag in package.json to match.
For the full Eleventy config — minifiers, markdown filters, syntax highlighting setup — see the Administrator & Developer Guide section on Configuration Reference.
4. Core Usage
The bank groups questions into nine working categories plus one external link. Counts below reflect the English master template (src/translations/_template/README.md) and the per-category markdown files in src/questions/. Translations may be ahead or behind the master at any given moment — that gap is what the maintenance issues like #812, #827, #828, #834, #840, and #853 track.
Question categories
| # | Category | Abbreviation | Source file | English question count | Type |
|---|---|---|---|---|---|
| 1 | General Questions | General | src/questions/general-questions.md |
~30 | In-tree |
| 2 | HTML Questions | HTML | src/questions/html-questions.md |
~13 | In-tree |
| 3 | CSS Questions | CSS | src/questions/css-questions.md |
~35 | In-tree |
| 4 | JavaScript Questions | JavaScript | src/questions/javascript-questions.md |
~44 | In-tree |
| 5 | Accessibility Questions | A11y | external | external bank | External |
| 6 | Testing Questions | Testing | src/questions/testing-questions.md |
5 | In-tree |
| 7 | Performance Questions | Performance | src/questions/performance-questions.md |
3 | In-tree |
| 8 | Network Questions | Network | src/questions/network-questions.md |
8 | In-tree |
| 9 | Coding Questions | Coding | src/questions/coding-questions.md |
4 | In-tree |
| 10 | Fun Questions | Fun | src/questions/fun-questions.md |
4 | In-tree |
The Accessibility entry deliberately points off-site to Scott O'Hara's Accessibility Interview Questions — the H5BP project does not duplicate that work.
Note
Question counts are point-in-time and grow as the project accepts contributions. Use the published site or the raw markdown for the live numbers; the table above reflects the state at commit
33f5498.
What each category covers
General Questions
Open-ended career and process questions that probe how a candidate thinks rather than what they have memorized. Examples from the master template: "What did you learn yesterday/this week?", "What is a recent technical challenge you experienced and how did you solve it?", "Can you describe the difference between progressive enhancement and graceful degradation?", "What does CORS stand for and what issue does it address?", and "Describe the difference between SSR and CSR. Discuss the pros and cons. Are you familiar with static rendering? Rehydration?".
Use this category for the first 10–15 minutes of an interview to settle the candidate and gauge breadth.
HTML Questions
Document fundamentals that separate someone who has shipped HTML from someone who has only read about it. Examples: "What does a doctype do?", "Describe the difference between <script>, <script async> and <script defer>", "What is progressive rendering?", "Why you would use a srcset attribute in an image tag?", and "What is the difference between canvas and svg?".
CSS Questions
The largest in-tree category at ~35 questions. Covers selector specificity, the box model, layout (floats, flex, grid), stacking contexts, normalization vs reset, preprocessors, retina graphics, responsive vs mobile-first, and common gotchas. Examples: "What is CSS selector specificity and how does it work?", "Describe BFC (Block Formatting Context) and how it works", "What does * { box-sizing: border-box; } do?", and "What is the difference between CSS Grid and Flexbox? When would you use one over the other?".
JavaScript Questions
The deepest category at ~44 questions. Spans language fundamentals (this, prototypes, closures, hoisting, == vs ===, type coercion), async (event loop, promises, sync vs async), ES6 (arrow functions, classes, destructuring, template literals, spread/rest), and patterns (currying, IIFEs, higher-order functions). Examples: "Explain how this works in JavaScript. Can you give an example of one of the ways that working with this has changed in ES6?", "What is a closure, and how/why would you use one?", "Explain Function.prototype.bind", and "What is event loop? What is the difference between call stack and task queue?".
Accessibility Questions (external)
Linked out to scottaohara.github.io/accessibility_interview_questions. The H5BP project endorses this list rather than duplicating it. If you are interviewing for an accessibility-focused role, treat that bank as the canonical resource.
Testing Questions
Five focused questions about testing practice: pros and cons of testing, tool choice, unit vs functional/integration, the purpose of style linting, and best practices.
Performance Questions
Three questions on performance work: tooling for finding bugs, ways to improve scrolling performance, and the difference between layout, painting, and compositing.
Network Questions
Eight questions on transport and HTTP semantics: serving from multiple domains, what happens when you type a URL, Long-Polling vs Websockets vs Server-Sent Events, request/response headers (Expires, Date, Age, If-Modified-..., Do Not Track, Cache-Control, Transfer-Encoding, ETag, X-Frame-Options), HTTP methods, domain pre-fetching, and CDNs.
Coding Questions
Four hands-on coding prompts: implement duplicate([1,2,3,4,5]) to return [1,2,3,4,5,1,2,3,4,5], write a FizzBuzz for loop up to 100, predict the output of two short logic-operator expressions, and write an IIFE.
Fun Questions
Four lightweight closers: a recent cool project, favourite developer-tool features, who in the front-end community inspires you, and pet projects.
Tip
The README's Note (preserved in every translation) is explicit: many of these questions are open-ended and intended to spark a discussion. The aim is to learn how a candidate thinks, not to extract a memorized answer. Phrase your follow-ups accordingly.
Browsing translations
Thirty-five translations live under src/translations/<language>/README.md. Every translation file is a self-contained markdown document that mirrors the English template's section structure (with anchors for each category).
| Language | Path | Language | Path |
|---|---|---|---|
| Arabic | src/translations/arabic/ |
Italian | src/translations/italian/ |
| Bangla (Bengali) | src/translations/bengali/ |
Japanese | src/translations/japanese/ |
| Bulgarian | src/translations/bulgarian/ |
Korean | src/translations/korean/ |
| Burmese | src/translations/burmese/ |
Latvian | src/translations/latvian/ |
| Chinese | src/translations/chinese/ |
Polish | src/translations/polish/ |
| Chinese-Traditional | src/translations/chinese-traditional/ |
Portuguese | src/translations/portuguese/ |
| Croatian | src/translations/croatian/ |
Romanian | src/translations/romanian/ |
| Czech | src/translations/czech/ |
Russian | src/translations/russian/ |
| Danish | src/translations/danish/ |
Serbian | src/translations/serbian/ |
| Dutch | src/translations/dutch/ |
Slovakian | src/translations/slovakian/ |
| Farsi | src/translations/farsi/ |
Slovenian | src/translations/slovenian/ |
| French | src/translations/french/ |
Spanish | src/translations/spanish/ |
| German | src/translations/german/ |
Swedish | src/translations/swedish/ |
| Greek | src/translations/greek/ |
Turkish | src/translations/turkish/ |
| Hebrew | src/translations/hebrew/ |
Ukrainian | src/translations/ukrainian/ |
| Hindi | src/translations/hindi/ |
Vietnamese | src/translations/vietnamese/ |
| Hungarian | src/translations/hungarian/ |
||
| Indonesian | src/translations/indonesian/ |
The src/translations/_template/README.md file is the canonical English template that translators copy when seeding a new language.
Important
Translations are community-maintained and drift behind the English master between contributions. If you spot a question in the English README that is missing from your language, that is the gap a translation PR should close. Open issues like #812 (Burmese), #827 (Italian), #828 (Japanese), #834 (Russian), and #840 (Turkish) track exactly that drift today.
5. Common Tasks
Recipe 1 — Work through a single category as a candidate
Goal: drill one weak topic before an interview.
- Pick the category — for example, JavaScript.
- Open
src/questions/javascript-questions.md(or the same anchor on the published site). - For each question, write a 2–3 minute answer in plain text. Do not look up the answer first.
- After your draft, look up the canonical answer in MDN, the spec, or a textbook. Note where you were vague.
- Group your weak answers and re-attempt them the next day.
git clone https://github.com/h5bp/Front-end-Developer-Interview-Questions.git
cd Front-end-Developer-Interview-Questions/src/questions
ls
coding-questions.md
css-questions.md
fun-questions.md
general-questions.md
html-questions.md
javascript-questions.md
network-questions.md
performance-questions.md
testing-questions.md
Tip
The questions are deliberately open-ended. Practice giving the same answer at three depths — 30 seconds, 2 minutes, 5 minutes — so you can match the interviewer's interest level.
Recipe 2 — Build a 60-minute interview from this bank
Goal: assemble a balanced question set for one candidate.
- Pick 2 General questions (5 minutes total) to open and gauge breadth.
- Pick 1 question per primary category the role requires:
- Front-end generalist: HTML + CSS + JavaScript + Network.
- CSS-heavy role: CSS (×2) + Performance + Accessibility (external bank).
- SPA/framework role: JavaScript (×2) + Network + Performance.
- Pick 1 Coding question for the live-coding portion (15–20 minutes).
- Reserve 5 minutes for one Fun question to close.
- Total: ~60 minutes, 7–8 questions.
| Slot | Time | Source |
|---|---|---|
| Opener (×2) | 5 min | General Questions |
| Topic deep dive (×3) | 30 min | HTML, CSS, JavaScript, Network, Performance, or Testing |
| Live coding | 20 min | Coding Questions |
| Closer | 5 min | Fun Questions |
Warning
The README explicitly recommends not asking every question to one candidate. Pick the smallest set that lets you assess the role's required skills, and leave room for the candidate to ask their own questions.
Recipe 3 — Contribute or update a translation
Goal: translate a missing question or sync a stale translation.
- Fork the repository on GitHub and clone your fork locally.
- Open the English template —
src/translations/_template/README.md— and your target translation:src/translations/<your-language>/README.md. - Diff the two files in your editor. Identify questions present in the English template but missing or out-of-date in your translation.
- Translate the missing/stale questions, preserving the original markdown structure (the anchor scheme
<a name='general'>, code fences, and bullet style must stay identical so that the navigation works). - Run a local build to confirm nothing broke:
npm install
npm run build
- Open the generated
_site/translations/<your-language>/index.htmlin a browser and proof the result. - Open a pull request titled
Update <Language> translationand reference any open tracking issue (for example, #834 for Russian).
git checkout -b update-russian-translation
# edit src/translations/russian/README.md
git add src/translations/russian/README.md
git commit -m "Sync Russian translation with English master"
git push origin update-russian-translation
Important
Right-to-left languages (Arabic, Hebrew, Farsi) require
rtl: truein the front-matter and the content wrapped in<div dir="rtl">blocks. Look atsrc/translations/arabic/README.mdfor the exact pattern.
Recipe 4 — Propose a new question
Goal: add a new question to an existing category.
- Open
src/questions/<category>-questions.mdfor the category you want to extend. - Append your question as a bullet, matching the existing style — open-ended, no hint at an answer, no jargon that locks out a translator.
- If your question would also be useful in the English template, add it to
src/translations/_template/README.md. - Open a PR with a short rationale: who would be asked this question and what skill it probes.
- Maintainers will discuss and merge or push back. Issue #935 ("Project Soul: Content Audit and Archiving Legacy Front-End Concepts") is the current discussion thread on what counts as a relevant question in 2026.
Tip
Before proposing, search the existing markdown for synonyms — many topics already have a question, sometimes phrased differently. Duplicates slow review.
Recipe 5 — Add a brand-new category
Goal: introduce a new top-level question topic (rare).
- Create
src/questions/<new-slug>-questions.mdwith at least 3–5 seed questions. - Add an entry to
src/_data/questions.jsonwith the abbreviation, title, URL (/questions/<new-slug>-questions/), andexternal: false. - Update the English template (
src/translations/_template/README.md) with a new section anchor that mirrors the new file. - Run
npm run buildand verify the new section appears in the navigation and the standalone page renders. - Open a PR. Expect significant discussion — categories are added rarely and only when an established topic genuinely cannot fit an existing category.
Recipe 6 — Self-host the site under a different path
Goal: publish a customized fork on your own domain.
- Fork the repository.
- Edit
package.json'sbuildscript and change--pathprefix='Front-end-Developer-Interview-Questions/'to match your hosting path (or remove it for root hosting). - Edit
src/_data/site.json'surlfield to your domain. - Run
npm run build. - Deploy
_site/to any static host (GitHub Pages, Netlify, Vercel, S3+CloudFront, plain nginx).
npm run build
# _site/ now contains a fully static, ready-to-deploy site
rsync -av _site/ user@server:/var/www/interview-questions/
6. Troubleshooting
This is a documentation/curation repo, so most "errors" you encounter are build- or content-related rather than runtime crashes.
Issue: npm install warns about deprecated packages
Cause: the project pins Eleventy 2.0.1 and a number of older transitive dependencies (notably @babel/parser@7.13.11, axios@0.18.1 via the resolutions block, and several deprecated lodash variants). Issue #936 tracks the audit.
Solution:
- Confirm
node --versionreports>=14. - Run the install with
npm install --no-audit --loglevel=errorto suppress the noise. - Do not attempt to bump
@11ty/eleventyto 3.x — the config inconfig/eleventy.config.jstargets the 2.x plugin API and the upgrade is tracked separately by the maintainers.
Prevention: wait for issue #936 to land before rebuilding the lockfile. If you must regenerate the lockfile (for example, after a security advisory), open a PR rather than committing the change locally.
Issue: Eleventy: Missing template engine for .md files
Cause: the project sets the markdown template engine to Nunjucks (markdownTemplateEngine: 'njk' in config/eleventy.config.js). If you fork and remove that line, Eleventy falls back to the default behaviour and may fail on {{ }} interpolations inside markdown.
Solution: restore the original eleventyConfig.return block in config/eleventy.config.js, including:
return {
templateFormats: ['njk', 'md', 'html'],
dir: {
input: 'src',
includes: '_includes',
data: '_data',
output: '_site'
},
markdownTemplateEngine: 'njk',
htmlTemplateEngine: 'njk',
dataTemplateEngine: 'njk',
passthroughFileCopy: true
}
Prevention: do not edit config/eleventy.config.js unless you understand the Eleventy 2.x plugin architecture. Forks that customize styling should touch only src/_includes/assets/css/.
Issue: a translation page renders blank or 404s after I added it to translations.json
Cause: entries in src/_data/translations.json are pure navigation data. They do not create pages. The actual page is rendered from src/translations/<language>/README.md. If the README does not exist, the navigation link points nowhere.
Solution:
-
Create
src/translations/<language>/README.mdfrom the template:cp src/translations/_template/README.md src/translations/<language>/README.md -
Edit the front matter to set
permalink: /translations/<language>/index.htmlandlang: <iso-code>. -
Run
npm run buildand confirm the page exists at_site/translations/<language>/index.html.
Prevention: always create the README before adding the entry to translations.json.
Issue: npm start says "address already in use" on port 9090
Cause: another process is bound to port 9090. Eleventy's dev server hard-codes the port via the --port 9090 flag in the start script.
Solution: kill the process on 9090, or run with a different port directly:
npx @11ty/eleventy --config=config/eleventy.config.js --serve --port 9091 --quiet
Prevention: if you regularly run two Eleventy projects, edit your fork's package.json to use a different port.
Issue: a translation drifts behind the English master
Cause: translations are community-maintained. Translators add questions to the master in English first, and the translation lags until a translator volunteers.
Solution: open a PR. Tracking issues already exist for several languages: #812 (Burmese), #827 (Italian), #828 (Japanese), #834 (Russian), #840 (Turkish), and #853 (Hindi: SSR/CSR question). Pick one and follow Recipe 3 above.
Prevention: none — drift is the natural state of community-translated content. Issue #870 ("Add better documentation of translation process") is open precisely to lower the bar for translators.
Issue: the GitHub Actions workflow fails with "deprecated runner"
Cause: issue #932 tracks migrating Actions to Node 22/24 ahead of GitHub deprecating older runners.
Solution: if you are forking and your workflow fails, update the node-version in any .github/workflows/*.yml to 22 or 24. For the upstream repo, watch #932.
Prevention: avoid pinning to specific minor Node versions in CI; use lts/* or major versions where possible.
Caution
Do not commit the
_site/build output. The.gitignoreexcludes it, but if you remove that exclusion in a fork, your repo will balloon and PRs will become unreviewable. Build output is regenerated on every deploy.
7. FAQ
Q: Where are the answers to the questions?
There are no answers. The repository is intentionally answer-free — the questions are conversation starters, and most have multiple defensible answers depending on the candidate's experience. Use MDN, the relevant specs (HTML, CSS, ECMAScript), or interview-prep books like You Don't Know JS for canonical references.
Q: Why is the Accessibility category an external link?
Scott O'Hara maintains Accessibility Interview Questions — a separate, focused bank that is more thorough than what this repo would write. Linking out avoids forks of authoritative work.
Q: Can I print the questions for an in-person interview?
Yes. The published site renders cleanly to PDF from any browser's print dialog. Or grab the markdown directly from src/questions/<category>-questions.md and convert with pandoc.
Q: Should I add my own questions if I disagree with the existing set?
Yes — the project welcomes new questions. Open a PR against src/questions/<category>-questions.md (and the master template) with a short rationale. Issue #935 is the current discussion of what topics belong in a 2026 question bank.
Q: How do I cite this resource in my own materials?
Use the repository URL and the MIT license. The license at LICENSE.md permits commercial reuse with attribution.
Q: What languages have translations?
Thirty-five languages: Arabic, Bangla (Bengali), Bulgarian, Burmese, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, Farsi, French, German, Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Latvian, Polish, Portuguese, Romanian, Russian, Serbian, Slovakian, Slovenian, Spanish, Swedish, Turkish, Ukrainian, and Vietnamese. The full list lives in src/_data/translations.json.
Q: Is the translation always in sync with the English master?
No. Translations are community-maintained and drift when new English questions are added. Open issues like #812, #827, #828, #834, #840, and #853 call out specific gaps. The src/translations/_template/README.md file is always the freshest English source.
Q: Why does the project use Eleventy instead of a more popular SSG?
Eleventy is dependency-light, has zero runtime requirements, and renders the same markdown that contributors edit by hand. Switching to a heavier framework would add a build step that translators (most of whom are not JS developers) would have to learn. The choice is deliberate.
Q: Can I run the site without Node.js at all?
Yes — read the markdown files directly on GitHub or browse the published site at h5bp.org/Front-end-Developer-Interview-Questions/. Node is only required if you want to render the static site yourself.
Q: How are contributors recognized?
Via the all-contributors bot. Contributions of all kinds count: doc, translation, infra, review, question, talk, maintenance, ideas. The full list is in .all-contributorsrc and surfaces on the about page.
Q: What does the maintenance status look like in 2026?
Active but slow. Recent open issues — #932 (Node version migration), #934 (rulesets vs branch protection), #935 (content audit), #936 (dependency audit) — show the maintainers are doing platform hygiene work. Question content updates are accepted via PRs as community members submit them.
Q: Is this repo a good fit for AI-assisted interview prep?
Yes — the questions are well-structured, free of answers (so an AI cannot regurgitate a model answer), and licensed permissively. Feed them to a tutor model and ask for follow-up probes when your answer is shallow.