{"id":50557006,"url":"https://github.com/belmontdigitalmarketing/quickyourls","last_synced_at":"2026-06-04T08:01:26.218Z","repository":{"id":358955434,"uuid":"1203198333","full_name":"belmontdigitalmarketing/QuickYOURLS","owner":"belmontdigitalmarketing","description":"Privacy-first Chrome extension for shortening URLs with your own self-hosted YOURLS server. Multi-server, no third-party calls, optional host permissions.","archived":false,"fork":false,"pushed_at":"2026-05-19T18:53:48.000Z","size":49,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-19T22:16:52.106Z","etag":null,"topics":["browser-extension","chrome-extension","chromium","link-shortener","manifest-v3","privacy","self-hosted","url-shortener","yourls"],"latest_commit_sha":null,"homepage":"https://belmontdigitalmarketing.com/chrome-extensions","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/belmontdigitalmarketing.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-06T20:21:20.000Z","updated_at":"2026-05-19T18:54:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/belmontdigitalmarketing/QuickYOURLS","commit_stats":null,"previous_names":["belmontdigitalmarketing/quickyourls"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/belmontdigitalmarketing/QuickYOURLS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belmontdigitalmarketing%2FQuickYOURLS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belmontdigitalmarketing%2FQuickYOURLS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belmontdigitalmarketing%2FQuickYOURLS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belmontdigitalmarketing%2FQuickYOURLS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/belmontdigitalmarketing","download_url":"https://codeload.github.com/belmontdigitalmarketing/QuickYOURLS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belmontdigitalmarketing%2FQuickYOURLS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33895175,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser-extension","chrome-extension","chromium","link-shortener","manifest-v3","privacy","self-hosted","url-shortener","yourls"],"created_at":"2026-06-04T08:01:24.684Z","updated_at":"2026-06-04T08:01:26.209Z","avatar_url":"https://github.com/belmontdigitalmarketing.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QuickYOURLS\n\nA privacy-first Chrome extension (Manifest V3) for shortening URLs through your own self-hosted [YOURLS](https://yourls.org) server. Your API signature tokens never leave your browser — every request goes directly to your own server, never to any third party.\n\n\u003e Built as an auditable alternative to closed-source shortener extensions. You can read every line of code before installing.\n\n## Why QuickYOURLS?\n\nMost YOURLS browser extensions require you to hand over your API signature token to code you don't control. Since extensions auto-update silently, even a trustworthy extension today could be compromised tomorrow. QuickYOURLS solves that two ways:\n\n- **Open source** — full source is right here in this repo, easy to audit before you install.\n- **Optional host permissions** — the extension does **not** request blanket access to all websites at install time. It asks for access to *only* the specific YOURLS server domain you configure, and only when you add it.\n\n## Features\n\n- **One-click shortening** — click the toolbar icon to shorten the current tab's URL.\n- **Up to 5 YOURLS servers** — add multiple instances and switch between them from the popup.\n- **Custom keywords** — optionally set your own keyword (e.g. `yourdomain.com/launch`).\n- **Right-click context menus**:\n  - *Shorten This Link* — right-click any link on a page.\n  - *Shorten Page URL with \"%s\" as keyword* — select text first to use it as the keyword.\n- **Auto-copy** — shortened URLs are copied to your clipboard automatically.\n- **Connection testing** — verify your server URL and signature token before saving.\n- **Settings sync** — server configs are stored in `chrome.storage.sync`, so they follow your Chrome profile across devices.\n- **30-second request timeout** — slow or unreachable servers fail gracefully instead of hanging.\n\n## Privacy\n\nQuickYOURLS communicates **only** with the YOURLS server(s) you configure. No analytics, no telemetry, no third-party calls.\n\n| Data | Collected? | Where it lives |\n|---|---|---|\n| YOURLS API signature tokens | Yes | `chrome.storage.sync` (local to your browser/profile) |\n| URLs you choose to shorten | In transit only | Sent to your YOURLS server when you click shorten |\n| Browsing history | **No** | Current tab URL is only read on explicit user action |\n| Personal info | **No** | — |\n\nFull privacy policy: \u003chttps://belmontdigitalmarketing.com/privacy-policy\u003e\n\n## Installation\n\n### From the Chrome Web Store\n\n*Coming soon — pending review.*\n\n### From source (unpacked)\n\n1. Clone or download this repo:\n   ```bash\n   git clone https://github.com/belmontdigitalmarketing/QuickYOURLS.git\n   ```\n2. Open `chrome://extensions` in Chrome (or any Chromium browser — Edge, Brave, etc.).\n3. Enable **Developer mode** (top-right toggle).\n4. Click **Load unpacked** and select the `extension/` folder from this repo.\n5. Pin the QuickYOURLS icon to your toolbar for one-click access.\n\n## Setup\n\n1. Click the QuickYOURLS toolbar icon, then **Open Settings** (or right-click the icon → *Options*).\n2. Click **Add Server** and fill in:\n   - **Name** — any label you want (e.g. *Marketing*, *Personal*).\n   - **Server URL** — the base URL of your YOURLS install (e.g. `https://links.example.com`).\n   - **API Signature Token** — found in your YOURLS admin under **Tools → API**.\n3. Click **Test Connection** to verify, then **Save**.\n4. Chrome will prompt you to grant the extension permission to communicate with that specific domain — approve it.\n5. You're done. Click the toolbar icon on any page to start shortening.\n\n## Usage\n\n### Toolbar popup\nClick the extension icon. The current tab's URL is pre-filled. Optionally add a custom keyword, then click **Shorten URL**. The short URL is copied to your clipboard automatically.\n\n### Right-click any link\nRight-click → *Shorten This Link*. The popup opens with that link ready to shorten.\n\n### Right-click with custom keyword\nSelect text on a page, then right-click → *Shorten Page URL with \"your-text\" as keyword*. The current page URL is shortened using your selected text (lowercased, with spaces converted to dashes) as the keyword.\n\n### Switching servers\nIf you've added more than one server, a dropdown appears at the top of the popup to choose which one to shorten against.\n\n## Requirements\n\n- **Browser**: Chrome, Edge, Brave, or any Chromium-based browser supporting Manifest V3\n- **YOURLS**: a working YOURLS installation, version 1.7.3 or higher\n- **API access**: your YOURLS API signature token (admin → Tools → API)\n\n## Permissions Explained\n\n| Permission | Why it's needed |\n|---|---|\n| `activeTab` | Read the current tab's URL when you click the extension icon — only on user action, never in the background. |\n| `storage` | Save your server configs and preferences via `chrome.storage.sync`. |\n| `contextMenus` | Add the right-click \"Shorten This Link\" and \"Shorten Page URL with keyword\" menu items. |\n| `clipboardWrite` | Copy the shortened URL to your clipboard automatically. |\n| `optional_host_permissions` | Declared as **optional** — granted per-domain only when you add a server, never blanket-granted at install. |\n\n## Architecture\n\nQuickYOURLS is a standard Manifest V3 extension with three moving parts:\n\n| File | Purpose |\n|---|---|\n| `extension/manifest.json` | Extension config, permissions, icon refs |\n| `extension/background.js` | Service worker — acts as a CORS proxy for API calls and handles context menus |\n| `extension/popup.{html,js,css}` | The toolbar popup UI |\n| `extension/options.{html,js,css}` | Settings page — server management and preferences |\n| `extension/icons/` | Icon set (16/32/48/128 px) + SVG source |\n\nThe service worker is what actually makes the HTTP requests to your YOURLS server. The popup and options pages send messages via `chrome.runtime.sendMessage`, and the background script performs the `fetch()` — this is why the extension works even though the popup itself can't bypass CORS. API calls use the standard YOURLS POST format to `/yourls-api.php` with `signature`, `action`, and `format=json`.\n\n## Building / Packaging\n\nTo create a zip for Chrome Web Store submission or unpacked distribution:\n\n```bash\ncd extension\nzip -r ../QuickYOURLS.zip . -x \"*.DS_Store\" \"*Thumbs.db*\"\n```\n\nOr just zip the `extension/` folder's contents (not the folder itself) with any tool.\n\n## Project Structure\n\n```\nQuickYOURLS/\n├── extension/              # The Chrome extension — load this as \"unpacked\"\n│   ├── manifest.json\n│   ├── background.js       # Service worker (API proxy + context menus)\n│   ├── popup.{html,js,css} # Toolbar popup\n│   ├── options.{html,js,css} # Settings page\n│   └── icons/              # 16/32/48/128 px icons + SVG source\n├── store-assets/           # Chrome Web Store submission docs\n│   ├── description.txt\n│   ├── privacy-policy.txt\n│   ├── single-purpose.txt\n│   ├── screenshot-guide.md\n│   └── store-listing.md\n└── PROJECT_BRIEF.md        # Internal project notes\n```\n\n## Companion Plugins\n\nQuickYOURLS pairs well with these server-side YOURLS plugins from the same author:\n\n- **[YOURLS Users and API Tokens](https://github.com/belmontdigitalmarketing/YOURLS-Users-and-API-Tokens)** — multi-user accounts with per-integration, labeled, rotatable, revocable API tokens. **Recommended for QuickYOURLS:** instead of pasting your master admin signature token into the extension (or sharing it with a teammate), issue a scoped token per device or per person and revoke it independently if a browser is lost.\n- **[Custom Fields \u0026 Notifier for YOURLS](https://github.com/belmontdigitalmarketing/custom-fields-and-notifier)** — configurable per-link custom fields, webhook notifications on click, bot filtering, and extra dashboard columns. Useful for tagging shortened URLs (campaign IDs, segments) and triggering downstream automations when a link is clicked.\n\n## Changelog\n\n### 2.0.0 — Initial public release\n- One-click URL shortening from the toolbar popup.\n- Up to 5 YOURLS server instances with a popup-level switcher.\n- Right-click context menus: shorten any link, or shorten the page URL with selected text as the keyword.\n- Optional host permissions — access granted per-domain only when you add a server, never blanket-granted at install.\n- Connection testing, auto-copy to clipboard, 30-second request timeout.\n\n## Support \u0026 Contributing\n\n- **Issues / feature requests**: \u003chttps://github.com/belmontdigitalmarketing/QuickYOURLS/issues\u003e\n- **Website**: \u003chttps://belmontdigitalmarketing.com/chrome-extensions\u003e\n\nPull requests welcome. For non-trivial changes, please open an issue first to discuss the approach.\n\n## License\n\n[MIT](LICENSE) — free to use, modify, and distribute. No warranty.\n\n## Credits\n\nDeveloped by **[Belmont Digital Marketing](https://belmontdigitalmarketing.com)**.\n\nInspired by — but built independently from — the [YOURLS Link Shortener](https://chromewebstore.google.com/detail/yourls-link-shortener/bpaidpglokfmipgcbippdmcncngcjghh) extension by SimplyTil. We reviewed their public source to understand the YOURLS API integration pattern, then wrote QuickYOURLS from scratch with optional host permissions and a multi-server design.\n\n---\n\nMade for the YOURLS community.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbelmontdigitalmarketing%2Fquickyourls","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbelmontdigitalmarketing%2Fquickyourls","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbelmontdigitalmarketing%2Fquickyourls/lists"}