studydesk 1.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. studydesk-1.2.0/.gitignore +14 -0
  2. studydesk-1.2.0/LICENSE +21 -0
  3. studydesk-1.2.0/PKG-INFO +260 -0
  4. studydesk-1.2.0/README.md +239 -0
  5. studydesk-1.2.0/prototype/app.js +1865 -0
  6. studydesk-1.2.0/prototype/index.html +40 -0
  7. studydesk-1.2.0/prototype/styles.css +459 -0
  8. studydesk-1.2.0/prototype/vendor/fonts/OFL-ibmplexmono.txt +93 -0
  9. studydesk-1.2.0/prototype/vendor/fonts/OFL-ibmplexsans.txt +93 -0
  10. studydesk-1.2.0/prototype/vendor/fonts/OFL-sourceserif4.txt +93 -0
  11. studydesk-1.2.0/prototype/vendor/fonts/fonts.css +151 -0
  12. studydesk-1.2.0/prototype/vendor/fonts/ibm-plex-mono-400-latin-ext.woff2 +0 -0
  13. studydesk-1.2.0/prototype/vendor/fonts/ibm-plex-mono-400-latin.woff2 +0 -0
  14. studydesk-1.2.0/prototype/vendor/fonts/ibm-plex-mono-500-latin-ext.woff2 +0 -0
  15. studydesk-1.2.0/prototype/vendor/fonts/ibm-plex-mono-500-latin.woff2 +0 -0
  16. studydesk-1.2.0/prototype/vendor/fonts/ibm-plex-sans-400-latin-ext.woff2 +0 -0
  17. studydesk-1.2.0/prototype/vendor/fonts/ibm-plex-sans-400-latin.woff2 +0 -0
  18. studydesk-1.2.0/prototype/vendor/fonts/ibm-plex-sans-500-latin-ext.woff2 +0 -0
  19. studydesk-1.2.0/prototype/vendor/fonts/ibm-plex-sans-500-latin.woff2 +0 -0
  20. studydesk-1.2.0/prototype/vendor/fonts/ibm-plex-sans-600-latin-ext.woff2 +0 -0
  21. studydesk-1.2.0/prototype/vendor/fonts/ibm-plex-sans-600-latin.woff2 +0 -0
  22. studydesk-1.2.0/prototype/vendor/fonts/source-serif-4-400-latin-ext.woff2 +0 -0
  23. studydesk-1.2.0/prototype/vendor/fonts/source-serif-4-400-latin.woff2 +0 -0
  24. studydesk-1.2.0/prototype/vendor/fonts/source-serif-4-600-latin-ext.woff2 +0 -0
  25. studydesk-1.2.0/prototype/vendor/fonts/source-serif-4-600-latin.woff2 +0 -0
  26. studydesk-1.2.0/prototype/vendor/fonts/source-serif-4-700-latin-ext.woff2 +0 -0
  27. studydesk-1.2.0/prototype/vendor/fonts/source-serif-4-700-latin.woff2 +0 -0
  28. studydesk-1.2.0/prototype/vendor/pdfjs/LICENSE +177 -0
  29. studydesk-1.2.0/prototype/vendor/pdfjs/pdf.min.js +22 -0
  30. studydesk-1.2.0/prototype/vendor/pdfjs/pdf.worker.min.js +22 -0
  31. studydesk-1.2.0/pyproject.toml +45 -0
  32. studydesk-1.2.0/reference/README.md +20 -0
  33. studydesk-1.2.0/studydesk/__init__.py +3 -0
  34. studydesk-1.2.0/studydesk/__main__.py +3 -0
  35. studydesk-1.2.0/studydesk/cli.py +312 -0
  36. studydesk-1.2.0/studydesk/lookup.py +162 -0
  37. studydesk-1.2.0/studydesk/store.py +188 -0
@@ -0,0 +1,14 @@
1
+ node_modules/
2
+ dist/
3
+ target/
4
+ .DS_Store
5
+ Thumbs.db
6
+ *.log
7
+ .env
8
+ # personal test PDFs
9
+ samples/*.pdf
10
+
11
+ # Python packaging
12
+ __pycache__/
13
+ *.egg-info/
14
+ .venv/
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Subham Divakar
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,260 @@
1
+ Metadata-Version: 2.5
2
+ Name: studydesk
3
+ Version: 1.2.0
4
+ Summary: A local-first workspace for reading research papers: PDF reader, highlights, notes, search and a history of your reading.
5
+ Project-URL: Homepage, https://github.com/shubham10divakar/studydesk
6
+ Project-URL: Source, https://github.com/shubham10divakar/studydesk
7
+ Project-URL: Issues, https://github.com/shubham10divakar/studydesk/issues
8
+ Project-URL: Roadmap, https://github.com/shubham10divakar/studydesk/blob/main/docs/roadmap.md
9
+ Author: Subham Divakar
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: local-first,notes,papers,pdf,reader,research
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Environment :: Web Environment
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Topic :: Scientific/Engineering
19
+ Requires-Python: >=3.9
20
+ Description-Content-Type: text/markdown
21
+
22
+ <div align="center">
23
+
24
+ # StudyDesk
25
+
26
+ ### Your reading desk for research papers.
27
+
28
+ **Library, PDF reader, highlights, notes, and a complete log of your reading, all in one window, all on your machine.**
29
+
30
+ [![PyPI](https://img.shields.io/pypi/v/studydesk?color=2f55d4&label=pypi)](https://pypi.org/project/studydesk/)
31
+ [![Downloads](https://img.shields.io/pepy/dt/studydesk?label=downloads)](https://pepy.tech/projects/studydesk)
32
+ [![Downloads / month](https://img.shields.io/pypi/dm/studydesk?label=downloads%2Fmonth)](https://pypistats.org/packages/studydesk)
33
+ [![Python](https://img.shields.io/pypi/pyversions/studydesk)](https://pypi.org/project/studydesk/)
34
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green)](https://github.com/shubham10divakar/studydesk/blob/main/LICENSE)
35
+
36
+ ```bash
37
+ pip install studydesk && studydesk
38
+ ```
39
+
40
+ <img src="https://raw.githubusercontent.com/shubham10divakar/studydesk/main/docs/assets/overview.png" alt="StudyDesk overview: reading stats, continue reading, reading calendar, up next and revision queue" width="100%">
41
+
42
+ </div>
43
+
44
+ > [!NOTE]
45
+ > **StudyDesk was called PDFDesk.** It is growing from a PDF reader into a desk for everything you study: links, PDFs, documents and notes. Coming from `pdfdesk`? Run `pip install studydesk && studydesk`: your library in `~/PDFDesk` is used as it is, nothing to export or move. `pdfdesk` 1.1.1 was the last release under the old name.
46
+
47
+ ---
48
+
49
+ ## New in 1.1
50
+
51
+ - 🔗 **Add a paper by link, without the PDF:** found it on Google Scholar but can't get the PDF? Keep the link, abstract, tags and notes now (paste Scholar's BibTeX to fill in the details) and attach the PDF later.
52
+ - 🏷️ **Tags suggest themselves:** your existing tags are listed as you type, most used first.
53
+ - 📝 **Abstracts** for every paper, included in search.
54
+
55
+ ## New in 1.0
56
+
57
+ - 🔗 **Links in your PDFs work:** citations, figure and section references jump to the exact spot, and **Back** (`Alt+←`) returns you.
58
+ - 📑 **Contents tab** from the paper's own outline, marking the section you're reading.
59
+ - 🔎 **Search everything:** titles, authors, tags, and inside your highlights, comments, notes and session takeaways.
60
+ - ➕ **Add by arXiv ID or DOI:** paste `1706.03762` and the paper arrives with its details and PDF.
61
+ - 🖍️ **Highlights survive a new PDF version:** replace the file and they find their text again.
62
+ - 🧭 **Panel and page are connected:** click a highlight on the page to open it, or in the panel to see it on the page.
63
+ - ↔️ **Room to read:** hide the sidebar and the notes panel with `[` and `]`.
64
+ - ✏️ **Fix a session** logged by mistake.
65
+
66
+ Full list in [CHANGELOG.md](https://github.com/shubham10divakar/studydesk/blob/main/CHANGELOG.md).
67
+
68
+ ## Why StudyDesk
69
+
70
+ 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.
71
+
72
+ StudyDesk 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.
73
+
74
+ <table>
75
+ <tr>
76
+ <td width="33%" valign="top">
77
+
78
+ ### 📚 Organise
79
+ A library that knows where each paper is in your reading, from *Inbox* to *Completed*.
80
+
81
+ </td>
82
+ <td width="33%" valign="top">
83
+
84
+ ### 🖍️ Read & annotate
85
+ A fast PDF reader with colour-coded highlights and Markdown notes that link to pages.
86
+
87
+ </td>
88
+ <td width="33%" valign="top">
89
+
90
+ ### 📈 Remember
91
+ Sessions, a reading calendar, streaks and a daily revision queue bring papers back.
92
+
93
+ </td>
94
+ </tr>
95
+ </table>
96
+
97
+ ---
98
+
99
+ ## Read with highlights that mean something
100
+
101
+ <img src="https://raw.githubusercontent.com/shubham10divakar/studydesk/main/docs/assets/reader-highlights.png" alt="StudyDesk reader with colour-coded highlights and the highlights panel" width="100%">
102
+
103
+ Select text on any page and pick a colour. Each colour has one job, so a page of highlights reads at a glance:
104
+
105
+ | | Colour | Meaning |
106
+ |---|---|---|
107
+ | 🟨 | Yellow | Key idea |
108
+ | 🟩 | Green | Method or result |
109
+ | 🟦 | Blue | Definition |
110
+ | 🟥 | Pink | Question or doubt |
111
+
112
+ - Add a comment to any highlight, and filter the panel by colour.
113
+ - **Links work like in a PDF reader:** click a citation, a section or figure reference, or a contents entry to jump to the exact spot; web links open in a new tab. After following a link, **Back to p. N** (or `Alt+←`) returns you to exactly where you were.
114
+ - Click a highlight in the panel to jump straight to it in the PDF: it scrolls to the page and flashes. It works the other way too: click a highlight on the page and the panel opens at it, ready for a comment.
115
+ - Highlights store the selected text as well as their position, so they stay put when you zoom.
116
+ - **Got a newer version of the PDF?** Replace it and your highlights find their text again, even on a different page or slightly reworded. Any that can't be found are kept and marked.
117
+ - **Extract to notes** pulls every highlight into your notes, each with its page reference.
118
+ - **Contents tab:** the PDF's own outline, with the section you're reading marked. Click a section to jump there.
119
+ - **Make room for the page:** hide the sidebar and the notes panel (`[` and `]`, or the buttons at either end of the toolbar) and wide pages and slides get the full width.
120
+
121
+ ## Notes that point back to the page
122
+
123
+ <img src="https://raw.githubusercontent.com/shubham10divakar/studydesk/main/docs/assets/reader-notes.png" alt="StudyDesk notes panel with Markdown and page links next to the PDF" width="100%">
124
+
125
+ - Write in **Markdown**: headings, bullets, quotes.
126
+ - Type `p. 12` anywhere and it becomes a link to page 12. When the line quotes one of your highlights, the link takes you to that exact highlight.
127
+ - **Cite p. N** drops in a reference to the page you're on.
128
+ - **Insert highlights** adds your highlights to the notes, each with its page.
129
+ - **Copy** exports the notes as Markdown, ready for your paper, wiki or Obsidian vault.
130
+ - Notes save automatically as you type.
131
+
132
+ ## A library that follows your reading
133
+
134
+ <img src="https://raw.githubusercontent.com/shubham10divakar/studydesk/main/docs/assets/library.png" alt="StudyDesk library with status, progress, last read and tags for each paper" width="100%">
135
+
136
+ Every paper has a place in the reading lifecycle:
137
+
138
+ **Inbox → Planned → Reading → Paused → Completed → Revisit**
139
+
140
+ - Opening a paper moves it to *Reading*. When you reach the last page, StudyDesk asks whether it's *Completed* or worth a *Revisit*. Papers saved as a link stay where you put them until you attach the PDF.
141
+ - **Import** by button or drag and drop. Title, authors and page count come from the PDF itself.
142
+ - **Search everything** from the sidebar: titles, authors, tags and abstracts, and inside your highlights, comments, notes and session takeaways. Each result opens the right page.
143
+ - **Add by arXiv ID or DOI:** paste `1706.03762` or a DOI, and the title, authors, year and venue are filled in. arXiv papers come with their PDF.
144
+ - **Add by link, without the PDF:** found a paper on Google Scholar but can't get the PDF? Save its link, abstract, tags and notes now (paste Scholar's BibTeX to fill in the details) and attach the PDF later. Such papers wait in a *No PDF yet* list.
145
+ - **Tags** in the sidebar, with counts, for one-click filtering. When you tag a paper, your existing tags are suggested as you type.
146
+ - See each paper's status, progress bar, pages read and when you last opened it.
147
+ - Set a **target page and date** ("finish section 3 by Friday") and it shows up in *Up next*.
148
+
149
+ ## Every session, recorded
150
+
151
+ StudyDesk logs each sitting with a paper on its own:
152
+
153
+ - **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.
154
+ - **Pages covered**: the first and last page you reached.
155
+ - **A takeaway**: an optional line on what you got out of the session.
156
+ - **Resume where you left off**: every paper reopens at your last page.
157
+ - **Bookmarks** for pages you'll come back to.
158
+ - **Fix a session** logged by mistake: edit its pages, minutes or takeaway, or delete it.
159
+ - Papers saved as a link, without the PDF, don't record sessions: there's nothing to read yet. Sessions start once you attach the PDF.
160
+
161
+ ## Your reading, at a glance
162
+
163
+ The overview turns your sessions into a picture of your reading:
164
+
165
+ - **Stats**: papers in your library, reading now, completed, time and pages this week.
166
+ - **Continue reading**: papers in progress, with a progress bar and a one-click resume.
167
+ - **Reading calendar**: a 17-week heatmap of your reading days, with your current streak and total hours.
168
+ - **Up next**: planned and paused papers, sorted by target date.
169
+ - **Revision queue**: highlights from finished papers come back each day, so ideas don't fade.
170
+ - **Reading log**: every session, newest first.
171
+
172
+ ## Back up and move your library
173
+
174
+ - **Export library** saves everything in one `.zip`: your PDFs, highlights, comments, notes, sessions and bookmarks, plus a readable Markdown file for every paper with its link, abstract, notes and highlights.
175
+ - **Export without PDFs** makes a small backup file for frequent saves.
176
+ - **Import library** shows what's in the file before changing anything. *Add to my library* merges and never deletes or overwrites what you wrote; *Replace my library* asks first and offers to export your current library.
177
+ - Drop an export file on the window to import it. Use it to move to another browser or computer.
178
+
179
+ ## Easy on the eyes, day and night
180
+
181
+ <img src="https://raw.githubusercontent.com/shubham10divakar/studydesk/main/docs/assets/reader-dark.png" alt="StudyDesk reader in dark mode" width="100%">
182
+
183
+ 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.
184
+
185
+ ## Keyboard shortcuts
186
+
187
+ | Key | Action |
188
+ |---|---|
189
+ | `j` or `→` | Next page |
190
+ | `k` or `←` | Previous page |
191
+ | `b` | Bookmark this page |
192
+ | `Alt+←` | Back to where you were before following a link |
193
+ | `[` | Show or hide the sidebar |
194
+ | `]` | Show or hide notes and highlights |
195
+ | `Enter` in the page box | Jump to page |
196
+ | `Esc` | Close the highlight menu |
197
+ | `Enter` or `,` in a tag box | Add the suggested tag (or a new one); `↑` `↓` choose, `Backspace` removes the last tag |
198
+
199
+ ---
200
+
201
+ ## Private by design
202
+
203
+ - 🔒 **Local-first.** Your library is a normal folder on your computer: real PDF files, a `library.json`, and a backup every day. No account, no cloud, no tracking.
204
+ - 🗂️ **One library, everywhere on your machine.** Any browser and any port shows the same library, and clearing browser data deletes nothing.
205
+ - ✈️ **Works offline.** The PDF engine and fonts ship inside the package. Nothing loads from the internet.
206
+ - 🪶 **Lightweight.** One small package with **zero Python dependencies**. If you have Python 3.9+, you can run it.
207
+
208
+ ## Get started
209
+
210
+ ```bash
211
+ pip install studydesk
212
+ studydesk
213
+ ```
214
+
215
+ StudyDesk 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, add papers by arXiv ID or DOI, or save one by its link when you can't get the PDF.
216
+
217
+ ```bash
218
+ studydesk --no-browser # start without opening a browser window
219
+ studydesk --port 8080 # use another port (same library)
220
+ studydesk --data-dir D:\Papers # keep the library somewhere else
221
+ studydesk --version
222
+ ```
223
+
224
+ Upgrade any time with `pip install -U studydesk`.
225
+
226
+ > **Where your library lives:** in a folder called `StudyDesk` in your home folder (`studydesk` prints the exact path; click it in the sidebar or on the About page to open the folder). It holds `library.json`, your PDFs in `pdfs/`, and daily backups in `backups/`. Adding a PDF saves a copy there; your original file stays where it is. Uninstalling the package doesn't touch the folder. Use **Export library** to move it to another computer.
227
+
228
+ ## What's coming
229
+
230
+ StudyDesk is at **1.1**. Next up:
231
+
232
+ - **Recolour instead of duplicate:** highlighting text that's already highlighted will offer to change its colour.
233
+ - **Reference preview:** hover over a citation to read the reference without jumping.
234
+ - **StudyDesk 2.0** as a native desktop app (Tauri + SQLite), installed the same way, with `pip install -U studydesk`.
235
+ - Later: links between papers, spaced revision, weekly reading reports, Zotero import.
236
+
237
+ The full plan is in [docs/roadmap.md](https://github.com/shubham10divakar/studydesk/blob/main/docs/roadmap.md).
238
+
239
+ ## Feedback and contact
240
+
241
+ StudyDesk is built by **Subham Divakar**, a software engineer and ML researcher. I built it for myself: I read a lot of papers and kept losing track of what I'd read, how far I got and why it mattered. So I built a tool for complete note-making across PDFs and slide decks. I've made notes in it every day for over two years. People who saw it loved it, so here it is: a small version of that tool. More features are on the way.
242
+
243
+ Found a bug, want a feature, or have a question? Open an [issue](https://github.com/shubham10divakar/studydesk/issues) or reach out:
244
+
245
+ [Website](https://subhamdivakar.com/) · [LinkedIn](https://www.linkedin.com/in/subham-divakar-a7420a12a/) · [Google Scholar](https://scholar.google.com/citations?user=44ecZj0AAAAJ&hl=en) · [GitHub](https://github.com/shubham10divakar) · [PyPI](https://pypi.org/user/shubham10divakar/)
246
+
247
+ The **About** page inside the app has the same links.
248
+
249
+ ## Contributing
250
+
251
+ Bug reports and ideas are welcome in [Issues](https://github.com/shubham10divakar/studydesk/issues). To work on the code, start with [DEVELOPMENT.md](https://github.com/shubham10divakar/studydesk/blob/main/DEVELOPMENT.md).
252
+
253
+ ## License
254
+
255
+ [MIT](https://github.com/shubham10divakar/studydesk/blob/main/LICENSE). Bundled third-party code keeps its own licence: [PDF.js](https://mozilla.github.io/pdf.js/) (Apache-2.0) and the Source Serif 4, IBM Plex Sans and IBM Plex Mono fonts (SIL Open Font License 1.1).
256
+
257
+ <div align="center">
258
+ <br>
259
+ <sub>Built by Subham Divakar with ❤️ for people who read papers for a living.</sub>
260
+ </div>
@@ -0,0 +1,239 @@
1
+ <div align="center">
2
+
3
+ # StudyDesk
4
+
5
+ ### Your reading desk for research papers.
6
+
7
+ **Library, PDF reader, highlights, notes, and a complete log of your reading, all in one window, all on your machine.**
8
+
9
+ [![PyPI](https://img.shields.io/pypi/v/studydesk?color=2f55d4&label=pypi)](https://pypi.org/project/studydesk/)
10
+ [![Downloads](https://img.shields.io/pepy/dt/studydesk?label=downloads)](https://pepy.tech/projects/studydesk)
11
+ [![Downloads / month](https://img.shields.io/pypi/dm/studydesk?label=downloads%2Fmonth)](https://pypistats.org/packages/studydesk)
12
+ [![Python](https://img.shields.io/pypi/pyversions/studydesk)](https://pypi.org/project/studydesk/)
13
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green)](https://github.com/shubham10divakar/studydesk/blob/main/LICENSE)
14
+
15
+ ```bash
16
+ pip install studydesk && studydesk
17
+ ```
18
+
19
+ <img src="https://raw.githubusercontent.com/shubham10divakar/studydesk/main/docs/assets/overview.png" alt="StudyDesk overview: reading stats, continue reading, reading calendar, up next and revision queue" width="100%">
20
+
21
+ </div>
22
+
23
+ > [!NOTE]
24
+ > **StudyDesk was called PDFDesk.** It is growing from a PDF reader into a desk for everything you study: links, PDFs, documents and notes. Coming from `pdfdesk`? Run `pip install studydesk && studydesk`: your library in `~/PDFDesk` is used as it is, nothing to export or move. `pdfdesk` 1.1.1 was the last release under the old name.
25
+
26
+ ---
27
+
28
+ ## New in 1.1
29
+
30
+ - 🔗 **Add a paper by link, without the PDF:** found it on Google Scholar but can't get the PDF? Keep the link, abstract, tags and notes now (paste Scholar's BibTeX to fill in the details) and attach the PDF later.
31
+ - 🏷️ **Tags suggest themselves:** your existing tags are listed as you type, most used first.
32
+ - 📝 **Abstracts** for every paper, included in search.
33
+
34
+ ## New in 1.0
35
+
36
+ - 🔗 **Links in your PDFs work:** citations, figure and section references jump to the exact spot, and **Back** (`Alt+←`) returns you.
37
+ - 📑 **Contents tab** from the paper's own outline, marking the section you're reading.
38
+ - 🔎 **Search everything:** titles, authors, tags, and inside your highlights, comments, notes and session takeaways.
39
+ - ➕ **Add by arXiv ID or DOI:** paste `1706.03762` and the paper arrives with its details and PDF.
40
+ - 🖍️ **Highlights survive a new PDF version:** replace the file and they find their text again.
41
+ - 🧭 **Panel and page are connected:** click a highlight on the page to open it, or in the panel to see it on the page.
42
+ - ↔️ **Room to read:** hide the sidebar and the notes panel with `[` and `]`.
43
+ - ✏️ **Fix a session** logged by mistake.
44
+
45
+ Full list in [CHANGELOG.md](https://github.com/shubham10divakar/studydesk/blob/main/CHANGELOG.md).
46
+
47
+ ## Why StudyDesk
48
+
49
+ 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.
50
+
51
+ StudyDesk 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.
52
+
53
+ <table>
54
+ <tr>
55
+ <td width="33%" valign="top">
56
+
57
+ ### 📚 Organise
58
+ A library that knows where each paper is in your reading, from *Inbox* to *Completed*.
59
+
60
+ </td>
61
+ <td width="33%" valign="top">
62
+
63
+ ### 🖍️ Read & annotate
64
+ A fast PDF reader with colour-coded highlights and Markdown notes that link to pages.
65
+
66
+ </td>
67
+ <td width="33%" valign="top">
68
+
69
+ ### 📈 Remember
70
+ Sessions, a reading calendar, streaks and a daily revision queue bring papers back.
71
+
72
+ </td>
73
+ </tr>
74
+ </table>
75
+
76
+ ---
77
+
78
+ ## Read with highlights that mean something
79
+
80
+ <img src="https://raw.githubusercontent.com/shubham10divakar/studydesk/main/docs/assets/reader-highlights.png" alt="StudyDesk reader with colour-coded highlights and the highlights panel" width="100%">
81
+
82
+ Select text on any page and pick a colour. Each colour has one job, so a page of highlights reads at a glance:
83
+
84
+ | | Colour | Meaning |
85
+ |---|---|---|
86
+ | 🟨 | Yellow | Key idea |
87
+ | 🟩 | Green | Method or result |
88
+ | 🟦 | Blue | Definition |
89
+ | 🟥 | Pink | Question or doubt |
90
+
91
+ - Add a comment to any highlight, and filter the panel by colour.
92
+ - **Links work like in a PDF reader:** click a citation, a section or figure reference, or a contents entry to jump to the exact spot; web links open in a new tab. After following a link, **Back to p. N** (or `Alt+←`) returns you to exactly where you were.
93
+ - Click a highlight in the panel to jump straight to it in the PDF: it scrolls to the page and flashes. It works the other way too: click a highlight on the page and the panel opens at it, ready for a comment.
94
+ - Highlights store the selected text as well as their position, so they stay put when you zoom.
95
+ - **Got a newer version of the PDF?** Replace it and your highlights find their text again, even on a different page or slightly reworded. Any that can't be found are kept and marked.
96
+ - **Extract to notes** pulls every highlight into your notes, each with its page reference.
97
+ - **Contents tab:** the PDF's own outline, with the section you're reading marked. Click a section to jump there.
98
+ - **Make room for the page:** hide the sidebar and the notes panel (`[` and `]`, or the buttons at either end of the toolbar) and wide pages and slides get the full width.
99
+
100
+ ## Notes that point back to the page
101
+
102
+ <img src="https://raw.githubusercontent.com/shubham10divakar/studydesk/main/docs/assets/reader-notes.png" alt="StudyDesk notes panel with Markdown and page links next to the PDF" width="100%">
103
+
104
+ - Write in **Markdown**: headings, bullets, quotes.
105
+ - Type `p. 12` anywhere and it becomes a link to page 12. When the line quotes one of your highlights, the link takes you to that exact highlight.
106
+ - **Cite p. N** drops in a reference to the page you're on.
107
+ - **Insert highlights** adds your highlights to the notes, each with its page.
108
+ - **Copy** exports the notes as Markdown, ready for your paper, wiki or Obsidian vault.
109
+ - Notes save automatically as you type.
110
+
111
+ ## A library that follows your reading
112
+
113
+ <img src="https://raw.githubusercontent.com/shubham10divakar/studydesk/main/docs/assets/library.png" alt="StudyDesk library with status, progress, last read and tags for each paper" width="100%">
114
+
115
+ Every paper has a place in the reading lifecycle:
116
+
117
+ **Inbox → Planned → Reading → Paused → Completed → Revisit**
118
+
119
+ - Opening a paper moves it to *Reading*. When you reach the last page, StudyDesk asks whether it's *Completed* or worth a *Revisit*. Papers saved as a link stay where you put them until you attach the PDF.
120
+ - **Import** by button or drag and drop. Title, authors and page count come from the PDF itself.
121
+ - **Search everything** from the sidebar: titles, authors, tags and abstracts, and inside your highlights, comments, notes and session takeaways. Each result opens the right page.
122
+ - **Add by arXiv ID or DOI:** paste `1706.03762` or a DOI, and the title, authors, year and venue are filled in. arXiv papers come with their PDF.
123
+ - **Add by link, without the PDF:** found a paper on Google Scholar but can't get the PDF? Save its link, abstract, tags and notes now (paste Scholar's BibTeX to fill in the details) and attach the PDF later. Such papers wait in a *No PDF yet* list.
124
+ - **Tags** in the sidebar, with counts, for one-click filtering. When you tag a paper, your existing tags are suggested as you type.
125
+ - See each paper's status, progress bar, pages read and when you last opened it.
126
+ - Set a **target page and date** ("finish section 3 by Friday") and it shows up in *Up next*.
127
+
128
+ ## Every session, recorded
129
+
130
+ StudyDesk logs each sitting with a paper on its own:
131
+
132
+ - **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.
133
+ - **Pages covered**: the first and last page you reached.
134
+ - **A takeaway**: an optional line on what you got out of the session.
135
+ - **Resume where you left off**: every paper reopens at your last page.
136
+ - **Bookmarks** for pages you'll come back to.
137
+ - **Fix a session** logged by mistake: edit its pages, minutes or takeaway, or delete it.
138
+ - Papers saved as a link, without the PDF, don't record sessions: there's nothing to read yet. Sessions start once you attach the PDF.
139
+
140
+ ## Your reading, at a glance
141
+
142
+ The overview turns your sessions into a picture of your reading:
143
+
144
+ - **Stats**: papers in your library, reading now, completed, time and pages this week.
145
+ - **Continue reading**: papers in progress, with a progress bar and a one-click resume.
146
+ - **Reading calendar**: a 17-week heatmap of your reading days, with your current streak and total hours.
147
+ - **Up next**: planned and paused papers, sorted by target date.
148
+ - **Revision queue**: highlights from finished papers come back each day, so ideas don't fade.
149
+ - **Reading log**: every session, newest first.
150
+
151
+ ## Back up and move your library
152
+
153
+ - **Export library** saves everything in one `.zip`: your PDFs, highlights, comments, notes, sessions and bookmarks, plus a readable Markdown file for every paper with its link, abstract, notes and highlights.
154
+ - **Export without PDFs** makes a small backup file for frequent saves.
155
+ - **Import library** shows what's in the file before changing anything. *Add to my library* merges and never deletes or overwrites what you wrote; *Replace my library* asks first and offers to export your current library.
156
+ - Drop an export file on the window to import it. Use it to move to another browser or computer.
157
+
158
+ ## Easy on the eyes, day and night
159
+
160
+ <img src="https://raw.githubusercontent.com/shubham10divakar/studydesk/main/docs/assets/reader-dark.png" alt="StudyDesk reader in dark mode" width="100%">
161
+
162
+ 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.
163
+
164
+ ## Keyboard shortcuts
165
+
166
+ | Key | Action |
167
+ |---|---|
168
+ | `j` or `→` | Next page |
169
+ | `k` or `←` | Previous page |
170
+ | `b` | Bookmark this page |
171
+ | `Alt+←` | Back to where you were before following a link |
172
+ | `[` | Show or hide the sidebar |
173
+ | `]` | Show or hide notes and highlights |
174
+ | `Enter` in the page box | Jump to page |
175
+ | `Esc` | Close the highlight menu |
176
+ | `Enter` or `,` in a tag box | Add the suggested tag (or a new one); `↑` `↓` choose, `Backspace` removes the last tag |
177
+
178
+ ---
179
+
180
+ ## Private by design
181
+
182
+ - 🔒 **Local-first.** Your library is a normal folder on your computer: real PDF files, a `library.json`, and a backup every day. No account, no cloud, no tracking.
183
+ - 🗂️ **One library, everywhere on your machine.** Any browser and any port shows the same library, and clearing browser data deletes nothing.
184
+ - ✈️ **Works offline.** The PDF engine and fonts ship inside the package. Nothing loads from the internet.
185
+ - 🪶 **Lightweight.** One small package with **zero Python dependencies**. If you have Python 3.9+, you can run it.
186
+
187
+ ## Get started
188
+
189
+ ```bash
190
+ pip install studydesk
191
+ studydesk
192
+ ```
193
+
194
+ StudyDesk 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, add papers by arXiv ID or DOI, or save one by its link when you can't get the PDF.
195
+
196
+ ```bash
197
+ studydesk --no-browser # start without opening a browser window
198
+ studydesk --port 8080 # use another port (same library)
199
+ studydesk --data-dir D:\Papers # keep the library somewhere else
200
+ studydesk --version
201
+ ```
202
+
203
+ Upgrade any time with `pip install -U studydesk`.
204
+
205
+ > **Where your library lives:** in a folder called `StudyDesk` in your home folder (`studydesk` prints the exact path; click it in the sidebar or on the About page to open the folder). It holds `library.json`, your PDFs in `pdfs/`, and daily backups in `backups/`. Adding a PDF saves a copy there; your original file stays where it is. Uninstalling the package doesn't touch the folder. Use **Export library** to move it to another computer.
206
+
207
+ ## What's coming
208
+
209
+ StudyDesk is at **1.1**. Next up:
210
+
211
+ - **Recolour instead of duplicate:** highlighting text that's already highlighted will offer to change its colour.
212
+ - **Reference preview:** hover over a citation to read the reference without jumping.
213
+ - **StudyDesk 2.0** as a native desktop app (Tauri + SQLite), installed the same way, with `pip install -U studydesk`.
214
+ - Later: links between papers, spaced revision, weekly reading reports, Zotero import.
215
+
216
+ The full plan is in [docs/roadmap.md](https://github.com/shubham10divakar/studydesk/blob/main/docs/roadmap.md).
217
+
218
+ ## Feedback and contact
219
+
220
+ StudyDesk is built by **Subham Divakar**, a software engineer and ML researcher. I built it for myself: I read a lot of papers and kept losing track of what I'd read, how far I got and why it mattered. So I built a tool for complete note-making across PDFs and slide decks. I've made notes in it every day for over two years. People who saw it loved it, so here it is: a small version of that tool. More features are on the way.
221
+
222
+ Found a bug, want a feature, or have a question? Open an [issue](https://github.com/shubham10divakar/studydesk/issues) or reach out:
223
+
224
+ [Website](https://subhamdivakar.com/) · [LinkedIn](https://www.linkedin.com/in/subham-divakar-a7420a12a/) · [Google Scholar](https://scholar.google.com/citations?user=44ecZj0AAAAJ&hl=en) · [GitHub](https://github.com/shubham10divakar) · [PyPI](https://pypi.org/user/shubham10divakar/)
225
+
226
+ The **About** page inside the app has the same links.
227
+
228
+ ## Contributing
229
+
230
+ Bug reports and ideas are welcome in [Issues](https://github.com/shubham10divakar/studydesk/issues). To work on the code, start with [DEVELOPMENT.md](https://github.com/shubham10divakar/studydesk/blob/main/DEVELOPMENT.md).
231
+
232
+ ## License
233
+
234
+ [MIT](https://github.com/shubham10divakar/studydesk/blob/main/LICENSE). Bundled third-party code keeps its own licence: [PDF.js](https://mozilla.github.io/pdf.js/) (Apache-2.0) and the Source Serif 4, IBM Plex Sans and IBM Plex Mono fonts (SIL Open Font License 1.1).
235
+
236
+ <div align="center">
237
+ <br>
238
+ <sub>Built by Subham Divakar with ❤️ for people who read papers for a living.</sub>
239
+ </div>