{"id":13402138,"url":"https://github.com/edrlab/thorium-reader","last_synced_at":"2026-04-07T11:02:39.570Z","repository":{"id":37010706,"uuid":"85566485","full_name":"edrlab/thorium-reader","owner":"edrlab","description":"A cross platform desktop reading app, based on the Readium Desktop toolkit","archived":false,"fork":false,"pushed_at":"2026-03-26T20:02:24.000Z","size":88792,"stargazers_count":2638,"open_issues_count":163,"forks_count":210,"subscribers_count":42,"default_branch":"develop","last_synced_at":"2026-03-26T20:18:05.004Z","etag":null,"topics":["electron","epub","epub-reader","epub3","lcp","opds","opds-feed","react","reader","redux","typescript"],"latest_commit_sha":null,"homepage":"https://www.edrlab.org/software/thorium-reader/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/edrlab.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-03-20T10:57:56.000Z","updated_at":"2026-03-26T20:02:29.000Z","dependencies_parsed_at":"2023-09-28T22:08:34.466Z","dependency_job_id":"2937ee96-ba04-4dd1-bcc6-7a9d0831199c","html_url":"https://github.com/edrlab/thorium-reader","commit_stats":{"total_commits":2943,"total_committers":29,"mean_commits":"101.48275862068965","dds":0.5062861026163779,"last_synced_commit":"ded9817fcd660bf4c46defd5eb447e0df66d3057"},"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"purl":"pkg:github/edrlab/thorium-reader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edrlab%2Fthorium-reader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edrlab%2Fthorium-reader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edrlab%2Fthorium-reader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edrlab%2Fthorium-reader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/edrlab","download_url":"https://codeload.github.com/edrlab/thorium-reader/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edrlab%2Fthorium-reader/sbom","scorecard":{"id":367070,"data":{"date":"2025-08-11","repo":{"name":"github.com/edrlab/thorium-reader","commit":"7a861215ed5f4c03f81d78810d5c62795a59c3c2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.6,"checks":[{"name":"Code-Review","score":1,"reason":"Found 4/30 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 25 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: found token with 'none' permissions: .github/workflows/main.yml:19","Info: found token with 'none' permissions: .github/workflows/main.yml:20","Info: found token with 'none' permissions: .github/workflows/main.yml:22","Info: found token with 'none' permissions: .github/workflows/main.yml:23","Info: found token with 'none' permissions: .github/workflows/main.yml:12","Info: found token with 'none' permissions: .github/workflows/main.yml:13","Info: found token with 'none' permissions: .github/workflows/main.yml:15","Info: found token with 'none' permissions: .github/workflows/main.yml:16","Info: found token with 'none' permissions: .github/workflows/main.yml:21","Warn: topLevel 'contents' permission set to 'write': .github/workflows/main.yml:14","Info: found token with 'none' permissions: .github/workflows/main.yml:17","Info: found token with 'none' permissions: .github/workflows/main.yml:18","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact latest-windows-intel not signed: https://api.github.com/repos/edrlab/thorium-reader/releases/239774769","Warn: release artifact latest-windows-arm not signed: https://api.github.com/repos/edrlab/thorium-reader/releases/239774830","Warn: release artifact latest-macos-intel not signed: https://api.github.com/repos/edrlab/thorium-reader/releases/239773691","Warn: release artifact latest-macos-arm not signed: https://api.github.com/repos/edrlab/thorium-reader/releases/239773609","Warn: release artifact latest-linux-intel not signed: https://api.github.com/repos/edrlab/thorium-reader/releases/239773762","Warn: release artifact latest-windows-intel does not have provenance: https://api.github.com/repos/edrlab/thorium-reader/releases/239774769","Warn: release artifact latest-windows-arm does not have provenance: https://api.github.com/repos/edrlab/thorium-reader/releases/239774830","Warn: release artifact latest-macos-intel does not have provenance: https://api.github.com/repos/edrlab/thorium-reader/releases/239773691","Warn: release artifact latest-macos-arm does not have provenance: https://api.github.com/repos/edrlab/thorium-reader/releases/239773609","Warn: release artifact latest-linux-intel does not have provenance: https://api.github.com/repos/edrlab/thorium-reader/releases/239773762"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":1,"reason":"dependency not pinned by hash detected -- score normalized to 1","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:126: update your workflow using https://app.stepsecurity.io/secureworkflow/edrlab/thorium-reader/main.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:157: update your workflow using https://app.stepsecurity.io/secureworkflow/edrlab/thorium-reader/main.yml/develop?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:7: pin your Docker image by updating ubuntu:20.04 to ubuntu:20.04@sha256:8feb4d8ca5354def3d8fce243717141ce31e2c428701f6682bd2fafe15388214","Warn: downloadThenRun not pinned by hash: Dockerfile:29-39","Warn: npmCommand not pinned by hash: Dockerfile:29-39","Warn: npmCommand not pinned by hash: Dockerfile:107-108","Warn: npmCommand not pinned by hash: package-linux_ARM64.sh:3","Warn: npmCommand not pinned by hash: package-linux_x64.sh:3","Warn: npmCommand not pinned by hash: package-mac-skip-notarize_ARM64.sh:3","Warn: npmCommand not pinned by hash: package-mac-skip-notarize_x64.sh:3","Warn: npmCommand not pinned by hash: package-win_ARM64.sh:3","Warn: npmCommand not pinned by hash: package-win_x64.sh:3","Warn: npmCommand not pinned by hash: .github/workflows/main.yml:163","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:170","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:170","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned","Info:   2 out of  11 npmCommand dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"10 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-67mh-4wv8-2f99","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-7wwv-vh3v-89cq","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-566m-qj78-rww5","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T12:04:09.296Z","repository_id":37010706,"created_at":"2025-08-18T12:04:09.296Z","updated_at":"2025-08-18T12:04:09.296Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31307770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["electron","epub","epub-reader","epub3","lcp","opds","opds-feed","react","reader","redux","typescript"],"created_at":"2024-07-30T19:01:11.969Z","updated_at":"2026-04-02T14:20:37.900Z","avatar_url":"https://github.com/edrlab.png","language":"TypeScript","readme":"# Thorium Reader\n\nThorium Reader is an easy to use EPUB reading application for Windows 10/10S, MacOS and Linux. After importing e-books from a directory or OPDS feed, you'll be able to read on any screen size, customize layout settings, navigate via the table of contents or page list, set bookmarks ... A great care is taken to ensure the accessibility of the application for visual impaired people using NVDA, JAWS or Narrator.\n\nFree application. No ads. No private data flowing anywhere.\n\nThis project is in constant evolution, corrections and new features will be added soon and your support is welcome for that. The application is based on the open-source Readium Desktop toolkit.\n\nMore information can be found in the [Landing page](https://thorium.edrlab.org/), within the [online support documentation](https://thorium.edrlab.org/en/th3/800_collaborating/802_localizing/). Users can [Add Documentation catalog to Thorium (OPDS link)](opds://edrlab.github.io/publications/feeds/thorium31_documentation.json) or [browse English documentation inline within the Readium web reader](https://thorium.edrlab.org/en/onlinedoc).\n\nIt is currently localized in following 28 languages:\n\n* (en) English\n* (fr) Français (French)\n* (fi) Suomi (Finnish)\n* (de) Deutsch (German)\n* (es) Español (Spanish)\n* (nl) Nederlands (Dutch)\n* (ja) 日本語 (Japanese)\n* (ka) ქართული (Georgian)\n* (lt) Lietuvių (Lithuanian)\n* (pt-BR) Português Brasileiro (Portuguese - Brazil)\n* (pt-PT) Português (Portuguese - Portugal)\n* (zh-CN) 简体中文 - 中国 (Simplified Chinese - China)\n* (zh-TW) 繁體中文 - 台灣 (Traditional Chinese - Taiwan)\n* (it) Italiano (Italian)\n* (ru) Русский (Russian)\n* (ko) 한국어 (Korean)\n* (sv) Svenska (Swedish)\n* (ca) Catalan\n* (gl) Galician\n* (eu) Euskadi (Basque)\n* (el) ελληνικός (Greek)\n* (bg) български (Bulgarian)\n* (hr) Hrvatski (Croatian)\n* (da) Dansk (Danish)\n* (sl) Slovenščina (Slovene)\n* (cs) čeština (Czech)\n* (ar) عَرَبِيّ (Arabic)\n\nSince february 2025 we use Weblate project Thorium as the main tool for localisation. The following bar chart shows the translation status that is available from weblate.\n\n\u003ca href=\"https://hosted.weblate.org/engage/thorium-reader/\"\u003e\n\u003cimg src=\"https://hosted.weblate.org/widget/thorium-reader/thorium-reader-translation/horizontal-auto.svg\" alt=\"Translation status\" /\u003e\n\u003c/a\u003e\n\nMore information on translation process can be found in the dedicated [translation page of the support website](https://thorium.edrlab.org/en/th3/800_collaborating/802_localizing/).\n\n![library](img/library.png)\n![publication info](img/info.png)\n![reader](img/reader.png)\n\n## Prerequisites\n\n1) NodeJS 22 (check with `node --version`)\n2) NPM 11 (check with `npm --version`)\n\n\n**TIP**: the default version of NPM that ships with the NodeJS installer may be slightly old, so make sure to update with `npm i -g npm@latest`, or `nvm install-latest-npm` if you are an NVM user.\n\n## Technologies\n\n* typescript\n* electron\n* reactjs\n* redux\n* saga\n* i18next\n\n## Quick start\n\n### Install dependencies\n\n* `npm install --foreground-scripts` (or `npm ci --foreground-scripts`): initialize local `node_modules` packages from dependencies declared in `package.json` (this will also automatically call a long-running compilation stage in `npm run postinstall`)\n* in case of failure to NPM \"install\" because of \"Divina player\" SHA integrity mismatch, please try running the following command in your shell: `node scripts/package-lock-patch.js \u0026\u0026 cat package-lock.json | grep -i divina-player-js`\n\n### Start application in development environment\n\n(with hot-reload dev server, web inspectors / debuggers)\n\n* `npm run start:dev` (or `npm run start:dev:quick` to bypass TypeScript checks / launch the app faster)\n\n### Start application in production environment\n\n* `npm start` (or `npm run start`)\n\n## Build installers\n\n* `npm run package:win` or `npm run package:mac` or `npm run package:linux`\n\nCode Signing information: https://github.com/edrlab/thorium-reader/wiki/Code-Signing\n\n## Proxy server support\n\nThe `HTTPS_PROXY`, `HTTP_PROXY`, and `NO_PROXY` environment variables are used to configure the behavior of a client application when making HTTP or HTTPS requests through a proxy server.\n\n- `HTTPS_PROXY`: Specifies the proxy server to use for HTTPS requests. The value should be in the format http://proxy.example.com:8080.\n- `HTTP_PROXY`: Specifies the proxy server to use for HTTP requests. The value should be in the format http://proxy.example.com:8080.\n- `NO_PROXY`: Specifies a comma-separated list of hostnames or IP addresses that should not be proxied. This is useful for excluding local or intranet addresses from being proxied.\n\nWhen these environment variables are set, the client application will automatically use the specified proxy server for HTTP or HTTPS requests, unless the request is for a hostname or IP address listed in the NO_PROXY variable.\n\nwe used `proxy-agent` package from `TooTallNate` (https://github.com/TooTallNate/proxy-agents/tree/main/packages/proxy-agent)\n\nsee https://www.npmjs.com/package/proxy-from-env#environment-variables for more information.\n\n## LCP support in Thorium Reader\n\nThorium Reader supports LCP-protected publications via an additional software component which is not available in this open-source codebase. When Thorium Reader is compiled from the open-source code without the additional production-grade library, the application can only load publications protected with the LCP \"Basic Encryption Profile\". For example, licenses generated by the open-source LCP server written in Go, without the patch that enables production-grade LCP Encryption Profiles.\n\nIn order to create a production-grade LCP-compliant variant / derivation of Thorium Reader (known as a \"fork\"), additional confidential software components and processes must be integrated in the custom application's build / release workflow. This represents a non-trivial amount of time and effort, as well as close collaboration between the fork's development team and EDRLab's technical staff. To cover operational costs, EDRLab charges a maintenance fee. Feel free to contact EDRlab to discuss your requirements.\n\n## Command line\n\n```\nthorium \u003ccmd\u003e [args]\n\nCommands:\n  thorium opds \u003ctitle\u003e \u003curl\u003e  import opds feed\n  thorium import \u003cpath\u003e       import epub or lpcl file\n  thorium read \u003ctitle\u003e        searches already-imported publications with the\n                              provided TITLE, and opens the reader with the\n                              first match\n  thorium [path]              import and read an epub or lcpl file     [default]\n  thorium completion          generate bash completion script\n\nPositionals:\n  path  path of your publication, it can be an absolute, relative path  [string]\n\nOptions:\n  --version  Show version number                                       [boolean]\n  --help     Show help                                                 [boolean]\n```\n\n## [DEV] Architecture\n\nThorium-reader is composed of 3 parts:\n- One node.js main process (electron back-end)\n- One library window (chromium renderer)\n- One to N reader window(s) (chromium renderer)\n\nEach part runs a model-controller and a view for the renderer process.\n\n- the model is a state container with [Redux](https://redux.js.org/). It's based on [flux architecture](https://github.com/facebookarchive/flux)\n- the controller is a middleware from Redux named [Redux-saga](https://redux-saga.js.org/). It handles all side effects and application behaviour.\n- the view for the rendering is React with [class components](https://legacy.reactjs.org/docs/components-and-props.html)\n\nTo link these 3 parts we use:\n- IPC/RPC: we use an implementation from [Electron](https://www.electronjs.org/docs/latest/api/ipc-main)\n- React/Redux: We use [connect](https://react-redux.js.org/api/connect) from [react-redux](https://react-redux.js.org/).\n\n### Diagram\n\n#### [Model View Controller Architecture](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)\n![MVC](img/thorium-mvc.png)\n\n![architecture diagram](img/thorium-architecture.png)\n\n\n### API Concept\n\nTo have a POST request from a renderer process to the main process, we use the notion of API.\nIt's not an http API but an RPC encapsuled one, to redux/redux-saga logic with Action and Reducer.\n\nHere is a diagram of the communication:\n\n![api](img/thorium-api.png)\n\nSrc:\n- src/main/redux/sagas/api/api.ts\n- src/common/redux/actions/api/index.ts\n- src/renderer/common/redux/reducers/api.ts\n\nAt the moment there are 17 API endpoints from (src/main/redux/sagas/api):\n\nlibrary:\n- apiapp:\n  - apiapp/search : search a library from apiapp protocol\n- browser:\n  - httpbrowser/browse : browse and parse an opds URL\n- opds:\n  - opds/getFeed : get an opdsFeed with its identifier\n  - opds/findAllFeed: get all opdsFeed saved\n  - opds/deleteFeed: delete an opdsFeed with its identifier\n  - opds/addFeed: add an opdsFeed\n  - opds/getUrlWithSearchLinks: get the search URL from an opdsFeed\n- publication: (src/common/api/interface/publicationApi.interface.ts)\n  - publication/get: get a publicationView from id\n  - publication/delete: delete a publicationView from id\n  - publication/findAll: get all publicationView\n  - publication/findByTag: get all publicationView from a specific tag string\n  - publication/updateTags: update tags list from a publication\n  - publication/importFromLink: import a publication from an URL\n  - publication/importFromFs: import a publication from a fileSystem path\n  - publication/search: search publication from a query text\n  - publication/searchEqTitrle: search publication by title matching\n  - publication/exportPublication: export publication to the fileSystem\n\n\n### ACTION-REDUCER\n\nFrom the main-process to the renderer-process, or from the renderer-process to the main-process.\n\nList of all Actions in place (src/common/redux/actions):\n\n- auth: opds authentication\n  - cancel\n  - done\n  - wipeData\n- catalog\n  - getCatalog: ask to rehydrate catalogView in the libraryState\n  - setCatalogView: response from getCatalog\n  - setTagView: rehydrate tagStringView in the libraryState\n- dialog: modal dialog view in library,reader\n  - closeRequest\n  - openRequest\n  - updateRequest\n- download: download queue in library\n  - abort\n  - done\n  - progress\n- history: history opds feed\n  - pushFeed\n  - refresh\n- i18n\n  - setLocale\n- import\n  - verify: import verification process\n- keyboard: keyboard shortcut\n  - reloadShortcut\n  - setShortcut\n  - showShortcut\n- lcp\n  - renewPublication\n  - returnPublication\n  - unlockPublicationWithPassphrase\n  - userKeyCheckRequest\n- load: main proceess busy or not\n  - busy\n  - iddle\n- net (not used)\n- reader\n  - attachMode\n  - clipboardCopy\n  - closeRequest\n  - closeRequestFromPublication\n  - configSetDefault\n  - detachModeRequest\n  - detachModeSuccess\n  - fullScreenRequest\n  - openRequest\n  - openError\n  - setReduxState: trigger app persistence\n- session: saved session\n  - enable\n- toast: toast notification library,reader\n  - close\n  - open\n","funding_links":[],"categories":["Windows","TypeScript","epub","Open-source applications"],"sub_categories":["Miscellaneous","epub reader"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedrlab%2Fthorium-reader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fedrlab%2Fthorium-reader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedrlab%2Fthorium-reader/lists"}