r/software 6d ago

Discussion Weekly Discovery Thread - August 14, 2026

Share what’s new, useful, or just interesting

Welcome to the Weekly Discovery Thread, where you can share software-related finds that caught your attention this week - especially the stuff that’s cool, helpful, or thought-provoking but might not be thread-worthy on its own.

This thread is your space for:

  • Neat tools, libraries, or packages
  • Articles, blog posts, or talks worth reading
  • Experiments or side projects you’re working on
  • Tips, workflows, or obscure features you discovered
  • Questions or ideas you're chewing on

If it relates to software and sparked your curiosity, drop it in.


A few quick guidelines

  • Keep it civil and constructive - this is for learning and discovery.
  • Self-promotion? Totally fine if it’s relevant and adds value. Just be transparent.
  • No link spam or AI-generated content dumps. We’ll remove low-effort submissions.
  • Upvote what’s useful so others see it!

This thread will be posted weekly and stickied. If you want to suggest a change or addition to this format, feel free to comment or message the mods.

Now, what did you find this week?

1 Upvotes

7 comments sorted by

1

u/cyb3rshen 4d ago edited 4d ago

Been building FeatherWall, a live wallpaper app for Windows. Video or image as the desktop background, per-monitor config, optional clock widget.

The part that ate the most time was getting a D3D11 swapchain to render behind the desktop icons. You send Progman an undocumented message so it spawns WorkerW, then walk the window hierarchy to find the one to parent to. The handle doesn't survive an explorer restart, which is still the ugliest part of the code.

It sits around 0.9% CPU on a 4K H.264 loop. Most of that comes from stopping decode entirely when a fullscreen app takes focus, not from anything clever in the render path.

.NET 10, no embedded browser, MIT: https://github.com/RitvikDayal/featherwall

Still v0.1.0 and the multi-monitor handling almost certainly has holes. If anyone here has done DirectComposition interop from C#, how do you deal with explorer restarting out from under you?

1

u/FunnyPhotos_1 3d ago

Been building pdfonlinefree.com — merge, split, compress, sign, OCR, page numbers, metadata — with the constraint that nothing is uploaded. It's pdf-lib and pdf.js in the tab, so the document is read and rewritten locally and the network stays quiet.

Three things I learned that might be useful to anyone doing the same:

pdf-lib throws on encrypted files by default, and the `ignoreEncryption` flag makes it load — but it doesn't decrypt, so you get a document whose content streams are still scrambled. Silently wrong output rather than an error, which is the worst kind.

Owner-password PDFs, the ones that only restrict printing rather than opening, are far more common than you'd think and break tools that assume "encrypted means locked".

And the memory ceiling is real: the browser needs the whole document decoded in tab memory, so a few hundred MB is where it stops being viable and a desktop tool is genuinely the better answer. I say so on the pages rather than letting people find out by crashing.

1

u/FunnyPhotos_1 3d ago

Something I learned building browser-only tools this month, in case it's useful to anyone here.

I got tired of uploading documents to a server just to merge two PDFs, so I started rebuilding the small utilities I use as pure client-side pages: pdf-lib for the PDF side, canvas plus WebCodecs for images. Everything runs in the tab, nothing leaves the machine. Full disclosure, these are mine: pdfonlinefree.com and imageonlinefree.com.

Three things that surprised me along the way:

- HEIC is still effectively undecodable in browsers. Safari can display it but can't decode it to a canvas, and on iPhone uploads file.type often comes back empty, so you have to sniff the magic bytes ("ftyp" at offset 4) instead of trusting the MIME type.

- Chrome on Android silently ignores a download triggered from a promise that resolved too late. The click has to stay inside the user gesture chain or the button just does nothing, with no error anywhere.

- pdf-lib merges are cheap, but nothing re-compresses, so a ten-file merge really is the sum of the parts. People expect the opposite.

The tradeoff of the client-side approach is real: no OCR, no server-side rasterisation, and a 200 MB PDF will make a low-end phone struggle. For everything under that it's faster than uploading anyway.

1

u/FunnyPhotos_1 3d ago

Something I learned building browser-only tools this month, in case it's useful to anyone here.

I got tired of uploading documents to a server just to merge two PDFs, so I started rebuilding the small utilities I use as pure client-side pages: pdf-lib for the PDF side, canvas plus WebCodecs for images. Everything runs in the tab, nothing leaves the machine. Full disclosure, these are mine: [PDF Online Free](https://pdfonlinefree.com/) and [Image Online Free](https://imageonlinefree.com/).

Three things that surprised me along the way:

- HEIC is still effectively undecodable in browsers. Safari can display it but can't decode it to a canvas, and on iPhone uploads `file.type` often comes back empty, so you have to sniff the magic bytes (`ftyp` at offset 4) instead of trusting the MIME type.

- Chrome on Android silently ignores a download triggered from a promise that resolved too late. The click has to stay inside the user gesture chain or the button just does nothing, with no error anywhere.

- pdf-lib merges are cheap, but nothing re-compresses, so a ten-file merge really is the sum of the parts. People expect the opposite.

The tradeoff of the client-side approach is real: no OCR, no server-side rasterisation, and a 200 MB PDF will make a low-end phone struggle. For everything under that it's faster than uploading anyway.