ntfy
ntfy copied to clipboard
Desktop client (Windows/Mac/Linux)
Hi, I would love a Windows client with push support
This should be doable with python. Maybe not as a final solution, but afaik there is a library for python to send notifications on Windows.
Is this client supposed to send notifications or receive them? If it's the former, i can probably just compile the CLI for Windows.
Can you be a little more specific?
receive notifications and send them via push on the Windows client.
Maybe a tutorial like this can help? Or using electron at all
https://jojozhuang.github.io/tutorial/converting-web-app-to-desktop-app-with-electron/
i would love to subscribe to topics via a windows client. shouldn't it be possible to compile go for windows?
There are two things:
- The CLI (excluding the server) can likely be easily compiled for Windows and Mac, then you can subscribe like described here https://ntfy.sh/docs/subscribe/cli/
- The web app (like this one: https://ntfy.sh/app) can be packaged into a desktop app as well, using electron or others. I played with this today and it's absolutely doable.
Q: Which one would take precedent for you guys?
Note to self, also maybe look at https://github.com/tauri-apps/tauri, thanks @Laurenz
(Matrix).
(from this afternoon, WIP which does not work: https://github.com/binwiederhier/ntfy/pull/239)
Regarding the above question: What I'm looking for is an unobtrusive/low footprint systray thingy which tells me about new messages (I frequently forget to keep an ntfy browser tab open, yeah I know, can be pinned...).
Low footprint is kind of an issue with Electron, also not sure how well it would integrate with the systray and windows notification "requirement", so what I did yesterday was to prototype a small WPF app. I'm neither a .NET/WPF nor a C# expert so I'm not sure how far I will get with reasonable effort and energy but here goes a first proof of concept:
There's plenty of things still to do, but the basics are there. The major thing at this point is really that I display the messages in a WebView2 component (for lack of WPF experience on how hot to make such a list look nice w/o HTML) and that defeats the entire purpose of keeping a low memory footprint. Maybe I'll just dump the messages into a RichTextBox instead. Also need to figure out how to browse from there to the system default browser and not Edge... etc. etc.
So... I'll probably be back in a while with this...
@arminus very cool. Keep it up. I would absolutely love to have a low memory footprint app like that, but having to build the web app, Android app, and iOS app all by myself I eont have time for more. So if you can bring this to a great state I'll happily accept the contribution!
I think I'll definitely do the CLI for Windows and the Electron desktop app for all platforms, because it is fairly low effort compared to writing it from scratch. It's just fighting with a little bit of build stuff.
i would also look for a low profile app which sits in the tray and simply fetches notifications.
i thought about doing a simple cron job which calls a bash/php script to fetch new notifications and then use notifu to show them via the OS notification system but this would be an ugly hack
The CLI can do that https://ntfy.sh/docs/subscribe/cli/#subscribe-to-topics, though it doesn't sit in the tray. I suppose I could add tray support to that, but what for...
This will likely be really easy because I just have to compile for Windows.
@binwiederhier thank you for this awesome app and service, i really like it.
would be awesome to have a windows version of the cli tool and being able to open it in background and send it directly to the tray.
my current php based solution (just download and setup notifu and adapt the constants to fit your needs):
ntfy.php
<?php
const TOPIC = 'test';
//const PROXY = 'proxy.example.com:8080';
const PROXY = null;
const LOGFILE = 'ntfy.log';
//const LOGFILE = null;
const NOTIFU_COMMAND = 'notifu';
$opts = [];
if (PROXY) {
$opts= ['http' => ['proxy' => 'tcp://'.PROXY]];
}
$context = stream_context_create($opts);
$fp = fopen('https://ntfy.sh/'.TOPIC.'/json', 'rb', false, $context);
if (!$fp) {
exit('cannot open stream');
}
while (!feof($fp)) {
$json = fgets($fp, 2048);
$data = json_decode($json, true);
if (LOGFILE) {
file_put_contents(LOGFILE, $json."\n" , FILE_APPEND | LOCK_EX);
}
if ($data['event'] === 'message') {
$command = sprintf('%s /p "%s" /m "%s"',
NOTIFU_COMMAND,
$data['topic'],
$data['message']
);
exec($command);
}
flush();
}
fclose($fp);
start it with
start /B php ntfy.php
stop/kill it with the task manager
grΓΌΓe aus wien / greetings from vienna
Well that was easy. Needs a little bit of work to make the "run a command on message" stuff work, but not more than an hour or so.
https://github.com/binwiederhier/ntfy/pull/245
So I got it running batch scripts via cmd /Q /C ...
and it works nicely. What I'm unsure about is whether people would want PowerShell scripts instead. If there are no responses, I'll keep the cmd
route.
(Note to self, run PS: https://gist.github.com/coolbrg/d1854cc771025efb4a30197820c2c612)
Good work @binwiederhier !!
What I wanted to do and like to have is a PowerShell script, and when it receives something I get a toaster message (there is an module for that)
https://www.powershellgallery.com/packages/BurntToast/0.8.5 (1.0 is in preview)
https://www.youtube.com/watch?v=dfbe5Jp40tA (for maybe some extra info)
I achieved the same thing with this simple batch script and notifu.
notifu /p "%NTFY_TITLE%" /m "%NTFY_MESSAGE%"
exit 0
Mainly I want to know if PS is really necessary. My gut says no, right now.
:loudspeaker: Request for testing:
Got the yaml to work too, even with launching the calculator. Darn I wanted to do iOS, now I gotta finish and release this :-D I think I'll just release the CLI like this for now though. If you wanna test it here it is: https://phil.nopaste.net/ntfy.exe?d=1&f=ntfy.exe&a=yKVxKcfQVc
The docs from https://ntfy.sh/docs/subscribe/cli/ largely apply.
This can be placed in %AppData%\ntfy\client.yml
and then you can run ntfy sub --from-config
to listen:
subscribe:
- topic: echo-this
command: 'echo Message received: %message%'
- topic: alerts
command: |
notifu /m "%NTFY_MESSAGE%"
exit 0
if:
priority: high,urgent
- topic: calc
command: calc
awesome! will give it a try this week.
i personally prefer cmd
over powershell
.
I've now got a Windows binary for amd64 and a macOS universal binary. The PR for it is pretty complete and I'll likely release this very soon. The documentation doesn't really highlight the support for macOS and Windows, but I think I want to keep it that way until I've got the Electron apps too.
https://github.com/binwiederhier/ntfy/pull/245/files
macOS https://phil.nopaste.net/X7FB6NaLWw?d=1&f=ntfy_v1.22.0-next_macOS_all.tar.gz&a=RKxf7O6Q7H
Windows https://phil.nopaste.net/cJEaaFmM7V?d=1&f=ntfy_v1.22.0-next_windows_x86_64.zip&a=zkczYLcVoD
FYI - I'm about to release an alpha version of my .NET/WPF client in about 2 weeks, it's basically ready, but I won't have much time to respond to issues until then, so I'll hold it for a while.
Memory consumption currently clocks in at about 60-70MB which is unfortunately a lot more than I had hoped for (most likely due to the .NET runtime), would be curious to see how that compares to an Electron based version. And currently it only listens, i.e. no sending of messages since that is not my main priority from Windows.
Very cool. I'd be happy to make a section in the docs or install instructions for third party clients like this. Is the code open source and available somewhere?
The CLI for Windows and macOS are released so you can compare it to that, but the Electron app I've shelved for s bit.
It'll be on my github and open source, probably MIT licensed.
It's been a while and I'm afraid I have made no progress. The main issue is that the trade off between less memory consumption vs. effort required to implement something without an existing .NET HTML UI library (which are either memory hogs or have functional deficiencies) didn't quite work out in a way that I'm really happy.
Maybe I'll revisit this sometime in fall, but I'm not sure... Mostly just used ntfy in the browser UI in the last weeks.
Hello @binwiederhier
A couple of great Delphi developers wrote a nice wrapper for the API. (https://github.com/hazzelnuts/ntfy-for-delphi)
Seeing this issue got me excited as I can help out!
Would you be willing to accept a Delphi FireMonkey multi platform application contribution - With source, of course (It is true native compiled applications for each target - Windows, macOS, Android, iOS and Linux, from a single code base) - This will allow a low memory footprint desktop app which integrates tightly into the target OS (Lower than both C# .NET and Electron - No external dependencies needs to be packaged)? FireMonkey is a mature and stable multi platform framework.
There is a free community edition available of Delphi so anyone who want to use the code can do so right away π
Kind regards Glenn
Hello @binwiederhier
A couple of great Delphi developers wrote a nice wrapper for the API. (https://github.com/hazzelnuts/ntfy-for-delphi)
Seeing this issue got me excited as I can help out!
Would you be willing to accept a Delphi FireMokey multi platform application contribution - With source, of course (It is true native compiled applications for each target - Windows, macOS, Android, iOS and Linux, from a single code base) - This will allow a low memory footprint desktop app which integrates tightly into the target OS (Lower than both C# .NET and Electron - No external dependencies needs to be packaged)? FireMonkey is a mature and stable multi platform framework.
There is a free community edition available of Delphi so anyone who want to use the code can do so right away π
Kind regards Glenn
Looking for this! but also no custom server and topics with credentials as far as I see?
but also no custom server and topics with credentials as far as I see?
The wrapper is quite new, these features will be added next and thus in a demo application π
but also no custom server and topics with credentials as far as I see? The wrapper is quite new, these features will be added next and thus in a demo application π
As far as I can see now I really like it! also that there is an real application like this : https://github.com/hazzelnuts/ntfy-for-delphi/tree/main/sample/vcl/subscriber and then a notification when a message received... I would be very happy to see this running on my machine
also that there is an real application like this
Yes, the wrapper library ships with a simple, Windows-only (for now) demo.
and then a notification when a message received
Adding support for desktop notifications are straightforward. The developers behind the wrapper are working on extending the library further, and also eliminating the need for OpenSSL dependencies. I'll keep this thread updated once I know more π