← All templates

Bookmark Speed Dial Chrome extension

Search and open your bookmarks from the toolbar without opening the bookmark manager.

How to install

  1. Download and unzip the file.
  2. Open chrome://extensions and turn on Developer mode.
  3. Click "Load unpacked" and pick the unzipped folder.

Source code (6 files)

manifest.json
{
  "manifest_version": 3,
  "name": "Bookmark Speed Dial",
  "version": "1.0.0",
  "description": "Search and open your bookmarks from the toolbar without opening the bookmark manager.",
  "icons": {
    "16": "icons/icon.svg",
    "48": "icons/icon.svg",
    "128": "icons/icon.svg"
  },
  "action": {
    "default_popup": "popup.html",
    "default_title": "Bookmark Speed Dial",
    "default_icon": {
      "128": "icons/icon.svg"
    }
  },
  "permissions": [
    "bookmarks",
    "tabs"
  ]
}
popup.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Bookmark Speed Dial</title>
<link rel="stylesheet" href="popup.css" />
</head>
<body>
<header><h1>Bookmark Speed Dial</h1><p class="sub">Built with ManifestGo</p></header>
<main>
<input id="q" type="search" placeholder="Search bookmarks…" />
  <ul id="list"></ul>
</main>
<script src="popup.js"></script>
</body>
</html>
popup.css
:root { color-scheme: dark; }
* { box-sizing: border-box; }
body {
  margin: 0;
  width: 320px;
  font-family: Inter, -apple-system, "Segoe UI", Roboto, sans-serif;
  background: #1b1b1b;
  color: #f2efe9;
}
header { padding: 14px 16px 8px; }
h1 { margin: 0; font-size: 14px; font-weight: 600; letter-spacing: -0.01em; }
p.sub { margin: 4px 0 0; font-size: 11px; color: #9a958d; }
main { padding: 10px 16px 16px; display: grid; gap: 10px; }
button {
  font: inherit; font-size: 12px; font-weight: 600; cursor: pointer;
  border: 1px solid #ffffff1f; background: #ffffff0d; color: #f2efe9;
  border-radius: 10px; padding: 9px 12px; transition: background .15s ease;
}
button:hover { background: #ffffff17; }
button.primary { background: #facc15; border-color: #facc15; color: #101010; }
button.primary:hover { filter: brightness(1.08); }
input, select, textarea {
  font: inherit; font-size: 12px; width: 100%; padding: 9px 10px; border-radius: 10px;
  border: 1px solid #ffffff1f; background: #ffffff08; color: #f2efe9; outline: none;
}
input:focus, textarea:focus { border-color: #facc15; }
ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; max-height: 260px; overflow: auto; }
li { display: flex; align-items: center; gap: 8px; font-size: 12px; padding: 8px 10px; border-radius: 10px; background: #ffffff08; }
li span { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.row { display: flex; gap: 8px; }
.row > * { flex: 1; }
.big { font-size: 34px; font-weight: 700; text-align: center; letter-spacing: -0.02em; font-variant-numeric: tabular-nums; }
.muted { font-size: 11px; color: #9a958d; }
popup.js
const list = document.getElementById("list");
const q = document.getElementById("q");

function render(items) {
  list.innerHTML = "";
  items.slice(0, 40).forEach((b) => {
    const li = document.createElement("li");
    const span = document.createElement("span");
    span.textContent = b.title || b.url;
    span.title = b.url;
    span.addEventListener("click", () => chrome.tabs.create({ url: b.url }));
    li.appendChild(span);
    list.appendChild(li);
  });
}

function flatten(nodes, out = []) {
  for (const n of nodes) {
    if (n.url) out.push(n);
    if (n.children) flatten(n.children, out);
  }
  return out;
}

let all = [];
chrome.bookmarks.getTree((tree) => { all = flatten(tree); render(all); });
q.addEventListener("input", () => {
  const t = q.value.trim().toLowerCase();
  render(t ? all.filter((b) => (b.title || "").toLowerCase().includes(t) || b.url.toLowerCase().includes(t)) : all);
});
icons/icon.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128"><rect width="128" height="128" rx="26" fill="#facc15"/><text x="64" y="90" font-family="Inter, Arial, sans-serif" font-size="66" font-weight="700" text-anchor="middle" fill="#ffffff">B</text></svg>
README.md
# Bookmark Speed Dial

Search and open your bookmarks from the toolbar without opening the bookmark manager.

## Install (unpacked)
1. Open `chrome://extensions`.
2. Enable **Developer mode**.
3. Click **Load unpacked** and select this folder.

## Files
- `manifest.json` — Manifest V3 configuration
- `popup.html` / `popup.css` / `popup.js` — toolbar popup UI and logic
- `icons/icon.svg` — source icon (rasterized to PNG on download)

More free templates