Top Related Projects
Document viewer
The official source code repository for the calibre ebook manager
An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices
qpdf: A content-preserving PDF document transformer
SumatraPDF reader
PDF Reader in JavaScript
Quick Overview
Sioyek is a powerful and customizable PDF viewer designed for researchers, students, and professionals who need to read and annotate PDF documents efficiently. It offers a range of features to enhance the reading experience, including support for advanced navigation, annotation tools, and integration with external tools.
Pros
- Efficient Navigation: Sioyek provides a range of keyboard shortcuts and navigation tools to help users quickly navigate through PDF documents, including the ability to jump to specific pages, sections, or bookmarks.
- Annotation Tools: The application offers a comprehensive set of annotation tools, allowing users to highlight, underline, and add notes to PDF documents, making it easier to organize and review important information.
- Customization: Sioyek is highly customizable, allowing users to adjust the appearance, keyboard shortcuts, and other settings to suit their preferences.
- Integration with External Tools: The application can be integrated with external tools, such as Zotero, to streamline the research and writing process.
Cons
- Learning Curve: Sioyek has a relatively steep learning curve, as it offers a wide range of features and customization options that may take time to master.
- Limited File Format Support: While Sioyek is primarily focused on PDF documents, it may not offer the same level of support for other file formats, such as EPUB or CBZ.
- Lack of Mobile Support: Sioyek is currently only available as a desktop application, and there is no mobile version or companion app available.
- Occasional Stability Issues: Some users have reported occasional stability issues or crashes, particularly when working with large or complex PDF documents.
Getting Started
To get started with Sioyek, follow these steps:
- Download the latest version of Sioyek from the official GitHub repository.
- Install the application on your computer, following the instructions for your operating system.
- Launch Sioyek and open a PDF document.
- Explore the various features and customization options available in the application, such as the annotation tools, keyboard shortcuts, and integration with external tools.
Here are a few examples of how to use Sioyek:
# Open a PDF document
sioyek.open_file("path/to/your/document.pdf")
# Navigate to a specific page
sioyek.goto_page(10)
# Add a highlight annotation
sioyek.add_highlight_annotation(x1, y1, x2, y2)
# Add a note annotation
sioyek.add_note_annotation(x, y, "Your note here")
These examples demonstrate how to use the Sioyek API to perform common tasks, such as opening a PDF document, navigating to a specific page, and adding annotations to the document. Keep in mind that the actual API may differ from these examples, and you should refer to the project's documentation for the most up-to-date and accurate information.
Competitor Comparisons
Document viewer
Pros of Zathura
- Lightweight and minimalist design, focusing on keyboard-driven navigation
- Extensive plugin system allowing for customization and support for various document formats
- Integrated with Vim-like keybindings, appealing to power users
Cons of Zathura
- Less feature-rich compared to Sioyek, especially in terms of advanced PDF navigation
- Limited built-in support for academic reading features like reference management
- Steeper learning curve for users not familiar with Vim-like interfaces
Code Comparison
Zathura configuration (zathurarc):
set selection-clipboard clipboard
set window-title-basename true
map <C-i> zoom in
map <C-o> zoom out
Sioyek configuration (prefs_user.config):
custom_background_color 0.18 0.20 0.25
custom_text_color 0.90 0.90 0.90
startup_commands toggle_custom_color
super_fast_search 1
Both applications allow for extensive customization through configuration files, but Sioyek's configuration tends to focus more on academic-specific features and visual customization, while Zathura's configuration often emphasizes keybindings and general behavior.
The official source code repository for the calibre ebook manager
Pros of Calibre
- Comprehensive e-book management system with library organization, metadata editing, and format conversion
- Cross-platform support (Windows, macOS, Linux) with a user-friendly GUI
- Large and active community with extensive plugin ecosystem
Cons of Calibre
- Larger resource footprint and slower startup times
- More complex interface with a steeper learning curve
- Not specifically optimized for academic or research-oriented PDF reading
Code Comparison
Sioyek (C++):
void MainWindow::goto_definition() {
std::wstring selected_text = get_selected_text();
if (selected_text.size() > 0) {
goto_definition(selected_text);
}
}
Calibre (Python):
def create_book_copy(self, book_id, fmt):
db = self.current_db.new_api
with db.safe_read_lock:
mi = db.get_metadata(book_id)
path = db.format_abspath(book_id, fmt)
return mi, path
Both projects use different programming languages and have distinct focuses. Sioyek emphasizes efficient PDF navigation and academic reading, while Calibre offers comprehensive e-book management features. The code snippets reflect their respective specializations, with Sioyek handling text selection and definition lookup, and Calibre managing book metadata and file paths.
An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices
Pros of KOReader
- Supports a wider range of e-reader devices, including Kindle, Kobo, and PocketBook
- More extensive customization options for reading experience
- Includes a built-in dictionary and translation features
Cons of KOReader
- Less optimized for academic PDF reading and annotation
- May have a steeper learning curve for new users
- Limited support for advanced PDF features like hyperlinks and forms
Code Comparison
KOReader (Lua):
local ReaderUI = require("apps/reader/readeruiMenu")
local ReaderView = require("ui/widget/readerview")
function ReaderUI:init()
self.view = ReaderView:new()
-- Additional initialization code
end
Sioyek (C++):
class PDFViewerApplication {
public:
PDFViewerApplication();
void initialize();
void loadDocument(const QString& filePath);
// Additional methods
};
While both projects aim to provide e-reading capabilities, KOReader focuses on a broader range of devices and formats, while Sioyek specializes in academic PDF reading with advanced features. KOReader uses Lua for its codebase, allowing for easier customization, while Sioyek is built with C++, potentially offering better performance for complex PDF rendering and manipulation.
qpdf: A content-preserving PDF document transformer
Pros of qpdf
- Comprehensive PDF manipulation tool with a wide range of features
- Command-line interface for easy integration into scripts and workflows
- Actively maintained with regular updates and bug fixes
Cons of qpdf
- Lacks a graphical user interface, which may be less user-friendly for some
- Primarily focused on PDF manipulation rather than viewing or annotation
- Steeper learning curve for users unfamiliar with command-line tools
Code Comparison
qpdf:
QPDF::QPDFWriter w(pdf);
w.setOutputFilename(outfilename);
w.write();
sioyek:
void PDFViewerApplication::openFile(const QString& filePath)
{
m_document = Poppler::Document::load(filePath);
// ... (additional code to render and display the PDF)
}
Summary
qpdf is a powerful command-line tool for PDF manipulation, offering extensive features for advanced users and developers. sioyek, on the other hand, is a PDF viewer with a focus on research and technical documents, providing a user-friendly interface with features like synctex support and vim-like keybindings. While qpdf excels in PDF processing tasks, sioyek is better suited for reading and annotating PDFs, especially for academic or technical purposes.
SumatraPDF reader
Pros of SumatraPDF
- More mature and established project with a larger user base
- Supports a wider range of file formats (PDF, EPUB, MOBI, CBZ, CBR, etc.)
- Faster rendering and lower memory usage for large documents
Cons of SumatraPDF
- Less focus on academic/research features compared to Sioyek
- User interface may feel less modern and customizable
- Fewer advanced PDF navigation and annotation features
Code Comparison
SumatraPDF (C++):
void WindowInfo::ShowNotification(const WCHAR* message, bool autoDismiss, bool highlight) {
NotificationWnd* wnd = new NotificationWnd(this->hwndFrame, message, autoDismiss, highlight);
wnd->Create();
}
Sioyek (C++):
void MainWidget::show_notification(QString message, int time_to_show) {
notification_widget->set_text(message);
notification_widget->show();
QTimer::singleShot(time_to_show, notification_widget, &NotificationWidget::hide);
}
Both projects use C++ for their core functionality, but Sioyek incorporates Qt for its user interface, while SumatraPDF uses native Windows APIs. Sioyek's code tends to be more modern and object-oriented, while SumatraPDF's codebase is older and more procedural in style.
PDF Reader in JavaScript
Pros of pdf.js
- Web-based and cross-platform compatible
- Widely adopted and integrated into many browsers
- Extensive documentation and community support
Cons of pdf.js
- Slower performance for large or complex PDFs
- Limited advanced features compared to native PDF readers
- Requires JavaScript to be enabled in the browser
Code Comparison
pdf.js:
PDFJS.getDocument(url).then(function(pdf) {
pdf.getPage(1).then(function(page) {
var scale = 1.5;
var viewport = page.getViewport(scale);
// Render page
});
});
Sioyek:
void PDFViewerApplication::openDocument(const QString& filePath) {
m_document = std::make_unique<PDFDocument>(filePath);
m_currentPage = 1;
renderCurrentPage();
}
Key Differences
- pdf.js is written in JavaScript for web browsers, while Sioyek is a native application written in C++
- Sioyek focuses on academic and research-oriented features, whereas pdf.js aims for general-purpose PDF viewing
- pdf.js has a larger user base and more frequent updates, while Sioyek offers a more specialized feature set
Use Cases
- pdf.js: Web applications, online document viewers, and browser extensions
- Sioyek: Academic research, technical document reading, and specialized PDF workflows
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Sioyek
Sioyek is a PDF viewer with a focus on textbooks and research papers.
Contents
Install
Official packages
There are installers for Windows, macOS and Linux. See Releases page.
Homebew Cask
There is a homebrew cask available here: https://formulae.brew.sh/cask/sioyek. Install by running:
brew install --cask sioyek
Third-party packages for Linux
If you prefer to install sioyek with a package manager, you can look at this list. Please note that they are provided by third party packagers. USE AT YOUR OWN RISK! If you're reporting a bug for a third-party package, please mention which package you're using.
Distro | Link | Maintainer |
---|---|---|
Flathub | sioyek | @nbenitez |
Alpine | sioyek | @jirutka |
Arch | AUR sioyek | @goggle |
Arch | AUR sioyek-git | @hrdl-github |
Arch | AUR sioyek-appimage | @DhruvaSambrani |
Debian | sioyek | @viccie30 |
NixOS | sioyek | @podocarp |
openSUSE | Publishing | @uncomfyhalomacro |
openSUSE | Factory | @uncomfyhalomacro |
Ubuntu | sioyek | @viccie30 |
Documentation
You can view the official documentation here.
Feature Video Overview
For a more in-depth tutorial, see this video:
Features
Quick Open
https://user-images.githubusercontent.com/6392321/125321111-9b29dc00-e351-11eb-873e-94ea30016a05.mp4
You can quickly search and open any file you have previously interacted with using sioyek.
Table of Contents
https://user-images.githubusercontent.com/6392321/125321313-cf050180-e351-11eb-9275-c2759c684af5.mp4
You can search and jump to table of contents entries.
Smart Jump
https://user-images.githubusercontent.com/6392321/125321419-e5ab5880-e351-11eb-9688-95374a22774f.mp4
You can jump to any referenced figure or bibliography item even if the PDF file doesn't provide links. You can also search the names of bibliography items in google scholar/libgen by middle clicking/shift+middle clicking on their name.
Overview
https://user-images.githubusercontent.com/6392321/154683015-0bae4f92-78e2-4141-8446-49dd7c2bd7c9.mp4
You can open a quick overview of figures/references/tables/etc. by right clicking on them (Like Smart Jump, this feature works even if the document doesn't provide links).
Mark
https://user-images.githubusercontent.com/6392321/125321811-505c9400-e352-11eb-85e0-ffc3ae5f8cb8.mp4
Sometimes when reading a document you need to go back a few pages (perhaps to view a definition or something) and quickly jump back to where you were. You can achieve this by using marks. Marks are named locations within a PDF file (each mark has a single character name for example 'a' or 'm') which you can quickly jump to using their name. In the aforementioned example, before going back to the definition you mark your location and later jump back to the mark by invoking its name. Lower case marks are local to the document and upper case marks are global (this should be very familiar to you if you have used vim).
Bookmarks
https://user-images.githubusercontent.com/6392321/125322503-1a6bdf80-e353-11eb-8018-5e8fc43b8d05.mp4
Bookmarks are similar to marks except they are named by a text string and they are all global.
Highlights
https://user-images.githubusercontent.com/6392321/130956728-7e0a87fa-4ada-4108-a8fc-9d9d04180f56.mp4
Highlight text using different kinds of highlights. You can search among all the highlights.
Portals (this feature is most useful for users with multiple monitors)
https://user-images.githubusercontent.com/6392321/125322657-41c2ac80-e353-11eb-985e-8f3ce9808f67.mp4
Suppose you are reading a paragraph which references a figure which is not very close to the current location. Jumping back and forth between the current paragraph and the figure can be very annoying. Using portals, you can link the paragraph's location to the figure's location. Sioyek shows the closest portal destination in a separate window (which is usually placed on a second monitor). This window is automatically updated to show the closest portal destination as the user navigates the document.
Configuration
https://user-images.githubusercontent.com/6392321/125337160-e4832700-e363-11eb-8801-0bee58121c2d.mp4
You can customize all key bindings and some UI elements by editing keys_user.config
and prefs_user.config
. The default configurations are in keys.config
and prefs.config
.
Build Instructions
Linux
Fedora
Run the following commands to install dependencies, clone the repository and compile sioyek on Fedora (tested on Fedora Workstation 36).
sudo dnf install qt5-qtbase-devel qt5-qtbase-static qt5-qt3d-devel harfbuzz-devel mesa-libGL-devel glfw-devel
git clone --recursive https://github.com/ahrm/sioyek
cd sioyek
./build_linux.sh
Generic distribution
-
Install Qt 5 and make sure
qmake
is inPATH
.Run
qmake --version
to make sure theqmake
in path is using Qt 5.x. -
Install
libharfbuzz
:
sudo apt install libharfbuzz-dev
- Clone the repository and build:
git clone --recursive https://github.com/ahrm/sioyek
cd sioyek
./build_linux.sh
Windows
- Install Visual Studio (tested on 2019, other relatively recent versions should work too)
- Install Qt 5 and make sure qmake is in
PATH
. - Clone the repository and build using 64 bit Visual Studio Developer Command Prompt:
git clone --recursive https://github.com/ahrm/sioyek
cd sioyek
build_windows.bat
Mac
- Install Xcode.
- Clone the repository and build: (The code below is in Zsh, which is the default shell on macOS.)
(
setopt PIPE_FAIL PRINT_EXIT_VALUE ERR_RETURN SOURCE_TRACE XTRACE
git clone --recursive https://github.com/ahrm/sioyek
cd sioyek
chmod +x build_mac.sh
brew install 'qt@5' freeglut mesa harfbuzz
export PATH="/opt/homebrew/opt/qt@5/bin:$PATH"
#: The above is needed to make =qmake= from =qt= be found.
#: Find the path using =brew info 'qt@5'=.
MAKE_PARALLEL=8 ./build_mac.sh
mv build/sioyek.app /Applications/
sudo codesign --force --sign - --deep /Applications/sioyek.app
)
Donation
If you enjoy sioyek, please consider donating to support its development.
Top Related Projects
Document viewer
The official source code repository for the calibre ebook manager
An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices
qpdf: A content-preserving PDF document transformer
SumatraPDF reader
PDF Reader in JavaScript
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot