{"id":21847904,"url":"https://github.com/sethcottle/tabcloser","last_synced_at":"2025-04-14T13:33:22.245Z","repository":{"id":162243461,"uuid":"636829459","full_name":"sethcottle/tabcloser","owner":"sethcottle","description":"TabCloser automatically closes redirected tabs for Asana, Discord, Figma, Linear, Notion, Slack, Spotify, VS Code Live Share, Webex, and Zoom.","archived":false,"fork":false,"pushed_at":"2025-02-19T20:19:31.000Z","size":453,"stargazers_count":11,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-12T12:06:55.759Z","etag":null,"topics":["auto-close","chrome-extension","chromium-extension","edge-extension","tab","tab-management"],"latest_commit_sha":null,"homepage":"https://tabcloser.com","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sethcottle.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}},"created_at":"2023-05-05T18:39:52.000Z","updated_at":"2025-03-27T03:27:10.000Z","dependencies_parsed_at":"2024-01-18T17:55:24.462Z","dependency_job_id":"3e230df4-157c-45b6-bb24-f20c51924e3e","html_url":"https://github.com/sethcottle/tabcloser","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sethcottle%2Ftabcloser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sethcottle%2Ftabcloser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sethcottle%2Ftabcloser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sethcottle%2Ftabcloser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sethcottle","download_url":"https://codeload.github.com/sethcottle/tabcloser/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248888901,"owners_count":21178126,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["auto-close","chrome-extension","chromium-extension","edge-extension","tab","tab-management"],"created_at":"2024-11-27T23:20:02.980Z","updated_at":"2025-04-14T13:33:22.223Z","avatar_url":"https://github.com/sethcottle.png","language":"HTML","funding_links":["https://buymeacoffee.com/seth","https://www.paypal.com/paypalme/sethcottle","https://github.com/sponsors/sethcottle"],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"https://cdn.cottle.cloud/tabcloser/tabcloser.svg\" width=\"150\"\u003e\n\n# TabCloser 3\n\n[What is TabCloser?](https://github.com/sethcottle/tabcloser#what-is-tabcloser) | [TabCloser Options](https://github.com/sethcottle/tabcloser#tabcloser-options) | [URL Schemas](https://github.com/sethcottle/tabcloser#url-schema) | [Privacy and Permissions](https://github.com/sethcottle/tabcloser#requested-permissions) | [Installing TabCloser](https://github.com/sethcottle/tabcloser#installing-tabcloser) | [License](https://github.com/sethcottle/tabcloser#license)\n\n## What is TabCloser?\nKeep your tabs tidy, so you can stay focused. TabCloser eliminates those pesky leftover tabs from \u003cb\u003eAsana\u003c/b\u003e, \u003cb\u003eDiscord\u003c/b\u003e invites, \u003cb\u003eFigma\u003c/b\u003e files, \u003cb\u003eLinear\u003c/b\u003e, \u003cb\u003eNotion\u003c/b\u003e, \u003cb\u003eSlack\u003c/b\u003e, \u003cb\u003eSpotify\u003c/b\u003e, \u003cb\u003eVS Code Live Share\u003c/b\u003e, \u003cb\u003eWebex\u003c/b\u003e meetings, and \u003cb\u003eZoom\u003c/b\u003e meetings—leaving you with a clean browser and a clear path to productivity.\n\n![Tabs](https://cdn.cottle.cloud/tabcloser/appslist.svg)\n\n## TabCloser Options\n\nBy default, Asana, Discord invites, Figma, Notion, Slack, Spotify, VS Code Live Share, Webex Joins, and Zoom Joins are enabled. Just deselect any service that you don't want tabs to close for automatically. You can also change the interval that TabCloser uses to close a new tab once a new tab has been opened, by default it's `15 seconds`.\n\n![TabCloser Options](https://cdn.cottle.cloud/tabcloser/options.svg)\n\n#### Custom URLs\n\nTabCloser 3 brings the ability to add custom URLs to the detection criteria. TabCloser \u003cb\u003ewill only\u003c/b\u003e close URLs that are an \u003cb\u003eexact match\u003c/b\u003e to what is entered. That means if the URL is `https://example.com/` instead of `https://example.com`, TabCloser will not close the tab because the trailing `/` is missing from the end of the entry. The Custom URL options is great for closing out out specific pages you may use, like leftover tabs from SSO, VPN, ..etc redirect pages.\n\n![TabCloser Custom URL](https://cdn.cottle.cloud/tabcloser/custom-urls.svg)\n\n\n#### URL Schema\n\nLet's breakdown how TabCloser decides if it should close a tab. TabCloser is using regular expressions to look for a partial match on a dedicated URL for each service.\n\nHere's how TabCloser is handling URLs for each service:\n\n`^`: The start of the URL\n\n`https?://`: This will match \"http://\" or \"https://\"\n\n`([a-z0-9-]+\\\\.)?`: This isn't included in each service, but it's to detect a subdomain, followed by a dot \".\"\n\n`example\\\\.com/`: This matches the primary URL of a particular service\n\n\n#### Asana\nFor Asana, TabCloser is using `^https?://app\\\\.asana\\\\.com/-/desktop_app_link\\\\?.*`. \n\nThe `app.asana.com/-/desktop_app_link?` designates that an Asana link is being redirected to the native Asana client. `.*` will match any string that follows the `?`.\n\n#### AWS IAM Access Authorization\nFor the \"Authorization Successful\" page of the AWS IAM identity sign\nin flow, TabCloser is using\n`^https://[a-z0-9-]+\\\\.awsapps\\\\.com/start/user-consent/login-success.html`\n\nIt only matches on secure connections, as that page would never be served over a non-secure one. The domain `[a-z0-9-]+.awsapps.com` should capture any AWS organization (the subdomain), and the regex only matches on the `login-success.html` page to make sure login errors would not be hidden from you.\n\n#### Discord\nFor Discord, TabCloser is using `^https?://discord\\\\.com/invite/`. \n\nThe `/invite/` is associated with a Discord invite which can be opened in the Discord desktop client.\n\n#### Figma\nFor Figma, TabCloser is using three patterns: `^https?://(?:www\\.)?figma\\.com/design/` for Figma Design files, `^https?://(?:www\\.)?figma\\.com/board/` for FigJam files, and `^https?://(?:www\\.)?figma\\.com/slides/` for Figma Slide files (note that TabCloser will not close `/presentation/` files from shared Slide presentations).\n\nTabCloser \u003cb\u003ewill not\u003c/b\u003e close tabs for Figma Community profiles, templates, plugins, ..etc. Only file URLs which can be redirected to the Figma desktop client.\n\n#### Linear\nFor Linear, TabCloser is using `^https?://linear\\\\.app/.*\\\\?noRedirect=1$'`\n\nThe `\\\\?noRedirect=1$` designates that the URL was successfully redirected to the Linear desktop client.\n\n#### Microsoft Teams\nFor Microsoft Teams, TabCloser is using `^https?://teams\\\\.microsoft\\\\.com/dl/launcher/.*`\n\nThe `teams\\\\.microsoft\\\\.com` matches the domain \"teams.microsoft.com.\". `/dl/launcher/` is looking for the Teams launcher page that givesm you the ability to download, use the web app, or launch in your current Teams install.\n\n#### Notion\nFor Notion, TabCloser is using `^https?://www\\\\.notion\\\\.so/native/.*\u0026deepLinkOpenNewTab=true`\n\nThe `^https?://www\\\\.notion\\\\.so/native/` designates that it's being redirected to the native client. The `.*` allows for any string of content after the base URL. Then TabCloser is looking for an exact match on `\u0026deepLinkOpenNewTab=true` to make sure the redirect was successful.\n\n#### Slack\nSlack is a little more complicated that our typical regex patterns. TabCloser is using `^https?://(?!(app\\\\.slack\\\\.com|slack\\\\.com|api\\\\.slack\\\\.com|.*\\\\/(customize|account|apps)(\\\\/|$)|.*\\\\/home(\\\\/|$)))[a-z0-9-]+\\\\.(enterprise\\\\.)?slack\\\\.com/(?:.*|ssb/signin_redirect\\\\?.*$)`\n\n`(?!(app\\\\.slack\\\\.com|slack\\\\.com|api\\\\.slack\\\\.com|.*\\\\/(customize|account|apps)(\\\\/|$)|.*\\\\/home(\\\\/|$)))` is a negative lookahead assertion that excludes several important Slack URLs:\n- `app\\\\.slack\\\\.com` keeps the web client open\n- `slack\\\\.com` excludes the base Slack website\n- `api\\\\.slack\\\\.com` excludes developer docs\n- `.*\\\\/(customize|account|apps)(\\\\/|$)` excludes settings and configuration pages\n- `.*\\\\/home(\\\\/|$)` excludes the home page\n\n`[a-z0-9-]+\\\\.(enterprise\\\\.)?slack\\\\.com` matches both regular Slack workspaces (like `team.slack.com`) and enterprise workspaces (like `company.enterprise.slack.com`).\n\nTabCloser should close redirected tabs from:\n- Regular workspace redirects to the desktop app\n- Enterprise SSO sign-in redirects (like `company.enterprise.slack.com/ssb/signin_redirect`)\n\nTabCloser shouldn't close:\n- The Slack web client (app.slack.com)\n- Settings or configuration pages\n- The workspace home page\n- The main Slack website or docs\n\n#### Spotify\nFor Spotify, TabCloser is using `^https?://open\\\\.spotify\\\\.com`\n\nThe `open\\\\.` portion is typically associated with opening a song, artist, playlist, ..etc which can be opened in the Spotify desktop client.\n\n#### VS Code Live Share\nFor Live Share, TabCloser is using `^https?://vscode\\\\.dev/liveshare`. \n\nThe `/liveshare/` is associated with the Live Share URL which can be opened in the VS Code desktop client.\n\n#### Webex\nFor Webex, TabCloser is using `^https?://([a-z0-9-]+\\\\.)?webex\\\\.com/wbxmjs/joinservice`. \n\nThe `webex\\\\.com/wbxmjs/joinservice` is associated with the join meeting URL which can be opened in the Webex desktop client.\n\n#### Zoom\nFor Zoom, TabCloser is using `^https?://([a-z0-9-]+\\\\.)?zoom\\\\.us/[js]/[^/]+.*#success$`\n\n`([a-z0-9-]+\\\\.)?` matches to any subdomain that your Zoom may be using. `zoom\\\\.us/` matches the core URL. `[js]/` matches the `/j/` and `/s/` paths that the redirect URL may encounter. `[^/]+` matches the meeting ID. `.*` matches anything between the meeting ID and `#success`, this accounts for things like a `pwd` being included in the URL. And of course, `#success$` matches the \"#success\" at the end of URL that has been successfully redirected to the Zoom client.\n\n\n## Requested Permissions\nTabCloser requests a few permissions in the `manifest.json` file.\n\n`tabs` allows TabCloser to interact with your tabs, giving it the ability to run when a new tab is detected and if a matched URL is found, close that tab automatically.\n\n`storage` allows TabCloser to save your `enabled` or `disabled` auto close preferences for a particular service, saves custom URLs you enter, and saves the interval you've set for closing tabs from the options menu.\n\n#### Privacy\n\nTabCloser runs completely locally in your browser. It does not collect any analytics, it does not store any information about your tabs or browser history, it does not send any data back for processing or analysis. Your data is yours and yours alone. \n\n## Installing TabCloser\n\nTabCloser is available in the Google Chrome Web Store, the Microsoft Edge Add-ons Store, and available for manual download and installation.\n\n[![Get on the Google Chrome Web Store](https://cdn.cottle.cloud/tabcloser/buttons/button-webstore.svg)](https://chrome.google.com/webstore/detail/tabcloser/ebhkgfbgbcaphagkjbiffhnfbmkkbadb?hl=en\u0026authuser=0)\n\n[![Get on the Microsoft Edge Store](https://cdn.cottle.cloud/tabcloser/buttons/button-edge.svg)](https://microsoftedge.microsoft.com/addons/detail/tabcloser/odipgobonaabhgghappnhfjimopchehg)\n\n[![Get on the macOS App Store](https://cdn.cottle.cloud/tabcloser/buttons/button-macos.svg)](https://apps.apple.com/us/app/tabcloser-3/id6553966600?mt=12)\n\n[![Download the Latest GitHub Release](https://cdn.cottle.cloud/tabcloser/buttons/button-latest.svg)](https://github.com/sethcottle/tabcloser/zipball/main)\n\n\n#### For Chrome\nDownload the latest release and unzip it. Then navigate to `chrome://extensions/` and enable \"Developer mode\" using the toggle in the top right corner. Upload the extension manually by pressing \"Load unpacked\" and selecting the unzipped TabCloser folder.\n\n#### For Edge\nDownload the latest release and unzip it. Then navigate to `edge://extensions/` and enable \"Developer mode\" in the left sidebar, it's near the bottom. Upload the extension manually by pressing \"Load unpacked\" and selecting the unzipped TabCloser folder.\n\n#### For Safari\n`tabcloser-3.2.2-macos.zip` is available for download in the latest release. You can unzip this and drag TabCloser.app to your Applications folder. TabCloser.app was created using Xcode and signed for Direct Distribution, however there are a few steps you'll need to take to enable it. Once you install TabCloser you'll need to launch Safari and go to `Safari` \u003e `Settings` \u003e `Advanced` and check `Show features for web developers`. Once you've done that, go to the Developer tab and enable `Allow unsigned extensions`. [Need help? Watch the installation video](https://youtu.be/ZKSxBJY_g7c?si=7oH_BDfJDnXYTIY3).\n\n---\n\n## Support the Addon\n\nYou can support TabCloser by contributing through these links:\n\n[![Buy Me A Coffee](https://cdn.cottle.cloud/tabcloser/buttons/button-bmac.svg)](https://buymeacoffee.com/seth)\n\n[![PayPal](https://cdn.cottle.cloud/tabcloser/buttons/button-paypal.svg)](https://www.paypal.com/paypalme/sethcottle)\n\n[![GitHub Sponsors](https://cdn.cottle.cloud/tabcloser/buttons/button-ghs.svg)](https://github.com/sponsors/sethcottle)\n\nSigning up through these services through these affiliate links is also a good way to support TabCloser.\n\n[![Try DigitalOcean](https://cdn.cottle.cloud/tabcloser/buttons/button-do.svg)](https://m.do.co/c/632b45e20266)\n\n[![Try Fathom Analytics](https://cdn.cottle.cloud/tabcloser/buttons/button-fa.svg)](https://usefathom.com/ref/EQVZMV)\n\n---\n\n## 🆕 Stay Connected\n\nJoin the [Seth's Nook Discord](https://discord.gg/PrAEQFF2fK) server to get updates on LittleLink and more. Use the invite code `PrAEQFF2fK` or click the button below.\n\n[![Discord](https://cdn.cottle.cloud/tabcloser/buttons/button-discord.svg)](https://discord.gg/PrAEQFF2fK)\n\n---\n\n## License\n\nCopyright (C) 2023-2024 Seth Cottle\n\nTabCloser is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or any later version.\n\nTabCloser is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Please see the\n[GNU General Public License](https://www.gnu.org/licenses/quick-guide-gplv3.html) for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsethcottle%2Ftabcloser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsethcottle%2Ftabcloser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsethcottle%2Ftabcloser/lists"}