{"id":690,"date":"2026-07-26T07:37:34","date_gmt":"2026-07-26T07:37:34","guid":{"rendered":"https:\/\/freewebtools.co.in\/?page_id=690"},"modified":"2026-07-26T07:37:34","modified_gmt":"2026-07-26T07:37:34","slug":"wordlist-generator","status":"publish","type":"page","link":"https:\/\/freewebtools.co.in\/index.php\/wordlist-generator\/","title":{"rendered":"Wordlist Generator"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Dictionary &#038; Wordlist Generator<\/title>\n  <style>\n    :root {\n      --bg-main: #ffffff;\n      --bg-card: #f8fafc;\n      --bg-input: #ffffff;\n      --border: #cbd5e1;\n      --accent-blue: #2563eb;\n      --text-main: #0f172a;\n      --text-sub: #64748b;\n      --safe: #059669;\n      --warn: #d97706;\n    }\n\n    * { box-sizing: border-box; margin: 0; padding: 0; }\n\n    body {\n      background-color: var(--bg-main);\n      color: var(--text-main);\n      font-family: system-ui, -apple-system, sans-serif;\n      padding: 30px 15px;\n      display: flex;\n      justify-content: center;\n    }\n\n    .container {\n      width: 100%;\n      max-width: 850px;\n      background: var(--bg-card);\n      border: 1px solid var(--border);\n      border-radius: 12px;\n      padding: 24px;\n      box-shadow: 0 4px 12px rgba(0,0,0,0.05);\n    }\n\n    header {\n      margin-bottom: 20px;\n      padding-bottom: 12px;\n      border-bottom: 1px solid var(--border);\n    }\n\n    h1 { font-size: 1.5rem; color: var(--text-main); }\n    p.sub { font-size: 0.875rem; color: var(--text-sub); margin-top: 4px; }\n\n    .form-grid {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 16px;\n      margin-bottom: 20px;\n    }\n\n    @media (max-width: 600px) { .form-grid { grid-template-columns: 1fr; } }\n\n    .field {\n      display: flex;\n      flex-direction: column;\n      gap: 6px;\n    }\n\n    .field.full-width {\n      grid-column: 1 \/ -1;\n    }\n\n    label {\n      font-size: 0.875rem;\n      font-weight: 600;\n      color: var(--text-main);\n    }\n\n    input[type=\"text\"], input[type=\"number\"] {\n      background: var(--bg-input);\n      border: 1px solid var(--border);\n      color: var(--text-main);\n      padding: 10px 12px;\n      border-radius: 8px;\n      font-size: 0.95rem;\n      outline: none;\n    }\n\n    input:focus {\n      border-color: var(--accent-blue);\n      box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);\n    }\n\n    .checkbox-group {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 15px;\n      padding: 10px 0;\n    }\n\n    .checkbox-label {\n      display: flex;\n      align-items: center;\n      gap: 6px;\n      font-size: 0.875rem;\n      cursor: pointer;\n    }\n\n    .button-group {\n      display: flex;\n      gap: 10px;\n      margin-bottom: 20px;\n      flex-wrap: wrap;\n    }\n\n    button {\n      padding: 12px 20px;\n      border-radius: 8px;\n      border: none;\n      font-weight: 600;\n      cursor: pointer;\n      transition: background 0.2s;\n    }\n\n    .btn-primary { background: var(--accent-blue); color: white; }\n    .btn-primary:hover { background: #1d4ed8; }\n    .btn-secondary { background: #e2e8f0; color: var(--text-main); border: 1px solid var(--border); }\n    .btn-secondary:hover { background: #cbd5e1; }\n\n    .results-area {\n      display: none;\n      margin-top: 20px;\n      animation: fadeIn 0.3s ease-in-out;\n    }\n\n    @keyframes fadeIn {\n      from { opacity: 0; transform: translateY(5px); }\n      to { opacity: 1; transform: translateY(0); }\n    }\n\n    .stats-card {\n      background: #ffffff;\n      border: 1px solid var(--border);\n      border-radius: 8px;\n      padding: 12px 16px;\n      margin-bottom: 12px;\n      display: flex;\n      justify-content: space-between;\n      font-size: 0.875rem;\n    }\n\n    textarea {\n      width: 100%;\n      height: 250px;\n      background: #ffffff;\n      border: 1px solid var(--border);\n      border-radius: 8px;\n      padding: 12px;\n      font-family: monospace;\n      font-size: 0.875rem;\n      color: var(--text-main);\n      resize: vertical;\n      outline: none;\n    }\n  <\/style>\n<\/head>\n<body>\n\n<div class=\"container\">\n  <header>\n    <h1>Wordlist Generator<\/h1>\n    <p class=\"sub\">Client-side custom dictionary &#038; password candidate generator<\/p>\n  <\/header>\n\n  <div class=\"form-grid\">\n    <div class=\"field full-width\">\n      <label for=\"baseKeywords\">Base Keywords (comma separated)<\/label>\n      <input type=\"text\" id=\"baseKeywords\" placeholder=\"e.g. admin, company, 2026, project\" \/>\n    <\/div>\n\n    <div class=\"field\">\n      <label for=\"appendNumbers\">Append Common Numbers (comma separated)<\/label>\n      <input type=\"text\" id=\"appendNumbers\" value=\"123, 1, 2026, 01\" \/>\n    <\/div>\n\n    <div class=\"field\">\n      <label for=\"appendSymbols\">Append Special Characters<\/label>\n      <input type=\"text\" id=\"appendSymbols\" value=\"!, @, #, $\" \/>\n    <\/div>\n\n    <div class=\"field full-width\">\n      <label>Mutations &#038; Transformation Rules<\/label>\n      <div class=\"checkbox-group\">\n        <label class=\"checkbox-label\"><input type=\"checkbox\" id=\"ruleLower\" checked \/> Lowercase<\/label>\n        <label class=\"checkbox-label\"><input type=\"checkbox\" id=\"ruleUpper\" checked \/> CAPITALIZE<\/label>\n        <label class=\"checkbox-label\"><input type=\"checkbox\" id=\"ruleLeet\" \/> Leet Transformations (a->@, e->3, i->1, o->0)<\/label>\n        <label class=\"checkbox-label\"><input type=\"checkbox\" id=\"ruleCombine\" checked \/> Combine Keywords (Pairwise)<\/label>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"button-group\">\n    <button type=\"button\" id=\"btnAnalyze\" class=\"btn-primary\">Generate Wordlist<\/button>\n    <button type=\"button\" id=\"btnDemo\" class=\"btn-secondary\">Load Demo<\/button>\n    <button type=\"button\" id=\"btnClear\" class=\"btn-secondary\">Clear<\/button>\n  <\/div>\n\n  <div id=\"resultsArea\" class=\"results-area\">\n    <div class=\"stats-card\">\n      <span><strong>Total Unique Words:<\/strong> <span id=\"valCount\">0<\/span><\/span>\n      <span><strong>Estimated Size:<\/strong> <span id=\"valSize\">0 KB<\/span><\/span>\n    <\/div>\n\n    <textarea id=\"outputBox\" readonly><\/textarea>\n\n    <div style=\"margin-top: 12px;\">\n      <button type=\"button\" id=\"btnDownload\" class=\"btn-secondary\">Download .txt File<\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n  const baseKeywordsInput = document.getElementById('baseKeywords');\n  const appendNumbersInput = document.getElementById('appendNumbers');\n  const appendSymbolsInput = document.getElementById('appendSymbols');\n  \n  const ruleLower = document.getElementById('ruleLower');\n  const ruleUpper = document.getElementById('ruleUpper');\n  const ruleLeet = document.getElementById('ruleLeet');\n  const ruleCombine = document.getElementById('ruleCombine');\n\n  const btnAnalyze = document.getElementById('btnAnalyze');\n  const btnDemo = document.getElementById('btnDemo');\n  const btnClear = document.getElementById('btnClear');\n  const btnDownload = document.getElementById('btnDownload');\n  \n  const resultsArea = document.getElementById('resultsArea');\n  const outputBox = document.getElementById('outputBox');\n  const valCount = document.getElementById('valCount');\n  const valSize = document.getElementById('valSize');\n\n  function toLeet(str) {\n    return str\n      .replace(\/a\/gi, '@')\n      .replace(\/e\/gi, '3')\n      .replace(\/i\/gi, '1')\n      .replace(\/o\/gi, '0')\n      .replace(\/s\/gi, '$');\n  }\n\n  function generateWordlist() {\n    const rawKeywords = baseKeywordsInput.value.split(',').map(s => s.trim()).filter(Boolean);\n    const numbers = appendNumbersInput.value.split(',').map(s => s.trim()).filter(Boolean);\n    const symbols = appendSymbolsInput.value.split(',').map(s => s.trim()).filter(Boolean);\n\n    if (rawKeywords.length === 0) {\n      alert(\"Please enter at least one base keyword.\");\n      return;\n    }\n\n    const wordSet = new Set();\n\n    \/\/ Step 1: Combine base keywords if requested\n    let workingKeywords = [...rawKeywords];\n    if (ruleCombine.checked && rawKeywords.length > 1) {\n      for (let i = 0; i < rawKeywords.length; i++) {\n        for (let j = 0; j < rawKeywords.length; j++) {\n          if (i !== j) {\n            workingKeywords.push(rawKeywords[i] + rawKeywords[j]);\n          }\n        }\n      }\n    }\n\n    \/\/ Step 2: Apply mutations\n    workingKeywords.forEach(kw => {\n      if (ruleLower.checked) wordSet.add(kw.toLowerCase());\n      if (ruleUpper.checked) {\n        wordSet.add(kw.toUpperCase());\n        wordSet.add(kw.charAt(0).toUpperCase() + kw.slice(1).toLowerCase());\n      }\n      if (ruleLeet.checked) {\n        wordSet.add(toLeet(kw));\n      }\n      if (!ruleLower.checked && !ruleUpper.checked && !ruleLeet.checked) {\n        wordSet.add(kw);\n      }\n    });\n\n    \/\/ Step 3: Append Numbers & Symbols\n    const currentBaseWords = Array.from(wordSet);\n    \n    currentBaseWords.forEach(word => {\n      numbers.forEach(num => {\n        wordSet.add(word + num);\n      });\n      symbols.forEach(sym => {\n        wordSet.add(word + sym);\n      });\n      numbers.forEach(num => {\n        symbols.forEach(sym => {\n          wordSet.add(word + num + sym);\n          wordSet.add(word + sym + num);\n        });\n      });\n    });\n\n    const resultArray = Array.from(wordSet);\n    const resultText = resultArray.join('\\n');\n\n    outputBox.value = resultText;\n    valCount.textContent = resultArray.length.toLocaleString();\n    \n    \/\/ Calculate approximate size in KB\n    const bytes = new Blob([resultText]).size;\n    valSize.textContent = (bytes \/ 1024).toFixed(2) + ' KB';\n\n    resultsArea.style.display = 'block';\n  }\n\n  function downloadFile() {\n    const text = outputBox.value;\n    if (!text) return;\n\n    const blob = new Blob([text], { type: 'text\/plain' });\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = 'wordlist.txt';\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n    URL.revokeObjectURL(url);\n  }\n\n  function loadDemo() {\n    baseKeywordsInput.value = 'admin, secure, pass';\n    appendNumbersInput.value = '123, 2026';\n    appendSymbolsInput.value = '!, #';\n    ruleLower.checked = true;\n    ruleUpper.checked = true;\n    ruleLeet.checked = true;\n    ruleCombine.checked = true;\n    generateWordlist();\n  }\n\n  function clearAll() {\n    baseKeywordsInput.value = '';\n    appendNumbersInput.value = '';\n    appendSymbolsInput.value = '';\n    outputBox.value = '';\n    resultsArea.style.display = 'none';\n  }\n\n  \/\/ Bind direct event handlers\n  btnAnalyze.onclick = generateWordlist;\n  btnDemo.onclick = loadDemo;\n  btnClear.onclick = clearAll;\n  btnDownload.onclick = downloadFile;\n<\/script>\n\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Dictionary &#038; Wordlist Generator Wordlist Generator Client-side custom dictionary &#038; password candidate generator Base Keywords (comma separated) Append Common Numbers (comma separated) Append Special Characters Mutations &#038; Transformation Rules Lowercase CAPITALIZE Leet Transformations (a->@, e->3, i->1, o->0) Combine Keywords (Pairwise) Generate Wordlist Load Demo Clear Total Unique Words: 0 Estimated Size: 0 KB Download .txt [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-690","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/comments?post=690"}],"version-history":[{"count":1,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/690\/revisions"}],"predecessor-version":[{"id":691,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/690\/revisions\/691"}],"wp:attachment":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/media?parent=690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}