{"id":13928681,"url":"https://github.com/akawashiro/jendeley","last_synced_at":"2025-04-04T20:02:50.378Z","repository":{"id":64405955,"uuid":"569596130","full_name":"akawashiro/jendeley","owner":"akawashiro","description":"jendeley is a JSON-based document organizing software.","archived":false,"fork":false,"pushed_at":"2024-12-16T23:05:44.000Z","size":9698,"stargazers_count":129,"open_issues_count":34,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-21T18:07:50.876Z","etag":null,"topics":["nodejs","paper","pdf","react"],"latest_commit_sha":null,"homepage":"https://akawashiro.github.io/jendeley/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akawashiro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-23T07:28:11.000Z","updated_at":"2024-12-29T18:26:24.000Z","dependencies_parsed_at":"2024-11-24T04:02:22.720Z","dependency_job_id":null,"html_url":"https://github.com/akawashiro/jendeley","commit_stats":{"total_commits":512,"total_committers":4,"mean_commits":128.0,"dds":0.02734375,"last_synced_commit":"69ec671b9d3d93d4daa8e46b1bb7f19fef17842c"},"previous_names":[],"tags_count":35,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akawashiro%2Fjendeley","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akawashiro%2Fjendeley/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akawashiro%2Fjendeley/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akawashiro%2Fjendeley/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akawashiro","download_url":"https://codeload.github.com/akawashiro/jendeley/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246085590,"owners_count":20721210,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nodejs","paper","pdf","react"],"created_at":"2024-08-07T18:01:15.224Z","updated_at":"2025-03-28T19:03:19.946Z","avatar_url":"https://github.com/akawashiro.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# jendeley\n`jendeley` is a JSON-based document organizing software.\n- `jendeley` is JSON-based. You can see and edit your database quickly.\n- `jendeley` works locally. Your important database is owned only by you. No cloud.\n- `jendeley` is browser-based. You can run it anywhere node.js runs.\n\n## Table of Contents\n\n\u003c!-- toc --\u003e\n\n- [Why jendeley?](#why-jendeley)\n- [Quickstart](#quickstart)\n- [Install](#install)\n- [Generate JSON database file](#generate-json-database-file)\n  * [Recommended filename style](#recommended-filename-style)\n  * [When `jendeley` fails to scan your PDFs](#when-jendeley-fails-to-scan-your-pdfs)\n- [Launch the service daemon and open the web user interface](#launch-the-service-daemon-and-open-the-web-user-interface)\n  * [Launch `jendeley` automatically](#launch-jendeley-automatically)\n    + [Linux](#linux)\n    + [Windows](#windows)\n- [Use the web user interface](#use-the-web-user-interface)\n  * [Add a webpage](#add-a-webpage)\n  * [Add a PDF file on the Web](#add-a-pdf-file-on-the-web)\n  * [Upload a PDF file](#upload-a-pdf-file)\n  * [Use tags and comments](#use-tags-and-comments)\n- [Advanced topics](#advanced-topics)\n  * [Check and edit your database (advanced)](#check-and-edit-your-database-advanced)\n  * [Check source code (advanced)](#check-source-code-advanced)\n  * [Use LLM (Large Language Model) to generate tags (advanced)](#use-llm-large-language-model-to-generate-tags-advanced)\n- [Contact me](#contact-me)\n- [Support me](#support-me)\n\n\u003c!-- tocstop --\u003e\n\n## Why jendeley?\nAs programmers, we need various documents in different formats, such as recent machine learning papers, classic compiler books, CPU and accelerator specification documents, programming language documents, and informative blog articles. To efficiently manage these documents, it's essential to categorize and classify them. Additionally, we need to ensure that they are saved and accessible long-term, as we never know when we need them.\n\nTo address these challenges, I developed `jendeley`. It allows you to register both PDFs and webpages in the same database, making categorization easy through the use of tags. Moreover, the database is stored as a plain text JSON file, making it easily editable using your preferred editor. This means that even if `jendeley`'s development process ends, you can still access your information and create alternative applications to manage it.\n\n## Quickstart\n```console\n$ npm install @a_kawashiro/jendeley -g\n$ jendeley scan --papers_dir \u003cYOUR PDFs DIR\u003e\n$ jendeley launch --db \u003cYOUR PDFs DIR\u003e/jendeley_db.json\n```\nThen you can see a screen like this!\n![image](https://akawashiro.github.io/jendeley/blog100/top.png)\n\n## Install\n```console\n$ npm install @a_kawashiro/jendeley -g\n```\nYou can find the latest package at [npm page](https://www.npmjs.com/package/@a_kawashiro/jendeley).\n\n## Generate JSON database file\n```console\n$ jendeley scan --papers_dir \u003cYOUR PDFs DIR\u003e\n```\nThis command outputs the database to `\u003cYOUR PDFs DIR\u003e/jendeley_db.json`. If you have no PDF file, please specify an empty directory as `\u003cYOUR PDFs DIR\u003e`.\n\nIf `jendeley` encounters an issue scanning some PDFs, it generates a shell script named `edit_and_run.sh.` Please refer to the following subsection to learn how to rename the files accordingly, so that jendeley can properly recognize them.\n\n### Recommended filename style\n`jendeley` uses a filename to find the document ID (e.g., [DOI](https://www.doi.org/) or [ISBN](https://en.wikipedia.org/wiki/ISBN))). `jendeley` recognizes parts of a filename that are not enclosed by `[` and `]` as the title of the file. So I recommend you to name the file accordingly, for example,\n- `RustHorn CHC-based Verification for Rust Programs.pdf`\n  - When the document's title includes spaces, the filename should include spaces.\n- `RustHorn CHC-based Verification for Rust Programs [matushita].pdf`\n  - If you want to write additional information in a filename, please enclose it by `[` and `]`.\n\n### When `jendeley` fails to scan your PDFs\n`jendeley` heavily relies on [DOI](https://www.doi.org/) or [ISBN](https://en.wikipedia.org/wiki/ISBN) to find the title, authors and the year of publication of PDFs. When DOI or ISBN can not be automatically found by `jendeley`, you can manually specify DOI of the PDF using the filename.\n\n- To specify DOI, change the filename to include `[jendeley doi \u003cDOI with all delimiters replaced with underscore\u003e]`.\n  - For example, `cyclone [jendeley doi 10_1145_512529_512563].pdf`.\n- To specify ISBN, change the filename to include `[jendeley isbn \u003cISBN\u003e]`.\n  - For example, `Types and Programming Languages [jendeley isbn 0262162091].pdf`.\n- When the PDF doesn't have any DOI or ISBN, you can specify it by `[jendeley no id]`.\n  - For example, `ARM reference manual [jendeley no id].pdf`.\n\n## Launch the service daemon and open the web user interface\n```\njendeley launch --db \u003cYOUR PDFs DIR\u003e/jendeley_db.json\n```\nThis command launches the jendeley daemon and opens the web user interface in your web browser at [http://localhost:5000](http://localhost:5000). You have the option to change the default port by using the --port option.\n\n### Launch `jendeley` automatically\n#### Linux\nWhen using Linux, you can set up `jendeley` to start automatically by using `systemd`. To do this, create a file named `~/.config/systemd/user/jendeley.service` with the following contents, and then run `systemctl --user enable jendeley \u0026\u0026 systemctl --user start jendeley`. Then, you can access `jendeley` at [http://localhost:5000](http://localhost:5000). Logs are accessible with the command `journalctl --user -f -u jendeley.service`.\n```\n# jendeley.service\n[Unit]\nDescription=jendeley JSON-based document organization software\n\n[Service]\nExecStart=jendeley launch --db \u003cFILL PATH TO THE YOUR DATABASE JSON FILE\u003e\n\n[Install]\nWantedBy=default.target\n```\n#### Windows\nWhen using Windows, you can set up `jendeley` to launch automatically at startup. To do this, first open the startup directory by pressing `Windows+R` and typing `shell:startup` and then pressing `Enter`.\n\n\u003cimg src=\"https://raw.githubusercontent.com/akawashiro/jendeley/main/win-startup.png\" width=\"50%\"\u003e\n\nAnd make `autorun-jendeley.bat` with the following contents using `notepad.exe`.\n```\n:: autorun-jendeley.bat\njendeley launch --db \u003cFILL PATH TO THE YOUR DATABASE JSON FILE\u003e \u003e\u003e \u003cFILL PATH TO THE LOG FILE\u003e\n```\n\n\u003cimg src=\"https://raw.githubusercontent.com/akawashiro/jendeley/main/startup-directory.png\" width=\"70%\"\u003e\n\n## Use the web user interface\nWhen `jendeley` launches, `jendeley` opens the web user interface automatically. If not, please access `http://localhost:5000/`. \n\n![image](./blog100/top.png)\n\n### Add a webpage\nYou can add a webpage to the database using `REGISTER WEBPAGE` button. When you register, you can write tags or comments. Tags are just commas (`,`) separated text. By the way, the date tags are automatically added to the database.\n\n![Register webpage](./blog100/register_webpage.png \"Register webpage\")\n\n### Add a PDF file on the Web\nYou can add a PDF file to the web by using the `REGISTER PDF FROM URL` button. When you add the file, `jendeley` will attempt to locate its [Digital object identifier (DOI)](https://www.doi.org/) or [International Standard Book Number (ISBN)](https://en.wikipedia.org/wiki/ISBN) and register the meta information, such as the author's name or publication date, to the database. In some cases, `jendeley` may not be able to find the DOI or ISBN for the PDF, or there may not be a corresponding DOI or ISBN for it. In such situations, you can specify the DOI or ISBN by using the filename. For more information, please refer to the [Recommended filename style](#recommended-filename-style) section.\n\n![Register PDF from URL](./blog100/register_pdf_from_url.png \"Register PDF from URL\")\n### Upload a PDF file\nYou can upload a PDF file in your computer using `UPLOAD PDF` button.\n\n### Use tags and comments\nYou can edit tags or comments after you register. You can edit tags or comments by double-clicking them. Comments are interpreted as Markdown.\n\n![Edit comments](./blog100/comments-markdown.png \"Edit comments\")\n\nFurthermore, you can filter the database using tags or comments.\n![Filter by tag](./blog100/filter_by_tag.png \"Filter by tag\")\n\n## Advanced topics\n### Check and edit your database (advanced)\nBecause `jendeley` is fully JSON-based, you can quickly check the database's contents.\n```console\n$ cat jendeley_db.json | jq '.' | head\n{\n  \"jendeley_meta\": {\n    \"idType\": \"meta\",\n    \"version\": \"0.0.17\"\n  },\n  \"doi_10.1145/1122445.1122456\": {\n    \"path\": \"/A Comprehensive Survey of Neural Architecture Search.pdf\",\n    \"idType\": \"doi\",\n    \"tags\": [],\n    \"comments\": \"\",\n```\n\nYou can edit your database using your preferred editor. However, after making the changes, it is important to verify that your database is still valid as a `jendeley` database using the command `jendeley validate --db \u003cPATH TO THE DATABASE\u003e`.\n\n### Check source code (advanced)\nYou can check the source code [https://github.com/akawashiro/jendeley](https://github.com/akawashiro/jendeley) here. We welcome your pull request.\n\n### Use LLM (Large Language Model) to generate tags (advanced)\nYou can use LLM to generate tags for your documents.\nLaunch the LLM server by running the following command.\n```console\n$ ./run_ollama.sh\n```\nYou can find `./run_ollama.sh` at [run_ollama.sh](https://github.com/akawashiro/jendeley/tree/main/jendeley-backend/run_ollama.sh).\n\nThen, you can enable automatic tagging by setting the `--experimental_use_ollama_server` option when launching `jendeley`.\nFor example,\n```console\n$ jendeley launch --db \u003cYOUR PDFs DIR\u003e/jendeley_db.json --experimental_use_ollama_server\n```\n\nTo run the LLM server automatically, you can use the following `systemd` service file.\n```console\n$ cat ~/.config/systemd/user/ollama-jendeley.service\n# jendeley.service\n[Unit]\nDescription=jendeley JSON-based document organization software\n\n[Service]\nExecStart=\u003cPATH_TO_NODE\u003e/node/v18.16.0/lib/node_modules/@a_kawashiro/jendeley/run_ollama.sh\n\n[Install]\nWantedBy=default.target\n$ systemctl --user enable ollama-jendeley\n$ systemctl --user start ollama-jendeley\n```\n\nTo check the LLM server's status, you can use the following command.\n```console\n$ journalctl --user -f -u ollama-jendeley.service\n```\n\n## Contact me\nYou can find me on Twitter at [https://twitter.com/a_kawashiro](https://twitter.com/a_kawashiro) and on Mastodon at [https://mstdn.jp/@a_kawashiro](https://mstdn.jp/@a_kawashiro). Additional contact information can be found on my website at [https://akawashiro.github.io/#links](https://akawashiro.github.io/#links). Also, feel free to create an issue or submit a pull request on [the repository](https://github.com/akawashiro/jendeley).\n\n## Support me\nPlease star [akawashiro/jendeley](https://github.com/akawashiro/jendeley). It encourages me a lot.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakawashiro%2Fjendeley","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakawashiro%2Fjendeley","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakawashiro%2Fjendeley/lists"}