Convert Figma logo to code with AI

ahrm logosioyek

Sioyek is a PDF viewer with a focus on textbooks and research papers

6,978
228
6,978
175

Top Related Projects

2,023

Document viewer

19,281

The official source code repository for the calibre ebook manager

16,575

An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices

3,424

qpdf: A content-preserving PDF document transformer

SumatraPDF reader

47,890

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:

  1. Download the latest version of Sioyek from the official GitHub repository.
  2. Install the application on your computer, following the instructions for your operating system.
  3. Launch Sioyek and open a PDF document.
  4. 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

2,023

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.

19,281

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.

16,575

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.

3,424

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.

47,890

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

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.

DistroLinkMaintainer
Flathubsioyek@nbenitez
Alpinesioyek@jirutka
ArchAUR sioyek@goggle
ArchAUR sioyek-git@hrdl-github
ArchAUR sioyek-appimage@DhruvaSambrani
Debiansioyek@viccie30
NixOSsioyek@podocarp
openSUSEPublishing@uncomfyhalomacro
openSUSEFactory@uncomfyhalomacro
Ubuntusioyek@viccie30

Documentation

You can view the official documentation here.

Feature Video Overview

Sioyek feature overview

For a more in-depth tutorial, see this video:

Sioyek Tutorial

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

  1. Install Qt 5 and make sure qmake is in PATH.

    Run qmake --version to make sure the qmake in path is using Qt 5.x.

  2. Install libharfbuzz:

sudo apt install libharfbuzz-dev
  1. Clone the repository and build:
git clone --recursive https://github.com/ahrm/sioyek
cd sioyek
./build_linux.sh

Windows

  1. Install Visual Studio (tested on 2019, other relatively recent versions should work too)
  2. Install Qt 5 and make sure qmake is in PATH.
  3. 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

  1. Install Xcode.
  2. 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.

Buy Me A Coffee