[GH-ISSUE #1359] Downstream Debian package: Make it possible to build without Stripe & Firebase; vendor the webpush library #959

Open
opened 2026-05-07 00:29:07 +02:00 by BreizhHardware · 5 comments

Originally created by @binwiederhier on GitHub (May 30, 2025).
Original GitHub issue: https://github.com/binwiederhier/ntfy/issues/1359

The downstream Debian package had to do some horrible things to remove Stripe and Firebase and Webpush: https://sources.debian.org/patches/ntfy/2.11.0-2/. This also caused #1358.

We should make it easy with build tags to do that.

/cc @thekhalifa

Originally created by @binwiederhier on GitHub (May 30, 2025). Original GitHub issue: https://github.com/binwiederhier/ntfy/issues/1359 The downstream Debian package had to do some horrible things to remove Stripe and Firebase and Webpush: https://sources.debian.org/patches/ntfy/2.11.0-2/. This also caused #1358. We should make it easy with build tags to do that. /cc @thekhalifa
Author
Owner

@thekhalifa commented on GitHub (Aug 18, 2025):

Hi, I tried your commits from 7th of Aug and they worked great. Completely replace the 2 heavy patches now.
Just to make sure I didn't miss anything, I'm using these 3 tags: nopayments, nofirebase, nowebpush.

Whenever you're ready to tag those commits in your next release, I'll package that version (latest 2.14 is prior to those)

Thanks.

<!-- gh-comment-id:3198397741 --> @thekhalifa commented on GitHub (Aug 18, 2025): Hi, I tried your commits from 7th of Aug and they worked great. Completely replace the 2 heavy patches now. Just to make sure I didn't miss anything, I'm using these 3 tags: nopayments, nofirebase, nowebpush. Whenever you're ready to tag those commits in your next release, I'll package that version (latest 2.14 is prior to those) Thanks.
Author
Owner

@binwiederhier commented on GitHub (Aug 24, 2025):

@thekhalifa That's great to hear! I'll ping you when I do a new release.

Is there any way to get the web app packaged too? Even if it's a bit of work? What would be the path forward? I really don't want a defunct version of ntfy in the Debian repo.

(Note: I will keep this issue open as the main Debian packaging issue)

<!-- gh-comment-id:3218039489 --> @binwiederhier commented on GitHub (Aug 24, 2025): @thekhalifa That's great to hear! I'll ping you when I do a new release. Is there _any_ way to get the web app packaged too? Even if it's a bit of work? What would be the path forward? I really don't want a defunct version of ntfy in the Debian repo. (Note: I will keep this issue open as the main Debian packaging issue)
Author
Owner

@binwiederhier commented on GitHub (Aug 24, 2025):

@thekhalifa I am also happy to chat about this on my Discord or elsewhere, if it's easier to talk in chat. Let me know

<!-- gh-comment-id:3218248619 --> @binwiederhier commented on GitHub (Aug 24, 2025): @thekhalifa I am also happy to chat about this on my Discord or elsewhere, if it's easier to talk in chat. Let me know
Author
Owner

@thekhalifa commented on GitHub (Aug 25, 2025):

Whenever you tag the repo, it'll show up on debian's tracker.d.o within a few days.
debian 13 was already released, so won't be affected by this change.

On the webapp side, the issue is missing dependencies - two kinds:

  1. Vite - maybe webpack can be used instead to build the app on debian? I haven't tried.
  2. package.json dependencies - I don't see any alternative but for them to be packaged first. Even trying to narrow down the list, it's still quite a few: dexie*, humanize-duration, react-, stacktrace-, stylis-plugin*, mui/, emotion/.

They all look critical for the webapp. Maybe removing react-remark avoids a big chunk of dependencies, but that would break MD rendering. Removing mui? nope, irreplaceable.

I can try to package a few of the flat ones, but react-, mui/ are a little too deep. Of course, maybe they get packaged in the future for other packages. Then that helps.

But even without the webapp, ntfy-client is fully functional and ntfy-server is a functional backend. So IMHO, it's still pretty useful for command line and mobile users.

If you're interested in a rough recap of what's in debian and what isn't from the webapp:

$ cd ntfy/web
$ pkgjs-depends
# ntfy@1.0.0
# 68 missing npm module(s)
DEPENDENCIES:
  node-babel7-runtime (@babel/runtime)
  node-csstype (csstype)
  node-debug (debug)
  node-emotion (@emotion/babel-plugin, @emotion/cache, @emotion/is-prop-valid, @emotion/react, @emotion/serialize, @emotion/use-insertion-effect-with-fallbacks, @emotion/utils)
  node-extend (extend)
  node-i18next (i18next)
  node-i18next-browser-languagedetector (i18next-browser-languagedetector)
  node-i18next-http-backend (i18next-http-backend)
  node-is-buffer (is-buffer)
  node-is-plain-obj (is-plain-obj)
  node-popper2 (@popperjs/core)
  node-prop-types (@types/prop-types, prop-types)
  node-react (@types/react, react)
  node-react-dom (react-dom)
  node-react-is (react-is)
  node-react-toastify (clsx)
  node-react-transition-group (@types/react-transition-group, react-transition-group)
  node-source-map (source-map)
  node-stylis (stylis)
  node-xtend (xtend)

MISSING:
ntfy@1.0.0
 └── @emotion/styled (11.14.1)
 └── @mui/icons-material (5.18.0)
     └── @mui/material (5.18.0)
         └── @mui/core-downloads-tracker (5.18.0)
         └── @mui/system (5.18.0)
             └── @mui/private-theming (5.17.1)
                 └── @mui/utils (5.17.1)
                     └── @mui/types (7.2.24)
             └── @mui/styled-engine (5.18.0)
                 └── (^) @emotion/styled (11.14.1)
             └── (^) @mui/types (7.2.24)
             └── (^) @mui/utils (5.17.1)
             └── (^) @emotion/styled (11.14.1)
         └── (^) @mui/types (7.2.24)
         └── (^) @mui/utils (5.17.1)
         └── (^) @emotion/styled (11.14.1)
 └── (^) @mui/material (5.18.0)
 └── dexie (3.2.7)
 └── dexie-react-hooks (1.1.7)
 └── humanize-duration (3.33.0)
 └── js-base64 (3.7.8)
 └── react-i18next (11.18.6)
     └── html-parse-stringify (3.0.1)
         └── void-elements (3.1.0)
 └── react-infinite-scroll-component (6.1.0)
     └── throttle-debounce (2.3.0)
 └── react-remark (2.1.0)
     └── rehype-react (6.2.1)
         └── @mapbox/hast-util-table-cell-style (0.2.1)
             └── unist-util-visit (1.4.1)
                 └── unist-util-visit-parents (2.1.2)
                     └── unist-util-is (3.0.0)
         └── hast-to-hyperscript (9.0.1)
             └── @types/unist (2.0.11)
             └── comma-separated-tokens (1.0.8)
             └── property-information (5.6.0)
             └── space-separated-tokens (1.1.5)
             └── style-to-object (0.3.0)
                 └── inline-style-parser (0.1.1)
             └── (^) unist-util-is (3.0.0)
             └── web-namespaces (1.1.4)
     └── remark-parse (9.0.0)
         └── mdast-util-from-markdown (0.8.5)
             └── @types/mdast (3.0.15)
                 └── (^) @types/unist (2.0.11)
             └── mdast-util-to-string (2.0.0)
             └── micromark (2.11.4)
                 └── parse-entities (2.0.0)
                     └── character-entities (1.2.4)
                     └── character-entities-legacy (1.1.4)
                     └── character-reference-invalid (1.1.4)
                     └── is-alphanumerical (1.0.4)
                         └── is-alphabetical (1.0.4)
                         └── is-decimal (1.0.4)
                     └── (^) is-decimal (1.0.4)
                     └── is-hexadecimal (1.0.4)
             └── (^) parse-entities (2.0.0)
             └── unist-util-stringify-position (2.0.3)
                 └── (^) @types/unist (2.0.11)
     └── remark-rehype (8.1.0)
         └── mdast-util-to-hast (10.2.0)
             └── (^) @types/mdast (3.0.15)
             └── (^) @types/unist (2.0.11)
             └── mdast-util-definitions (4.0.0)
                 └── (^) unist-util-visit (1.4.1)
             └── mdurl (1.0.1)
             └── unist-builder (2.0.3)
             └── unist-util-generated (1.1.6)
             └── unist-util-position (3.1.0)
             └── (^) unist-util-visit (1.4.1)
     └── unified (9.2.2)
         └── bail (1.0.5)
         └── trough (1.0.5)
         └── vfile (4.2.1)
             └── (^) @types/unist (2.0.11)
             └── (^) unist-util-stringify-position (2.0.3)
             └── vfile-message (2.0.4)
                 └── (^) @types/unist (2.0.11)
                 └── (^) unist-util-stringify-position (2.0.3)
 └── react-router-dom (6.30.1)
     └── @remix-run/router (1.23.0)
     └── react-router (6.30.1)
         └── (^) @remix-run/router (1.23.0)
 └── stacktrace-gps (3.1.2)
     └── stackframe (1.3.4)
 └── stacktrace-js (2.0.2)
     └── error-stack-parser (2.1.4)
         └── (^) stackframe (1.3.4)
     └── stack-generator (2.0.10)
         └── (^) stackframe (1.3.4)
     └── (^) stacktrace-gps (3.1.2)
 └── stylis-plugin-rtl (2.1.1)
     └── cssjanus (2.3.0)

<!-- gh-comment-id:3219993988 --> @thekhalifa commented on GitHub (Aug 25, 2025): Whenever you tag the repo, it'll show up on debian's tracker.d.o within a few days. debian 13 was already released, so won't be affected by this change. On the webapp side, the issue is missing dependencies - two kinds: 1. Vite - maybe webpack can be used instead to build the app on debian? I haven't tried. 2. package.json dependencies - I don't see any alternative but for them to be packaged first. Even trying to narrow down the list, it's still quite a few: dexie*, humanize-duration, react-*, stacktrace-*, stylis-plugin*, mui/*, emotion/*. They all look critical for the webapp. Maybe removing react-remark avoids a big chunk of dependencies, but that would break MD rendering. Removing mui? nope, irreplaceable. I can try to package a few of the flat ones, but react-*, mui/* are a little too deep. Of course, maybe they get packaged in the future for other packages. Then that helps. But even without the webapp, ntfy-client is fully functional and ntfy-server is a functional backend. So IMHO, it's still pretty useful for command line and mobile users. If you're interested in a rough recap of what's in debian and what isn't from the webapp: ``` $ cd ntfy/web $ pkgjs-depends # ntfy@1.0.0 # 68 missing npm module(s) DEPENDENCIES: node-babel7-runtime (@babel/runtime) node-csstype (csstype) node-debug (debug) node-emotion (@emotion/babel-plugin, @emotion/cache, @emotion/is-prop-valid, @emotion/react, @emotion/serialize, @emotion/use-insertion-effect-with-fallbacks, @emotion/utils) node-extend (extend) node-i18next (i18next) node-i18next-browser-languagedetector (i18next-browser-languagedetector) node-i18next-http-backend (i18next-http-backend) node-is-buffer (is-buffer) node-is-plain-obj (is-plain-obj) node-popper2 (@popperjs/core) node-prop-types (@types/prop-types, prop-types) node-react (@types/react, react) node-react-dom (react-dom) node-react-is (react-is) node-react-toastify (clsx) node-react-transition-group (@types/react-transition-group, react-transition-group) node-source-map (source-map) node-stylis (stylis) node-xtend (xtend) MISSING: ntfy@1.0.0 └── @emotion/styled (11.14.1) └── @mui/icons-material (5.18.0) └── @mui/material (5.18.0) └── @mui/core-downloads-tracker (5.18.0) └── @mui/system (5.18.0) └── @mui/private-theming (5.17.1) └── @mui/utils (5.17.1) └── @mui/types (7.2.24) └── @mui/styled-engine (5.18.0) └── (^) @emotion/styled (11.14.1) └── (^) @mui/types (7.2.24) └── (^) @mui/utils (5.17.1) └── (^) @emotion/styled (11.14.1) └── (^) @mui/types (7.2.24) └── (^) @mui/utils (5.17.1) └── (^) @emotion/styled (11.14.1) └── (^) @mui/material (5.18.0) └── dexie (3.2.7) └── dexie-react-hooks (1.1.7) └── humanize-duration (3.33.0) └── js-base64 (3.7.8) └── react-i18next (11.18.6) └── html-parse-stringify (3.0.1) └── void-elements (3.1.0) └── react-infinite-scroll-component (6.1.0) └── throttle-debounce (2.3.0) └── react-remark (2.1.0) └── rehype-react (6.2.1) └── @mapbox/hast-util-table-cell-style (0.2.1) └── unist-util-visit (1.4.1) └── unist-util-visit-parents (2.1.2) └── unist-util-is (3.0.0) └── hast-to-hyperscript (9.0.1) └── @types/unist (2.0.11) └── comma-separated-tokens (1.0.8) └── property-information (5.6.0) └── space-separated-tokens (1.1.5) └── style-to-object (0.3.0) └── inline-style-parser (0.1.1) └── (^) unist-util-is (3.0.0) └── web-namespaces (1.1.4) └── remark-parse (9.0.0) └── mdast-util-from-markdown (0.8.5) └── @types/mdast (3.0.15) └── (^) @types/unist (2.0.11) └── mdast-util-to-string (2.0.0) └── micromark (2.11.4) └── parse-entities (2.0.0) └── character-entities (1.2.4) └── character-entities-legacy (1.1.4) └── character-reference-invalid (1.1.4) └── is-alphanumerical (1.0.4) └── is-alphabetical (1.0.4) └── is-decimal (1.0.4) └── (^) is-decimal (1.0.4) └── is-hexadecimal (1.0.4) └── (^) parse-entities (2.0.0) └── unist-util-stringify-position (2.0.3) └── (^) @types/unist (2.0.11) └── remark-rehype (8.1.0) └── mdast-util-to-hast (10.2.0) └── (^) @types/mdast (3.0.15) └── (^) @types/unist (2.0.11) └── mdast-util-definitions (4.0.0) └── (^) unist-util-visit (1.4.1) └── mdurl (1.0.1) └── unist-builder (2.0.3) └── unist-util-generated (1.1.6) └── unist-util-position (3.1.0) └── (^) unist-util-visit (1.4.1) └── unified (9.2.2) └── bail (1.0.5) └── trough (1.0.5) └── vfile (4.2.1) └── (^) @types/unist (2.0.11) └── (^) unist-util-stringify-position (2.0.3) └── vfile-message (2.0.4) └── (^) @types/unist (2.0.11) └── (^) unist-util-stringify-position (2.0.3) └── react-router-dom (6.30.1) └── @remix-run/router (1.23.0) └── react-router (6.30.1) └── (^) @remix-run/router (1.23.0) └── stacktrace-gps (3.1.2) └── stackframe (1.3.4) └── stacktrace-js (2.0.2) └── error-stack-parser (2.1.4) └── (^) stackframe (1.3.4) └── stack-generator (2.0.10) └── (^) stackframe (1.3.4) └── (^) stacktrace-gps (3.1.2) └── stylis-plugin-rtl (2.1.1) └── cssjanus (2.3.0) ```
Author
Owner

@thekhalifa commented on GitHub (Aug 25, 2025):

By the way, the last patch for emersion smtp, is there anything to be done about this pinned package?

replace github.com/emersion/go-smtp => github.com/emersion/go-smtp v0.17.0 // Pin version due to breaking changes, see #839

debian stable now has v0.21.2 - so perhaps it's time for a bump?
Happy to help, submit a PR or patch.

<!-- gh-comment-id:3220005104 --> @thekhalifa commented on GitHub (Aug 25, 2025): By the way, the last patch for emersion smtp, is there anything to be done about this pinned package? `replace github.com/emersion/go-smtp => github.com/emersion/go-smtp v0.17.0 // Pin version due to breaking changes, see #839` debian stable now has v0.21.2 - so perhaps it's time for a bump? Happy to help, submit a PR or patch.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/ntfy#959
No description provided.