Save, organize, and reuse text snippets from your browser — fast.
SnipBit is a local-first Manifest V3 Chrome extension with a quick-access popup, full side-panel library, collections, and right-click snippet capture.
Features · Screenshots · Install · Development · Permissions · Roadmap
SnipBit is a focused snippet manager for Chrome. It helps you save reusable text, organize snippets into collections, and copy what you need without leaving your browser workflow.
Use it for:
- Email replies and follow-ups.
- Support responses.
- Sales/outreach templates.
- Research notes.
- Code/text fragments.
- Frequently reused links, blurbs, or prompts.
SnipBit runs locally in the browser. It does not require an account, backend, analytics service, or broad host permissions.
- Quick copy workflow — search and copy saved snippets from the toolbar popup.
- Full snippet library — create, edit, duplicate, delete, favorite, and organize snippets in the Chrome side panel.
- Collections — group related snippets and filter by All, Favorites, Unassigned, or a specific collection.
- Right-click capture — highlight text on a webpage and save it through
Save selection to SnipBit. - Local-first storage — persist snippets, collections, and preferences with
chrome.storage.local. - Minimal permissions — no host permissions, no remote code, no analytics, and no backend.
- Chrome Web Store-ready packaging — CI/CD scripts validate, build, package, release, and publish extension ZIPs.
PENDING
Create this folder and add the images below:
docs/assets/screenshots/| Popup | Side Panel |
|---|---|
![]() |
![]() |
| Save Selection | Collections |
|---|---|
![]() |
![]() |
SnipBit has three primary surfaces:
| Surface | Purpose |
|---|---|
| Popup | Fast search, filtering, and one-click snippet copy. |
| Side panel | Full library management, editing, collections, and preferences. |
| Context menu | Save highlighted webpage text directly into SnipBit. |
The extension stores all user data locally in Chrome extension storage.
Collections are named groups for keeping related snippets together.
- Create a collection from the side panel sidebar.
- Assign a snippet to a collection when creating or editing it.
- Move a snippet between collections by changing its Collection field.
- Filter snippets by All, Favorites, Unassigned, or any collection.
- View the same collection filters in the popup.
- Save highlighted text to the default collection when configured, or to Unassigned by default.
Deleting a collection does not delete its snippets.
When a collection is deleted:
- Snippets inside the collection are kept.
- Their
collectionIdis set tonull. - Those snippets move to Unassigned.
A confirmation dialog explains this before the deletion completes.
SnipBit uses local Chrome extension storage.
| Key | Contents |
|---|---|
snipbit.snippets |
All snippets |
snipbit.collections |
All collections |
snipbit.preferences |
User preferences, default collection, and sort modes |
Existing data from before collections were added migrates automatically. Snippets without a collectionId field are treated as Unassigned.
npm installnpm run devnpm run dev uses vite build --watch, which rebuilds the unpacked extension output in dist/.
After changes, reload the extension from:
chrome://extensionsnpm run typecheck
npm run build-
Run:
npm run build
-
Open:
chrome://extensions
-
Enable Developer Mode.
-
Click Load unpacked.
-
Select the generated
dist/folder. -
Pin SnipBit to your toolbar.
-
Open the popup or use Manage library to open the side panel.
SnipBit requests only the permissions needed for its core workflows.
| Permission | Why it is used |
|---|---|
storage |
Stores snippets, collections, and preferences locally on the device. |
contextMenus |
Adds the Save selection to SnipBit right-click action. |
sidePanel |
Opens the richer management UI from the popup. |
SnipBit does not request host permissions, inject remote code, use analytics, or require a backend.
SnipBit is designed to be local-first.
- No account required.
- No analytics.
- No backend.
- No remote code.
- No host permissions.
- No third-party data sharing.
- Snippets are stored locally with
chrome.storage.local.
# Type check
npm run typecheck
# Lint
npm run lint
# Build
npm run build
# Validate the built extension
npm run validate:extension
# Package into a Chrome Web Store-ready ZIP
npm run package:extension
# Full pre-release check
npm run release:checkPackaged extension ZIPs are generated in:
artifacts/Example output:
artifacts/snipbit-chrome-vX.Y.Z.zipFor a normal update:
- Make changes on a feature branch.
- Open a pull request.
- Wait for CI to pass.
- Merge to
main. - Bump the extension version.
- Commit the version bump.
- Push a tag like
v1.0.1. - Confirm the GitHub Release was created with the packaged ZIP.
- Run the Chrome Web Store publish workflow with
dry_run: true. - Run the Chrome Web Store publish workflow with
dry_run: false.
Chrome Web Store publishing should not run automatically on every push to main.
- Import/export for snippet backups.
- Collection-specific context menu save.
- Drag-and-drop ordering for snippets and collections.
- Keyboard shortcuts for filtering, creating, and copying snippets.
- Optional sync support.
- Richer metadata views for captured page snippets.
- More polished screenshot/demo assets for the public repo and Chrome Web Store listing.
- No nested folders.
- No drag-and-drop ordering yet.
- No import/export yet.
- Context-menu capture saves to the default collection or Unassigned.
- Keyboard hints are stored but not wired to commands yet.
- Clipboard writes rely on extension-page permissions and a DOM fallback, so browser-specific clipboard quirks can still apply.
- The side panel is optimized for Chromium browsers that support the Manifest V3
sidePanelAPI.
| Document | Purpose |
|---|---|
docs/releasing.md |
Release checklist, versioning, and GitHub Release flow. |
docs/chrome-web-store-publishing.md |
Chrome Web Store API setup, required secrets, and publishing workflow. |
This project is early and intentionally focused.
Before contributing:
- Open an issue or discussion for larger changes.
- Keep PRs small and scoped.
- Run local checks before opening a pull request.
npm run typecheck
npm run lint
npm run build
npm run validate:extensionUse GitHub Issues for bugs, feature requests, and release/publishing problems:
License information has not been added yet.




