context-attachment-manager
Codex and Claude Code plugin (works in Claude Desktop): choose which past images go to the model with your next message. Unchecked images become placeholders, the conversation goes on, and requests st
把标签页放到侧边栏,和 Chrome 顶部标签栏双向同步。Vertical tabs that stay in sync with Chrome's own tab strip — try it live.
Translation pending
PluginsGitHub @winzipsdoOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
Arc-style vertical tabs sidebar for Chrome: child tabs, spaces, pinned tabs and favorites, synced with Chrome's tab strip.
Taken from the repository README
Loading the full README.
Read the full README ↗把标签页放到侧边栏:垂直排列,支持子标签和空间,常用的固定在顶部。
Arc 风格的 Chrome 侧边标签栏。基于 Manifest V3 和 chrome.sidePanel,纯原生 JS/CSS,无构建步骤、无依赖;不联网,数据只存在本机。
| 子标签与别名 | 空间与深色模式 |
|---|---|
快捷键见下文的快捷键与操作。
Ctrl/⌘+点击选中多个标签页,Shift+点击连选,和顶部标签栏的多选同步;拖动其中一个就一起移动,右键其中一个可以一起关闭、休眠或移到别的空间。点空白处或按 Esc 取消。# 锚点),会直接切到已有的那个并关掉新开的;如果地址和某个还没打开的收藏或本空间的固定标签相同,新开的标签页会直接成为它的标签页,显示在收藏夹或固定标签里。Chrome 自带的「复制标签页」和恢复关闭的标签页不受影响。从网页里特意新开的标签页(Ctrl/⌘+点击、鼠标中键、在新标签页打开的链接)不合并,地址重复也照样单独打开。/、Ctrl/⌘+F 展开;输入即过滤;回车跳到第一个匹配项,没有匹配时打开网址或用默认搜索引擎搜索。输入两个字以上,下面还会列出最近 30 天里匹配的历史记录(最多 8 条,已经开着的不重复),点一下打开,点叉号从历史记录里删掉。Ctrl/⌘+W 关的,仍按 Chrome 自己的规则。sidearc-<版本号>.zip 并解压。想跟着最新代码走,也可以直接克隆本仓库。chrome://extensions,开启右上角的「开发者模式」,点「加载已解压的扩展程序」,选择解压出的文件夹(或仓库所在文件夹)。Alt+S(Mac 上是 ⌥ Option+S)打开/关闭侧边栏。需要 Chrome 116 或更高版本。
Chrome 的侧边栏默认在右侧。想让它像 Arc 一样在左边,打开 chrome://settings/appearance(设置 → 外观),把「侧边栏位置」改为「显示在左侧」。这是 Chrome 自己的设置,对所有侧边栏生效,扩展无法代为修改。
| 操作 | Windows / Linux | Mac |
|---|---|---|
| 打开 / 关闭侧边栏 | Alt+S | ⌥ Option+S |
| 撤销(焦点在侧边栏时) | Ctrl+Z | ⌘+Z |
| 展开搜索 | / 或 Ctrl+F | / 或 ⌘+F |
| 搜索栏:跳过匹配项,直接打开网址或搜索 | Ctrl+回车 | ⌘+回车 |
| 搜索栏:清空并收起 | Esc | Esc |
| 键盘选择:移动(从当前页面开始;在搜索栏里按 ↓ 从第一项开始) | ↑ ↓ ← → | ↑ ↓ ← → |
| 键盘选择:打开 / 关闭 / 右键菜单 | Enter / Delete / Shift+F10 | Enter / Delete / Shift+F10 |
| 键盘选择:文件夹展开 / 收起 | → / ← | → / ← |
| 右键菜单 | 鼠标右键 | 鼠标右键、Control+点按 或触控板双指点按 |
| 关闭标签页 | 鼠标中键或 ✕ | 鼠标中键或 ✕(触控板没有中键,用 ✕) |
| 重新打开刚关闭的标签页(Chrome 自带) | Ctrl+Shift+T | ⌘+Shift+T |
回车打开标签页后,Chrome 会把键盘焦点交给那个网页;要接着在侧边栏里选,按 F6 把焦点切回侧边栏(可能要按几次)。
打开侧边栏的快捷键可以在 chrome://extensions/shortcuts 里修改;如果它和别的扩展或系统快捷键冲突,Chrome 可能不会自动分配,需要在那里手动设置。
Sidearc 不收集、不上传任何数据,代码里没有网络请求。空间、收藏夹、固定标签、别名都保存在浏览器本地,卸载扩展即删除。完整说明见隐私政策。
| 权限 | 用来做什么 |
|---|---|
sidePanel | 全部界面都显示在浏览器侧边栏里。 |
tabs | 读取标签页的标题、网址和图标来列出它们,并执行切换、移动、关闭、新建。 |
storage | 在本地保存空间、收藏夹、固定标签、别名,以及重启后恢复用的标签页状态。 |
favicon | 显示收藏夹和固定标签的网站图标。 |
search | 在搜索栏输入关键词回车时,用浏览器的默认搜索引擎搜索。 |
clipboardWrite | 「复制链接地址」时把网址写入剪贴板,不读取剪贴板。 |
sessions | 撤销「关闭标签页」时,从最近关闭的记录里恢复它。 |
history | 只用于「不记录历史」的空间和文件夹:删除刚从里面访问的网址,不读取其他历史。 |
webNavigation | 判断新标签页是不是从某个页面里的链接打开的(子标签),以及它载入的地址是否已经打开(相同地址只开一份)。 |
tabGroups | 把每个空间显示成顶部标签栏里的一个标签页分组,切换空间时折叠其他空间的分组。 |
| 文件 | 作用 |
|---|---|
manifest.json | 扩展清单 |
background.js | 后台:点击图标开关侧边栏;子标签归属;相同地址查重;「不记录历史」;记录足迹和离开标签页的时间;标签页关闭后的清理;重启后的数据恢复 |
sidepanel.html / .css | 侧边栏的页面和样式 |
sidepanel.js | 侧边栏入口,只做初始化 |
boot.js | 打开侧边栏时先显示上次的画面,等数据读好再替换 |
src/store.js | 状态,以及读写状态的函数 |
src/render.js | 把状态画到页面上 |
src/tabs.js / items.js / spaces.js | 对标签页、收藏/固定项、空间的操作 |
src/menus.js / ui.js | 右键菜单的内容;提示条、撤销、菜单外壳、对话框 |
src/drag.js / events.js | 拖拽;事件绑定 |
src/keys.js | 键盘操作和选中框 |
src/leaves.js | 落叶 |
src/history.js | 搜索时的历史记录 |
src/groups.js | 后台:让顶部标签栏的顺序和分组跟侧边栏一致 |
src/folders.js | 固定标签里的文件夹 |
src/dom.js | 生成页面元素的小工具 |
src/i18n.js | 界面文案(中文和英文)和语言选择 |
_locales/ | 扩展名称下的简介、快捷键说明的中英文(由 Chrome 按浏览器语言显示) |
src/logic.js | 不碰浏览器的纯逻辑(网址判断、树形排列、拖拽落点、文件夹等) |
src/protocol.js | 侧边栏和后台共用的约定:会话存储的键、消息格式 |
test/ | src/logic.js、src/protocol.js 和 src/i18n.js 的测试 |
icons/ | 扩展图标 |
store/ | Chrome 应用商店的上架资料、截图和宣传图;store/screenshots/make.js 用来重新生成截图 |
README.en.md | 英文版说明 |
PRIVACY.md | 隐私政策 |
LICENSE |
没有构建步骤:代码是原生 ES 模块,改完在 chrome://extensions 里重新加载扩展即可。
测试用 Node 自带的测试运行器,不需要安装依赖(需要 Node 20 或更高版本):
npm test
界面改动后,可以重新生成应用商店的截图和小宣传图,中英文各一套(英文版在 store/en/;需要本机装有 Chrome,侧边栏部分直接套用 sidepanel.css):
npm run screenshots
发版是自动的:main 上 manifest.json 的版本号一变,GitHub Actions(.github/workflows/release.yml)就会跑测试、打包,创建 v<版本号> 标签和 GitHub Release,附上 zip,说明从 CHANGELOG.md 里自动挑出这个版本包含的条目。
manifest.json 里的 version(新功能加第二位,只修问题加第三位,比如 1.4.1 → 1.5.0 / 1.4.2),和更新日志一起提交。main。几分钟后在仓库的 Releases 页面就能看到新版本;进度在 Actions 页面看。本地预览这次 Release 的说明(默认从最近的版本标签算起):
npm run release-notes
本地打包(不发布):
npm run pack
说明是按更新日志里每条末尾的提交链接挑的:条目引用的提交在这个版本范围里,就会被收进去。所以更新日志里的条目要带上提交链接。
主页 https://winzipsdo.github.io/sidearc/ 由 gh-pages 分支直接发布:分支根目录的 index.html、style.css、main.js、assets/(含介绍视频)就是主页本身,store/、icons/ 是从 main 复制过去的截图和图标。生成主页和介绍视频的脚本也放在这个分支的 source/ 下,详细步骤见该分支的 source/README.md。
常见的维护场景:
gh-pages 分支,直接改 index.html,提交推送后几分钟内生效。main 上运行 npm run screenshots 并提交,再把 store/screenshot-*.jpg 和 store/en/screenshot-*.jpg 复制到 gh-pages 分支的同名位置,提交推送。source/README.md 的步骤重新生成视频。视频脚本会用到 main 上的 sidepanel.css 和 store/screenshots/brand-icons.js,所以要在 main 的检出目录里临时搭一个 site/ 来跑,跑完删掉,不要提交到 main。不建议在 main 的工作区里直接切换到 gh-pages 分支来改:两个分支的文件完全不同。可以另开一个工作目录:
git worktree add ../sidearc-pages gh-pages
Sidearc 免费、开源。觉得好用的话,可以在 GitHub Sponsors 赞助一下;侧边栏右下角的设置菜单里也有「支持 Sidearc」。
| 开源许可证(MIT) |
CHANGELOG.md | 更新日志 |
scripts/pack.js | 打包上架用的 zip(npm run pack) |
scripts/release-notes.js | 从更新日志生成 Release 说明(npm run release-notes) |
.github/workflows/release.yml | 版本号变了就自动发 Release |