Skip to content

bryan-shea/SnipBit

Repository files navigation

SnipBit logo

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.

CI Package Release Chrome publish GitHub release

Chrome Web Store pending review Manifest V3 TypeScript React Vite Local first No analytics

Features · Screenshots · Install · Development · Permissions · Roadmap


Overview

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.


Features

  • 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.

Screenshots

PENDING

Create this folder and add the images below:

docs/assets/screenshots/
Popup Side Panel
SnipBit popup showing searchable snippet cards SnipBit side panel showing collections and snippet editor
Save Selection Collections
Right-click context menu for saving selected text to SnipBit SnipBit collections sidebar and snippet list

How it works

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

Collections are named groups for keeping related snippets together.

Collection workflows

  • 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

Deleting a collection does not delete its snippets.

When a collection is deleted:

  1. Snippets inside the collection are kept.
  2. Their collectionId is set to null.
  3. Those snippets move to Unassigned.

A confirmation dialog explains this before the deletion completes.


Storage

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.


Install

npm install

Development

npm run dev

npm run dev uses vite build --watch, which rebuilds the unpacked extension output in dist/.

After changes, reload the extension from:

chrome://extensions

Typecheck and build

npm run typecheck
npm run build

Load unpacked in Chrome

  1. Run:

    npm run build
  2. Open:

    chrome://extensions
  3. Enable Developer Mode.

  4. Click Load unpacked.

  5. Select the generated dist/ folder.

  6. Pin SnipBit to your toolbar.

  7. Open the popup or use Manage library to open the side panel.


Permissions

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.


Privacy

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.

Local commands

# 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:check

Packaged extension ZIPs are generated in:

artifacts/

Example output:

artifacts/snipbit-chrome-vX.Y.Z.zip

Release process

For a normal update:

  1. Make changes on a feature branch.
  2. Open a pull request.
  3. Wait for CI to pass.
  4. Merge to main.
  5. Bump the extension version.
  6. Commit the version bump.
  7. Push a tag like v1.0.1.
  8. Confirm the GitHub Release was created with the packaged ZIP.
  9. Run the Chrome Web Store publish workflow with dry_run: true.
  10. Run the Chrome Web Store publish workflow with dry_run: false.

Chrome Web Store publishing should not run automatically on every push to main.


Roadmap

Planned

  • 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.

Current limitations

  • 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 sidePanel API.

Documentation

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.

Contributing

This project is early and intentionally focused.

Before contributing:

  1. Open an issue or discussion for larger changes.
  2. Keep PRs small and scoped.
  3. Run local checks before opening a pull request.
npm run typecheck
npm run lint
npm run build
npm run validate:extension

Support

Use GitHub Issues for bugs, feature requests, and release/publishing problems:


License

License information has not been added yet.

Releases

No releases published

Packages

 
 
 

Contributors