locally hosted web application that allows you to perform various operations on PDF files
Go to file
Anthony Stirling 774b500159
get updates advanced (#4124)
# Description of Changes
This pull request introduces a comprehensive update to the application's
update notification and modal system, enhancing both the backend logic
and the user interface for update alerts. The changes include a new
modal dialog for update details, improved internationalization (i18n)
support, dynamic fetching of update information, and context-aware
download links. These improvements make update notifications clearer,
more informative, and tailored to the user's installation type.

**Key changes:**

**1. Update Notification and Modal System Overhaul**
- Added a new modal dialog (`showUpdateModal`) that displays detailed
update information, including current, latest, and latest stable
versions, update priority, breaking changes, migration guides, and a
list of available updates. The modal dynamically fetches and displays
full update details and adapts to dark mode.
([[app/core/src/main/resources/static/js/githubVersion.jsR206-R387](diffhunk://#diff-5a6376050581cc6f1fb0b6266af4d8a3db1332879459afd3a073b274b5ab637aR206-R387)])
- Enhanced the update button logic to reflect update priority visually
(e.g., urgent/normal/minor), store summary data, and trigger the modal
on click.
([[app/core/src/main/resources/static/js/githubVersion.jsL74-R190](diffhunk://#diff-5a6376050581cc6f1fb0b6266af4d8a3db1332879459afd3a073b274b5ab637aL74-R190)])
- Improved the update check process to use a new summary API endpoint
and handle missing or failed update data gracefully.
[[1]](diffhunk://#diff-5a6376050581cc6f1fb0b6266af4d8a3db1332879459afd3a073b274b5ab637aL19-R108)],
[[2]](diffhunk://#diff-5a6376050581cc6f1fb0b6266af4d8a3db1332879459afd3a073b274b5ab637aL74-R190)])

**2. Context-Aware Download Links**
- Introduced `getDownloadUrl()` to generate download links based on the
user's machine type and security configuration, ensuring only relevant
installers or jars are offered.
([[app/core/src/main/resources/static/js/githubVersion.jsL19-R108](diffhunk://#diff-5a6376050581cc6f1fb0b6266af4d8a3db1332879459afd3a073b274b5ab637aL19-R108)])

**3. Internationalization (i18n) Enhancements**
- Added new i18n keys for all update-related modal and notification
strings in `messages_en_GB.properties`.
([[app/core/src/main/resources/messages_en_GB.propertiesR369-R400](diffhunk://#diff-ee1c6999a33498cfa3abba4a384e73a8b8269856899438de80560c965079a9fdR369-R400)])
- Injected all necessary i18n constants into the frontend via
`navbar.html` for use in the modal and notifications.
([[app/core/src/main/resources/templates/fragments/navbar.htmlR14-R51](diffhunk://#diff-e7ef383033ea52a00c96e71d5d2c1ff08829078fa5c84c8e48e1bf8f48861ec6R14-R51)])

**4. General UI and Code Improvements**
- Ensured update button styling is reset before applying new styles and
improved accessibility by hiding the settings modal when the update
modal is shown.
[[1]](diffhunk://#diff-5a6376050581cc6f1fb0b6266af4d8a3db1332879459afd3a073b274b5ab637aR138)],
[[2]](diffhunk://#diff-5a6376050581cc6f1fb0b6266af4d8a3db1332879459afd3a073b274b5ab637aR206-R387)])

These changes collectively provide a more robust, user-friendly, and
maintainable update notification experience.


---

## Checklist

### General

- [ ] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [ ] I have read the [Stirling-PDF Developer
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md)
(if applicable)
- [ ] I have read the [How to add new languages to
Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md)
(if applicable)
- [ ] I have performed a self-review of my own code
- [ ] My changes generate no new warnings

### Documentation

- [ ] I have updated relevant docs on [Stirling-PDF's doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
(if functionality has heavily changed)
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)

### UI Changes (if applicable)

- [ ] Screenshots or videos demonstrating the UI changes are attached
(e.g., as comments or direct attachments in the PR)

### Testing (if applicable)

- [ ] I have tested my changes locally. Refer to the [Testing
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing)
for more details.

---------

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Reece Browne <reecebrowne1995@gmail.com>
Co-authored-by: Reece Browne <74901996+reecebrowne@users.noreply.github.com>
Co-authored-by: a <a>
2025-08-08 14:19:19 +01:00
.claude feat:centralise temp-file management & cleanup across app/docker (#3797) 2025-06-25 18:32:28 +01:00
.devcontainer chore: update development configs, formatting tools, and CI enhancements (#4130) 2025-08-08 12:52:51 +01:00
.github chore: update development configs, formatting tools, and CI enhancements (#4130) 2025-08-08 12:52:51 +01:00
.vscode chore: update development configs, formatting tools, and CI enhancements (#4130) 2025-08-08 12:52:51 +01:00
app get updates advanced (#4124) 2025-08-08 14:19:19 +01:00
devGuide feat(common): add configurable maxDPI limit for PDF-to-image conversion (#4129) 2025-08-07 13:57:47 +01:00
devTools refactor: move modules under app/ directory and update file paths (#3938) 2025-07-14 20:53:11 +01:00
docs pipeline bug, doc bugs, auto split new URL and doc (#2906) 2025-02-07 13:17:35 +00:00
exampleYmlFiles Fix for security not downloading and running correctly in V1.0.0 (#3902) 2025-07-07 23:54:58 +01:00
gradle/wrapper Upgrade Gradle to 8.14 in CI Workflows and Gradle Wrapper (#3425) 2025-04-27 16:17:07 +01:00
images Update screenshots (#2875) 2025-02-04 11:24:35 +00:00
scripts Add new keys to zh_TW Traditional Chinese ignore translation list (#4108) 2025-08-04 16:25:38 +01:00
testing legal: termsAndConditions has moved (#4035) 2025-07-28 10:14:20 +01:00
.editorconfig chore: update development configs, formatting tools, and CI enhancements (#4130) 2025-08-08 12:52:51 +01:00
.git-blame-ignore-revs refactor: move modules under app/ directory and update file paths (#3938) 2025-07-14 20:53:11 +01:00
.gitattributes refactor: move modules under app/ directory and update file paths (#3938) 2025-07-14 20:53:11 +01:00
.gitignore V2 settings api (Added to V1) (#4015) 2025-07-29 13:02:02 +01:00
.pre-commit-config.yaml 🤖 format everything with pre-commit by stirlingbot (#4075) 2025-08-02 23:18:48 +01:00
build.gradle get updates advanced (#4124) 2025-08-08 14:19:19 +01:00
CONTRIBUTING.md exception handling and exception improvements (#3858) 2025-07-02 16:51:45 +01:00
DATABASE.md Adds manual backup creation 2024-12-17 23:23:16 +01:00
Dockerfile Optimize Dockerfiles (#4069) 2025-07-31 23:57:09 +01:00
Dockerfile.dev Optimize Dockerfiles (#4069) 2025-07-31 23:57:09 +01:00
Dockerfile.fat Optimize Dockerfiles (#4069) 2025-07-31 23:57:09 +01:00
Dockerfile.ultra-lite Version bump + docker ultra lite fix (#4057) 2025-07-31 06:26:27 +01:00
gradle.properties build(local): simplify writeVersion task with WriteProperties plugin and enable build caching (#4139) 2025-08-08 10:36:30 +01:00
gradlew Upgrade Gradle to 8.14 in CI Workflows and Gradle Wrapper (#3425) 2025-04-27 16:17:07 +01:00
gradlew.bat Upgrade Gradle to 8.14 in CI Workflows and Gradle Wrapper (#3425) 2025-04-27 16:17:07 +01:00
HowToUseOCR.md Improve Markdown documentation a bit 2024-12-22 17:37:58 +08:00
launch4jConfig.xml ci: enhance GitHub Actions workflows with Gradle setup, caching improvements, and Docker image testing (#3956) 2025-07-16 17:17:11 +01:00
LICENSE refactor: move modules under app/ directory and update file paths (#3938) 2025-07-14 20:53:11 +01:00
README.md 🌐 Sync Translations + Update README Progress Table (#4135) 2025-08-08 12:21:29 +01:00
SECURITY.md Improve Markdown documentation a bit 2024-12-22 17:37:58 +08:00
settings.gradle refactor: move modules under app/ directory and update file paths (#3938) 2025-07-14 20:53:11 +01:00

Stirling-PDF

Docker Pulls Discord OpenSSF Scorecard GitHub Repo stars

Stirling PDF - Open source locally hosted web PDF editor | Product Hunt Deploy to DO

Stirling-PDF is a robust, locally hosted web-based PDF manipulation tool using Docker. It enables you to carry out various operations on PDF files, including splitting, merging, converting, reorganizing, adding images, rotating, compressing, and more. This locally hosted web application has evolved to encompass a comprehensive set of features, addressing all your PDF requirements.

All files and PDFs exist either exclusively on the client side, reside in server memory only during task execution, or temporarily reside in a file solely for the execution of the task. Any file downloaded by the user will have been deleted from the server by that point.

Homepage: https://stirlingpdf.com

All documentation available at https://docs.stirlingpdf.com/

stirling-home

Features

  • 50+ PDF Operations
  • Parallel file processing and downloads
  • Dark mode support
  • Custom download options
  • Custom 'Pipelines' to run multiple features in a automated queue
  • API for integration with external scripts
  • Optional Login and Authentication support (see here for documentation)
  • Database Backup and Import (see here for documentation)
  • Enterprise features like SSO (see here for documentation)

PDF Features

Page Operations

  • View and modify PDFs - View multi-page PDFs with custom viewing, sorting, and searching. Plus, on-page edit features like annotating, drawing, and adding text and images. (Using PDF.js with Joxit and Liberation fonts)
  • Full interactive GUI for merging/splitting/rotating/moving PDFs and their pages
  • Merge multiple PDFs into a single resultant file
  • Split PDFs into multiple files at specified page numbers or extract all pages as individual files
  • Reorganize PDF pages into different orders
  • Rotate PDFs in 90-degree increments
  • Remove pages
  • Multi-page layout (format PDFs into a multi-paged page)
  • Scale page contents size by set percentage
  • Adjust contrast
  • Crop PDF
  • Auto-split PDF (with physically scanned page dividers)
  • Extract page(s)
  • Convert PDF to a single page
  • Overlay PDFs on top of each other
  • PDF to a single page
  • Split PDF by sections

Conversion Operations

  • Convert PDFs to and from images
  • Convert any common file to PDF (using LibreOffice)
  • Convert PDF to Word/PowerPoint/others (using LibreOffice)
  • Convert HTML to PDF
  • Convert PDF to XML
  • Convert PDF to CSV
  • URL to PDF
  • Markdown to PDF

Security & Permissions

  • Add and remove passwords
  • Change/set PDF permissions
  • Add watermark(s)
  • Certify/sign PDFs
  • Sanitize PDFs
  • Auto-redact text

Other Operations

  • Add/generate/write signatures
  • Split by Size or PDF
  • Repair PDFs
  • Detect and remove blank pages
  • Compare two PDFs and show differences in text
  • Add images to PDFs
  • Compress PDFs to decrease their filesize (using qpdf)
  • Extract images from PDF
  • Remove images from PDF
  • Extract images from scans
  • Remove annotations
  • Add page numbers
  • Auto-rename files by detecting PDF header text
  • OCR on PDF (using Tesseract OCR)
  • PDF/A conversion (using LibreOffice)
  • Edit metadata
  • Flatten PDFs
  • Get all information on a PDF to view or export as JSON
  • Show/detect embedded JavaScript

📖 Get Started

Visit our comprehensive documentation at docs.stirlingpdf.com for:

  • Installation guides for all platforms
  • Configuration options
  • Feature documentation
  • API reference
  • Security setup
  • Enterprise features

Supported Languages

Stirling-PDF currently supports 40 languages!

Language Progress
Arabic (العربية) (ar_AR) 63%
Azerbaijani (Azərbaycan Dili) (az_AZ) 63%
Basque (Euskara) (eu_ES) 37%
Bulgarian (Български) (bg_BG) 70%
Catalan (Català) (ca_CA) 69%
Croatian (Hrvatski) (hr_HR) 62%
Czech (Česky) (cs_CZ) 71%
Danish (Dansk) (da_DK) 63%
Dutch (Nederlands) (nl_NL) 61%
English (English) (en_GB) 100%
English (US) (en_US) 100%
French (Français) (fr_FR) 91%
German (Deutsch) (de_DE) 99%
Greek (Ελληνικά) (el_GR) 69%
Hindi (हिंदी) (hi_IN) 68%
Hungarian (Magyar) (hu_HU) 99%
Indonesian (Bahasa Indonesia) (id_ID) 63%
Irish (Gaeilge) (ga_IE) 70%
Italian (Italiano) (it_IT) 98%
Japanese (日本語) (ja_JP) 95%
Korean (한국어) (ko_KR) 69%
Norwegian (Norsk) (no_NB) 67%
Persian (فارسی) (fa_IR) 66%
Polish (Polski) (pl_PL) 73%
Portuguese (Português) (pt_PT) 70%
Portuguese Brazilian (Português) (pt_BR) 77%
Romanian (Română) (ro_RO) 59%
Russian (Русский) (ru_RU) 90%
Serbian Latin alphabet (Srpski) (sr_LATN_RS) 97%
Simplified Chinese (简体中文) (zh_CN) 95%
Slovakian (Slovensky) (sk_SK) 53%
Slovenian (Slovenščina) (sl_SI) 73%
Spanish (Español) (es_ES) 75%
Swedish (Svenska) (sv_SE) 67%
Thai (ไทย) (th_TH) 60%
Tibetan (བོད་ཡིག་) (bo_CN) 66%
Traditional Chinese (繁體中文) (zh_TW) 99%
Turkish (Türkçe) (tr_TR) 82%
Ukrainian (Українська) (uk_UA) 72%
Vietnamese (Tiếng Việt) (vi_VN) 58%
Malayalam (മലയാളം) (ml_IN) 75%

Stirling PDF Enterprise

Stirling PDF offers an Enterprise edition of its software. This is the same great software but with added features, support and comforts. Check out our Enterprise docs

🤝 Looking to contribute?

Join our community: