Obsidian plugin that remembers which Markdown tabs you pinned and automatically re-opens and re-pins them every time you restart Obsidian.
Author: SATOSprod
License: MIT — see LICENSE
Obsidian does not remember pinned tabs between restarts. Pin five notes you are actively working on, close the app — or it crashes, or your system reboots — and the next time you open Obsidian, those tabs are gone and everything is unpinned again. Pins Save fixes that by tracking every pinned Markdown note and restoring it automatically.
- Auto scan in background — while you work, the plugin listens for pin/unpin actions and saves the list automatically, with no manual step required
- Auto restore on startup — when Obsidian loads, every previously pinned note is reopened as a pinned tab, exactly as you left it
- Rename-safe — if a pinned file is renamed or moved, the saved path is updated automatically so the pin is never lost
- Delete-safe — if a pinned file is deleted, it is automatically removed from the saved list on the next scan
- Manual actions — three on-demand commands in the Command Palette:
- Scan pinned tabs now — force an immediate save of the current pinned notes
- Restore pinned notes now — force an immediate reopen/re-pin of all saved notes
- Clear saved pinned notes list — remove all saved entries without touching open tabs
- Status panel — live list of every note path currently tracked
- SVG icons, no emoji — clean, consistent settings UI
- Obsidian 1.7.2 or later
- Works on desktop and mobile
# 1. Clone the repository
git clone https://github.com/SATOSprod/pins-save.git
cd pins-save
# 2. Install dependencies
npm install
# 3. Build
npm run build
# Produces: main.jsCopy the following files into your vault:
<your-vault>/.obsidian/plugins/pins-save/
├── main.js ← compiled output
├── manifest.json
└── styles.css
Open Obsidian → Settings → Community plugins → Installed plugins and enable Pins Save.
npm run devOpen Settings → Pins Save.
| State | Behaviour |
|---|---|
| On | Every saved note is automatically reopened and re-pinned each time Obsidian starts |
| Off | Saved notes are kept, but nothing is reopened automatically — manual restore still works |
| State | Behaviour |
|---|---|
| On | A short confirmation notice appears after startup restoration finishes |
| Off | Restoration happens silently in the background |
All actions are available from the Command Palette (Ctrl/Cmd + P) or as buttons in the settings panel.
| Action | Description |
|---|---|
| Scan pinned tabs now | Immediately re-scans the workspace and saves the currently pinned notes. Safe to run multiple times. |
| Restore pinned notes now | Reopens and re-pins every saved note. Notes already open are simply re-pinned, not duplicated. |
| Clear saved pinned notes list | Removes all saved entries. Does not touch currently open or pinned tabs. |
The settings page shows a live list of tracked notes:
| Field | Description |
|---|---|
| Currently saved notes | Full vault-relative path of every note currently tracked for restoration |
pins-save/
├── main.ts ← TypeScript source
├── main.js ← compiled output (gitignored, built locally)
├── styles.css ← plugin styles
├── manifest.json ← Obsidian plugin manifest
├── package.json
├── tsconfig.json
├── esbuild.config.mjs
├── version-bump.mjs
├── versions.json
├── .gitignore
├── LICENSE
└── README.md
- On load, the plugin waits for
onLayoutReady, then attaches apinned-changelistener to every open Markdown leaf via Obsidian's Workspace API. - Whenever a tab is pinned or unpinned, the listener triggers a debounced save that writes the current list of pinned note paths to the plugin's local
data.json. - On the next startup, if auto-restore is enabled, the plugin opens each saved path with
workspace.getLeaf("tab")and callsleaf.setPinned(true)to restore the pin. - Listeners on
vault.on("rename")andvault.on("delete")keep the saved list accurate as files move or disappear. - All operations go through
app.vaultandapp.workspace, so they are compatible with local vaults and sync services alike.
This project is released under the MIT License.
See LICENSE for full terms.
© 2026 SATOSprod