Skip to main content
A Manifest V3 Chrome extension that puts Vaquill’s statute search in any browser tab. The popup calls api.vaquill.ai directly using the user’s own API key - no proxy server, no backend to run, no infrastructure to maintain. Works in any Chromium-based browser (Chrome, Edge, Brave, Arc, Opera). The public API covers US statutes only: the US Code, the CFR, all 50 state statute codes, the U.S. Constitution, the Federal Rules, and Executive Orders. Source: github.com/Vaquill-AI/integrations/chrome-extension.

What you get

  • Manifest V3, service-worker based
  • Direct calls to api.vaquill.ai - no middleware
  • BYOK (bring your own key): each user configures their own API key in the Options page
  • Structured statute source cards: title or code, section number, jurisdiction, heading, excerpt
  • Vanilla JavaScript, no build step - edit and reload

Prerequisites

Quickstart

1

Clone the repo

2

Load the extension

  1. Open chrome://extensions/
  2. Toggle Developer mode on (top right)
  3. Click Load unpacked
  4. Select the extension/ folder
3

Configure your API key

  1. Right-click the Vaquill icon in the toolbar and choose Options (or click the gear icon inside the popup)
  2. Paste your API key (vq_key_...)
  3. Choose a default Jurisdiction
  4. Click Save
4

Test

Click the extension icon and try a search like “42 USC 1983” or “FRCP Rule 12”. Expand a source card to see the section number, jurisdiction, heading, and excerpt.

Configuration

Extension defaults

Edit extension/js/config.js:

Per-user settings (stored in chrome.storage.local)

API keys live in chrome.storage.local on the user’s device. The extension never transmits them anywhere except to api.vaquill.ai.

API contract

The extension calls a single endpoint:
Request body:
Full schema in the Statute search API reference.

Project layout

Branding and theming

Name and description

Edit extension/manifest.json:

Icons

Place PNGs in extension/icons/:
  • icon16.png (16x16) - toolbar
  • icon48.png (48x48) - extensions page
  • icon128.png (128x128) - Chrome Web Store listing

Colors

Edit CSS custom properties at the top of extension/css/popup.css:

Host permissions

host_permissions in manifest.json must match the API domain the extension calls. Default (Vaquill production API):
Custom API domain:
Multiple domains (dev + production):
Always use specific domains rather than wildcards (https://*/*). The Chrome Web Store reviews extensions with broad host permissions more aggressively and may reject them.

Publishing to the Chrome Web Store

Prerequisites

  1. A Google Developer account ($5 USD one-time fee)
  2. Register at chrome.google.com/webstore/devconsole

Preparation checklist

  • Set the production API_URL in config.js
  • Update manifest.json with name, description, version, and host_permissions
  • Add extension icons (16, 48, 128 px)
  • Prepare at least one screenshot (1280x800 px)
  • Prepare a privacy policy URL (required by Google)

Package the extension

Upload

1

Open the dashboard

2

Create a new item

Click New Item and upload vaquill-extension.zip.
3

Fill out the listing

  • Name: Vaquill Statute Search
  • Summary: Statute search assistant for US Code, CFR, and 50 states (132 chars max)
  • Description: Full feature description
  • Category: Productivity
  • Language: English
  • Screenshots: At least 1 (1280x800 px)
  • Privacy Policy: URL to your privacy policy
  • Permissions Justification: Explain why storage and activeTab are needed
4

Submit for review

Typical review time: 1-3 business days.

Development

The extension uses vanilla JavaScript with no build step. Edit files directly, then reload the extension at chrome://extensions/ (click the refresh icon on the extension card).

Troubleshooting

“Failed to fetch” errors
  • host_permissions in manifest.json does not match the API URL in config.js. Make both point to the same domain (e.g., https://api.vaquill.ai).
API key not working Extension not loading
  • Validate JSON syntax in manifest.json.
  • Ensure all required Manifest V3 fields are present (manifest_version: 3, name, version, action, background.service_worker).
No sources in responses
  • Try a more specific query (cite a statute by title and section number).
  • Verify MAX_SOURCES is greater than 0 in config.js.
Content Security Policy errors
  • Do not add inline scripts or external script sources.
  • Restore the default CSP in manifest.json:

Statute search API

The endpoint this extension calls.

Authentication

How to generate and rotate API keys.

Embedded Chat Widget

Drop the same chat into any website via iframe.

GitHub

Source code and issue tracker.