{"id":19916049,"url":"https://github.com/szhu/pushpin","last_synced_at":"2026-02-14T09:39:10.734Z","repository":{"id":69589521,"uuid":"84455841","full_name":"szhu/pushpin","owner":"szhu","description":"Keep your favorite pinned tabs around.","archived":false,"fork":false,"pushed_at":"2025-07-11T14:42:04.000Z","size":53672,"stargazers_count":16,"open_issues_count":3,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-12T09:01:45.948Z","etag":null,"topics":["chrome","chrome-extension","pinned-tabs","productivity","typescript"],"latest_commit_sha":null,"homepage":"https://chromewebstore.google.com/detail/oeccdogiekfcglkneepeaodoendiikic","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/szhu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2017-03-09T15:12:38.000Z","updated_at":"2025-04-09T10:11:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"47b16557-ed08-41d2-a6fb-b2ee0749918e","html_url":"https://github.com/szhu/pushpin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/szhu/pushpin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/szhu%2Fpushpin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/szhu%2Fpushpin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/szhu%2Fpushpin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/szhu%2Fpushpin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/szhu","download_url":"https://codeload.github.com/szhu/pushpin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/szhu%2Fpushpin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29442128,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T07:24:13.446Z","status":"ssl_error","status_checked_at":"2026-02-14T07:23:58.969Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["chrome","chrome-extension","pinned-tabs","productivity","typescript"],"created_at":"2024-11-12T21:43:19.659Z","updated_at":"2026-02-14T09:39:10.713Z","avatar_url":"https://github.com/szhu.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pushpin\n\n### Pushpin is a Chrome extension that helps you save and restore pinned tabs.\n\n[![Available in the Chrome Web Store](resources/badge-chrome-web-store.png)](https://chrome.google.com/webstore/detail/oeccdogiekfcglkneepeaodoendiikic)\n\n![screen recording](resources/screencast-0-800@15.gif)\n\nIf you use pinned tabs in Chrome, you might be frustrated by how easy it is to\naccidentally lose all of them.\n\nWith Pushpin, you can:\n\n- Save your preferred set of pinned tabs\n- Instantly reset any or all pinned tabs back to your saved configuration\n- Move your pinned tabs to the front window without reloading them\n- Set keyboard shortcuts for each pinned tab (shortcuts can be global)\n- Modify your keyboard shortcuts so that Ctrl/Cmd-_n_ will open the _n_-th\n  unpinned tab\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cstrong\u003eUsage guide\u003c/strong\u003e\u003c/summary\u003e\n\n#### Save and restore your pinned tabs\n\nPushpin lets you configure your preferred set of pinned tabs. Right-click the\nPushpin icon, go to Options, and add a list of URLs.\n\nTo open your pinned tabs in the current window, click the Pushpin icon. If the\npinned tabs are already open in another window, Pushpin will move them to the\ncurrent window. This is done without reloading the tab, so it works seamlessly\neven if you have playing media or on a call in a pinned tab.\n\n#### Reload your pinned tabs\n\nIf you're on a pinned tab and you want to reset it back to the configured URL\n(or reload the tab), just click the Pushpin icon.\n\nWebapps are buggy sometimes, and sometimes you might need to reset all of them\nat once. Double-click Pushpin to reload all your pinned tabs.\n\n#### Set keyboard shortcuts for your pinned tabs\n\nAfter you've set up Pushpin, go to `chrome://extensions/shortcuts` to set up\nkeyboard shortcuts for your tabs.\n\nYou can set up a keyboard shortcut for each of your pinned tabs, so that you can\nquickly jump to the webapp you want. You can even make these shortcuts global so\nthat they work from any app! If you press the keyboard shortcut for a tab and\nyou are already on that tab, the tab will reload to the configured URL for that\npinned tab. (This is useful for when you've strayed far away from the original\npinned tab URL and you want to go back.)\n\n#### Set keyboard shortcuts for your unpinned tabs\n\nBy default on Chrome, Ctrl-1 - Ctrl-9 (Cmd-1 - Cmd-9 on Mac) will jump you to\nthe _n_-th tab, but this can be not ideal if you'd like these shortcuts to\nexclude the pinned tabs. With Pushpin, you can also set up keyboard shortcuts\nfor jumping to each unpinned tab. You can set them to Ctrl-1 - Ctrl-9 to\noverride the Chrome defaults.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cstrong\u003eFeature suggestion guide\u003c/strong\u003e\u003c/summary\u003e\n\n#### Possible future features\n\n- Add an option to prevent pinned tabs from being closed, either with a\n  confirmation dialog or by re-opening pinned tabs if they are closed.\n- Support multiple pinned tab configurations that can be cycled through.\n- Support pinned tab configurations (for example, keeping a tab always muted, or\n  having a tab be deactivated by default).\n- Quickly close or deactivate all pinned tabs.\n- Smarter restoration of tabs after some but not all of them have been closed.\n\n#### Requesting new features\n\nIf you want one the features above or any other feature, please request it by\n[creating an issue](https://github.com/szhu/pushpin/issues).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cstrong\u003eDevelopment guide\u003c/strong\u003e\u003c/summary\u003e\n\n#### Editing and testing changes locally\n\nThe setup of this project has been optimized to make contributions as simple as\npossible. There are no special tools required to edit this project's code --\nthere isn't even a compilation step!\n\nThe extensions's code is in `extension`. You can make changes and use the\nfollowing steps to test them:\n\n1. Go to `chrome://extensions`.\n2. If you have the published version of Pushpin installed, you might want to\n   temporarily turn it off to reduce confusion. You can do that by click the\n   on/off switch next to it.\n3. At the top-right, make sure **Developer mode** is turned on.\n4. Drag the `extension` folder into the tab.\n5. Note that the \"Pushpin\" entry has a reload (circular arrow) button next to\n   it. After modifying extension code, click the reload button to apply the\n   changes.\n\n#### Code style for PRs\n\nIf you are contributing PRs or otherwise want to avoid making bugs, this project\nhas a linter (ESLint), formatter (Prettier), and typechecker (TypeScript)\nconfigured to make sure that the code is as error-free and readable as possible.\n\n- To have these tools automatically check your code before each commit, just run\n  `npm install` (or `pnpm install` or `yarn install`).\n- You can also set up your editor to check for errors as you type. Follow the\n  step above, then install the plugins/extensions for ESLint, Prettier, and\n  TypeScript for your editor.\n- Note that this project uses TypeScript but not TypeScript syntax. Instead, we\n  use JavaScript with JSDoc comments that contain type information. This allows\n  us to avoid having a compile process, while having the same great\n  type-checking that TypeScript can provide. TS/JSDoc syntax reference:\n  https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fszhu%2Fpushpin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fszhu%2Fpushpin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fszhu%2Fpushpin/lists"}