Click any screenshot to open the full-size image.
LinkedVault is a Windows-first desktop application for collecting, organizing, reading, and studying content you are allowed to access. It combines course archiving, newspaper retrieval and offline reading, and durable clipping notes in one local workspace.
The product name is intentionally broader than the original repository slug: LinkedVault is not limited to course downloads.
Study.md guide when available.Provider integrations depend on upstream sites and may require maintenance as their authentication or delivery formats change.
li_at cookie once, or use a supported browser session.Queued courses are persisted independently of the current LinkedIn session. If
the saved li_at cookie expires, LinkedVault keeps the queue and shows a
Resume queue action after you paste a fresh cookie. Right-click any queued
course row to copy its normalized course URL for safekeeping or retrying later.
For newspapers, open World Journal → Download editions, select editions and dates, then choose Download or Add schedule. Scheduled work appears in the Queue section (with Completed and Failed for history). There are no separate Schedule or History tabs. Completed and partial editions also appear under Newspaper library.
Your downloads are saved into the folder you picked. Your saved session is protected with Windows encryption and stored locally.
| Doc | Purpose |
|---|---|
| docs/architecture/README.md | Architecture source of truth (ADRs, ownership, layout) |
| CONTRIBUTING.md | Setup, verify commands, PR expectations |
| SECURITY.md | Vulnerability reporting and supported versions |
| CHANGELOG.md | Release notes |
| AGENTS.md | Contributor and coding-agent invariants |
| CODE_OF_CONDUCT.md | Community standards |
LinkedVault is designed for local archives. Saved sessions are protected with Windows encryption and application data stays on the machine unless you copy it elsewhere. Do not use LinkedVault to bypass DRM, paid access controls, robots.txt restrictions, rate limits, or a provider's terms. Only download, scrape, archive, or share material you have permission to access.
The project is not affiliated with LinkedIn, Coursera, World Journal, or any other content provider.
Issues and pull requests are welcome. Start with
CONTRIBUTING.md. Before changing provider behavior, read the
ownership and persistence contracts in
docs/architecture and the invariants in
AGENTS.md. For newspaper clippings, the native Tauri window is
required; the frontend-only preview cannot prove native persistence, window,
tray, or input behavior.
Use this when you want to work on the app from source.
git clone https://github.com/Howard-Starfield/LinkVault-Linkedin-Learning-Courses-Downloader.git LinkedVault
cd LinkedVault
npm --prefix apps\desktop install
npm run dev
If PowerShell blocks npm.ps1, either run this once:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
or use the .cmd shim:
npm.cmd run dev
The desktop app opens from Tauri. The Vite frontend runs at:
http://127.0.0.1:1420
Stop the development app with Ctrl+C in the terminal that launched it.
Run this test in the native Tauri window, not the frontend-only browser preview. Desktop commands, managed snapshot files, and native input behavior require the Tauri runtime.
Before testing, make sure World Journal → Newspaper library contains at least one downloaded edition with a readable completed page.
/. Confirm the popup is
visible above the note, then filter it and exercise Text,
To-do list, Heading 1–4, Bullet list, Numbered list,
Quote, and Divider with both pointer selection and the arrow keys
plus Enter. Confirm /h selects Heading 1, /todo selects
To-do list, /hr selects Divider, and a close typo such as
/heding still ranks Heading 1 first without executing it automatically.note.md sits beside
clipping-v1.webp and contains the saved Markdown. SQLite remains canonical:
editing note.md externally is not imported and may be overwritten by the
next save or startup repair.Newspaper snapshots/<edition>/; Settings must not offer an arbitrary
global snapshot-folder override.linkvault.exe, and the current clipping note remains
visible after its durability flush/refresh.Focused automated checks for this workflow:
npm --prefix apps\desktop run verify:clipping-note-editor-markdown
npm --prefix apps\desktop run verify:clipping-note-editor
npm --prefix apps\desktop run verify:clipping-note-autosave
npm --prefix apps\desktop run verify:clipping-note-lifecycle
npm --prefix apps\desktop run verify:clipping-note-durability-structure
npm --prefix apps\desktop run verify:clipping-note-durability-browser
npm --prefix apps\desktop run verify:newspaper-clipping-library
Backend ownership, the unified workflow decision, and the provider migration
roadmap live only under
docs/architecture — that directory is the
source of truth (there is no separate root ARCHITECTURE.md). Read that
contract before adding a provider, queue, scheduler, background worker, or
persisted job state.
Use this when you want a production executable or Windows installer.
npm run tauri -- build
Production outputs:
apps\desktop\src-tauri\target\release\linkvault.exe
apps\desktop\src-tauri\target\release\bundle\nsis\LinkedVault_<version>_x64-setup.exe
The release workflow runs when you push a version tag like vX.Y.Z. It builds the Windows installer, creates a GitHub release, and uploads latest.json for the in-app updater.
Tags with a prerelease suffix, such as vX.Y.Z-rc.1, are published as GitHub prereleases and do not replace the stable latest release.
apps/desktop/package.json, apps/desktop/src-tauri/Cargo.toml, and apps/desktop/src-tauri/tauri.conf.json.npm run build
npm run cargo:test
git tag vX.Y.Z
git push origin main
git push origin vX.Y.Z
Users on older signed builds can use the in-app update button after the GitHub release finishes.
This is useful for UI work, but desktop-only features need Tauri.
npm run web:dev
# open:
http://127.0.0.1:1420
Useful checks before sharing a build:
npm run cargo:test
npm run verify:visual
npm run verify:ui
npm run verify:release
npm run verify:installer
npm run verify:release-manifest
LinkedVault's original code is licensed under the MIT License. See
LICENSE for the full text. Third-party dependencies retain their
own licenses; see THIRD_PARTY_NOTICES.md and the
committed npm and Cargo lockfiles for dependency-specific information.
Copyright (c) 2026 Howard Deng.
116 commits
Rust
69.2%
TypeScript
17.7%
JavaScript
8.5%
CSS
4.5%
Click any screenshot to open the full-size image.
LinkedVault is a Windows-first desktop application for collecting, organizing, reading, and studying content you are allowed to access. It combines course archiving, newspaper retrieval and offline reading, and durable clipping notes in one local workspace.
The product name is intentionally broader than the original repository slug: LinkedVault is not limited to course downloads.
Study.md guide when available.Provider integrations depend on upstream sites and may require maintenance as their authentication or delivery formats change.
li_at cookie once, or use a supported browser session.Queued courses are persisted independently of the current LinkedIn session. If
the saved li_at cookie expires, LinkedVault keeps the queue and shows a
Resume queue action after you paste a fresh cookie. Right-click any queued
course row to copy its normalized course URL for safekeeping or retrying later.
For newspapers, open World Journal → Download editions, select editions and dates, then choose Download or Add schedule. Scheduled work appears in the Queue section (with Completed and Failed for history). There are no separate Schedule or History tabs. Completed and partial editions also appear under Newspaper library.
Your downloads are saved into the folder you picked. Your saved session is protected with Windows encryption and stored locally.
| Doc | Purpose |
|---|---|
| docs/architecture/README.md | Architecture source of truth (ADRs, ownership, layout) |
| CONTRIBUTING.md | Setup, verify commands, PR expectations |
| SECURITY.md | Vulnerability reporting and supported versions |
| CHANGELOG.md | Release notes |
| AGENTS.md | Contributor and coding-agent invariants |
| CODE_OF_CONDUCT.md | Community standards |
LinkedVault is designed for local archives. Saved sessions are protected with Windows encryption and application data stays on the machine unless you copy it elsewhere. Do not use LinkedVault to bypass DRM, paid access controls, robots.txt restrictions, rate limits, or a provider's terms. Only download, scrape, archive, or share material you have permission to access.
The project is not affiliated with LinkedIn, Coursera, World Journal, or any other content provider.
Issues and pull requests are welcome. Start with
CONTRIBUTING.md. Before changing provider behavior, read the
ownership and persistence contracts in
docs/architecture and the invariants in
AGENTS.md. For newspaper clippings, the native Tauri window is
required; the frontend-only preview cannot prove native persistence, window,
tray, or input behavior.
Use this when you want to work on the app from source.
git clone https://github.com/Howard-Starfield/LinkVault-Linkedin-Learning-Courses-Downloader.git LinkedVault
cd LinkedVault
npm --prefix apps\desktop install
npm run dev
If PowerShell blocks npm.ps1, either run this once:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
or use the .cmd shim:
npm.cmd run dev
The desktop app opens from Tauri. The Vite frontend runs at:
http://127.0.0.1:1420
Stop the development app with Ctrl+C in the terminal that launched it.
Run this test in the native Tauri window, not the frontend-only browser preview. Desktop commands, managed snapshot files, and native input behavior require the Tauri runtime.
Before testing, make sure World Journal → Newspaper library contains at least one downloaded edition with a readable completed page.
/. Confirm the popup is
visible above the note, then filter it and exercise Text,
To-do list, Heading 1–4, Bullet list, Numbered list,
Quote, and Divider with both pointer selection and the arrow keys
plus Enter. Confirm /h selects Heading 1, /todo selects
To-do list, /hr selects Divider, and a close typo such as
/heding still ranks Heading 1 first without executing it automatically.note.md sits beside
clipping-v1.webp and contains the saved Markdown. SQLite remains canonical:
editing note.md externally is not imported and may be overwritten by the
next save or startup repair.Newspaper snapshots/<edition>/; Settings must not offer an arbitrary
global snapshot-folder override.linkvault.exe, and the current clipping note remains
visible after its durability flush/refresh.Focused automated checks for this workflow:
npm --prefix apps\desktop run verify:clipping-note-editor-markdown
npm --prefix apps\desktop run verify:clipping-note-editor
npm --prefix apps\desktop run verify:clipping-note-autosave
npm --prefix apps\desktop run verify:clipping-note-lifecycle
npm --prefix apps\desktop run verify:clipping-note-durability-structure
npm --prefix apps\desktop run verify:clipping-note-durability-browser
npm --prefix apps\desktop run verify:newspaper-clipping-library
Backend ownership, the unified workflow decision, and the provider migration
roadmap live only under
docs/architecture — that directory is the
source of truth (there is no separate root ARCHITECTURE.md). Read that
contract before adding a provider, queue, scheduler, background worker, or
persisted job state.
Use this when you want a production executable or Windows installer.
npm run tauri -- build
Production outputs:
apps\desktop\src-tauri\target\release\linkvault.exe
apps\desktop\src-tauri\target\release\bundle\nsis\LinkedVault_<version>_x64-setup.exe
The release workflow runs when you push a version tag like vX.Y.Z. It builds the Windows installer, creates a GitHub release, and uploads latest.json for the in-app updater.
Tags with a prerelease suffix, such as vX.Y.Z-rc.1, are published as GitHub prereleases and do not replace the stable latest release.
apps/desktop/package.json, apps/desktop/src-tauri/Cargo.toml, and apps/desktop/src-tauri/tauri.conf.json.npm run build
npm run cargo:test
git tag vX.Y.Z
git push origin main
git push origin vX.Y.Z
Users on older signed builds can use the in-app update button after the GitHub release finishes.
This is useful for UI work, but desktop-only features need Tauri.
npm run web:dev
# open:
http://127.0.0.1:1420
Useful checks before sharing a build:
npm run cargo:test
npm run verify:visual
npm run verify:ui
npm run verify:release
npm run verify:installer
npm run verify:release-manifest
LinkedVault's original code is licensed under the MIT License. See
LICENSE for the full text. Third-party dependencies retain their
own licenses; see THIRD_PARTY_NOTICES.md and the
committed npm and Cargo lockfiles for dependency-specific information.
Copyright (c) 2026 Howard Deng.
116 commits
Rust
69.2%
TypeScript
17.7%
JavaScript
8.5%
CSS
4.5%