Skip to main content

PDFDesk

Your reading desk for research papers.

Library, PDF reader, highlights, notes, and a complete log of your reading, all in one window, all on your machine.

PyPI Downloads Downloads / month Python License: MIT

pip install pdfdesk && pdfdesk
PDFDesk overview: reading stats, continue reading, reading calendar, up next and revision queue

Why PDFDesk

You read dozens of papers a month. A file manager tells you where a PDF lives. An annotation tool tells you what you marked. Neither tells you how you read it: when you opened it, how far you got, how long you actually spent, and what you concluded at the end of each sitting.

PDFDesk keeps that record for you. Every paper moves through a reading lifecycle, every sitting becomes a session, and every highlight and note links back to the page it came from. Months later you can see what you read and why it mattered.

📚 Organise

A library that knows where each paper is in your reading, from Inbox to Completed.

🖍️ Read & annotate

A fast PDF reader with colour-coded highlights and Markdown notes that link to pages.

📈 Remember

Sessions, a reading calendar, streaks and a daily revision queue bring papers back.


Read with highlights that mean something

PDFDesk reader with colour-coded highlights and the highlights panel

Select text on any page and pick a colour. Each colour has one job, so a page of highlights reads at a glance:

Colour Meaning
🟨 Yellow Key idea
🟩 Green Method or result
🟦 Blue Definition
🟥 Pink Question or doubt
  • Add a comment to any highlight, and filter the panel by colour.
  • Click a highlight in the panel to jump straight to it in the PDF.
  • Highlights store the selected text as well as their position, so they stay put when you zoom.
  • Extract to notes pulls every highlight into your notes, each with its page reference.

Notes that point back to the page

PDFDesk notes panel with Markdown and page links next to the PDF
  • Write in Markdown: headings, bullets, quotes.
  • Type p. 12 anywhere and it becomes a link to page 12.
  • Cite p. N drops in a reference to the page you're on.
  • Insert highlights adds your highlights to the notes, each with its page.
  • Copy exports the notes as Markdown, ready for your paper, wiki or Obsidian vault.
  • Notes save automatically as you type.

A library that follows your reading

PDFDesk library with status, progress, last read and tags for each paper

Every paper has a place in the reading lifecycle:

Inbox → Planned → Reading → Paused → Completed → Revisit

  • Opening a paper moves it to Reading. When you reach the last page, PDFDesk asks whether it's Completed or worth a Revisit.
  • Import by button or drag and drop. Title, authors and page count come from the PDF itself.
  • Search by title, author or tag from anywhere.
  • Tags in the sidebar, with counts, for one-click filtering.
  • See each paper's status, progress bar, pages read and when you last opened it.
  • Set a target page and date ("finish section 3 by Friday") and it shows up in Up next.

Every session, recorded

PDFDesk logs each sitting with a paper on its own:

  • Active time only. The clock pauses when the tab is hidden or you've been idle for 3 minutes, so your stats count reading, not open tabs.
  • Pages covered: the first and last page you reached.
  • A takeaway: an optional line on what you got out of the session.
  • Resume where you left off: every paper reopens at your last page.
  • Bookmarks for pages you'll come back to.

Your reading, at a glance

The overview turns your sessions into a picture of your reading:

  • Stats: papers in your library, reading now, completed, time and pages this week.
  • Continue reading: papers in progress, with a progress bar and a one-click resume.
  • Reading calendar: a 17-week heatmap of your reading days, with your current streak and total hours.
  • Up next: planned and paused papers, sorted by target date.
  • Revision queue: highlights from finished papers come back each day, so ideas don't fade.
  • Reading log: every session, newest first.

Easy on the eyes, day and night

PDFDesk reader in dark mode

Dark mode follows your system setting. Typography is set for long reading sessions: Source Serif 4 for titles and notes, IBM Plex Sans for the interface, IBM Plex Mono for numbers and page references.

Keyboard shortcuts

Key Action
j or → Next page
k or ← Previous page
b Bookmark this page
Enter in the page box Jump to page
Esc Close the highlight menu

Private by design

  • 🔒 Local-first. Your PDFs, notes and history stay on your computer. No account, no cloud, no tracking.
  • ✈️ Works offline. The PDF engine and fonts ship inside the package. Nothing loads from the internet.
  • 🪶 Lightweight. One small package with zero Python dependencies. If you have Python 3.9+, you can run it.

Get started

pip install pdfdesk
pdfdesk

PDFDesk opens in your browser at http://localhost:5173. A few example papers are loaded so you can explore. Remove them from the sidebar when you're ready, then drop in your own PDFs.

pdfdesk --no-browser      # start without opening a browser window
pdfdesk --port 8080       # use another port
pdfdesk --version

Upgrade any time with pip install -U pdfdesk.

Good to know: in this version your library is stored in the browser you open PDFDesk in, for the address localhost:5173. Keep using the same browser and the default port and your library will be there every time. Uninstalling the package doesn't delete it.

What's coming

PDFDesk is at 0.1, an early release. Next up:

  • Export and import your whole library, PDFs included.
  • arXiv and DOI import: paste an id and the title, authors, year and venue fill themselves in.
  • Full-text search across notes and highlights.
  • PDF outline in the sidebar, from the paper's table of contents.
  • PDFDesk 1.0 as a native desktop app (Tauri + SQLite), installed the same way, with pip install -U pdfdesk.
  • Later: links between papers, spaced revision, weekly reading reports, Zotero import.

The full plan is in docs/roadmap.md.

Contributing

Bug reports and ideas are welcome in Issues. To work on the code, start with DEVELOPMENT.md.

License

MIT. Bundled third-party code keeps its own licence: PDF.js (Apache-2.0) and the Source Serif 4, IBM Plex Sans and IBM Plex Mono fonts (SIL Open Font License 1.1).


Built for people who read papers for a living.

Metadata

Release files for pdfdesk 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pdfdesk 0.1.0
File Size Uploaded Provenance Actions
pdfdesk-0.1.0.tar.gz 1.4 MB Without provenance Details for pdfdesk-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pdfdesk 0.1.0
File Interpreter ABI Platform Actions
pdfdesk-0.1.0-py3-none-any.whl Python 3 none any Details for pdfdesk-0.1.0-py3-none-any.whl

Total release size: 2.8 MB

Release files / pdfdesk-0.1.0.tar.gz

Download URL pdfdesk-0.1.0.tar.gz
Size 1.4 MB
Tags Source
SHA-256 checksum
How to use checksums
452bc30bf1e1ae537b43d157530789880e85e9d1c78f13b084adfa04193e414b
BLAKE2b-256 checksum
How to use checksums
ff3748a013ef67315c9d8293769a59e9dafba962c4d774891bb1ac628d857f9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.5

Release files / pdfdesk-0.1.0-py3-none-any.whl

Download URL pdfdesk-0.1.0-py3-none-any.whl
Size 1.4 MB
Tags Python 3
SHA-256 checksum
How to use checksums
c7421d3920889c2903a64dba5e6439adffa1f44426623ce3a6e6d80e13c4342e
BLAKE2b-256 checksum
How to use checksums
de643cf85867cfe3d7b5e54eba21da21c7101595d192967797cbaf3aad2de9c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.5

Security for pdfdesk 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page