[Daniel's week] January 9, 2026
Daniel Stenberg
daniel at haxx.se
Fri Jan 9 17:15:16 CET 2026
Hey!
Starting out the new year with a curl release to ge the speed up!
## stickers
My sticker order arrived [1] and I'm happy to say that the feel and quality
match the level of previous batches. I look forward to hand them out at FOSDEM
and other events through-out 2026. Come say hello if you see me and ask for
one!
## time and size
Within the last week before the curl 8.18.0 release it was reported that the
curl progress bar did not fit correctly in a default terminal window on
Windows. This flaw was probably introduced in November 2025 when I tweaked the
progress meter most recently. Yay for people testing what we do.
Anyway, as I tried to fix this by removing two spaces in the line I learned
that Windows actually has one byte fewer to use than most other systems
because the (invisible) newline character is apparently included in the count
there. This put me in a situation where all the existing data would not fit
within 79 columns. It was still one byte too wide. Oops.
The reason it needs to fit in a single line is that it is the only way we can
continously update it without using terminal "trickery" that would make things
*much* more complicated.
I mulled over the situation for a short while debating with myself how I could
magically gain a byte until I deemed that the best fix for this situation is
to shrink the time fields. The default (serial) transfer progress meter output
has three time fields: total time, time spent and time left. Each such field
used 8 bytes (--:--:--) and I decided to instead make the data fit in 7 bytes.
Times three made me end up with a two byte margin.
I made the code use the new format -:--:-- (using a single digit for the hour
field) for when the time is less than 10 hours and switch to "xxd yyh" when
larger than 10 hours but less than 100 hours and I adjusted the even larger
times accordingly. I added a test case that verifies the whole 63 bit time
range and discovered other bugs I also fixed. A fun challenge was how to
express extremely long times. I ended up making ">99999y" the largest value it
shows. More than 99,999 years. A 63 bit number of seconds holds up to hundreds
of millions of years. Fortunately I don't think people will actually do many
such transfers.
I also made the time display not show anything at all when it does not have
data to show instead of the only-dashes thing it did in the past.
While at it, I then also made sure that I added a test case for the progress
meter's data amount fields. There are six of them in the line. I can't believe
I had not done that earlier. That made me detect and fix some additional minor
display problems.
Inspired by this "success" I proceeded and made the same tests and fixes for
the tool's progress meter it shows when doing parallel transfers, as that uses
separate logic because it then needs to incorporate data for multiple
transfers into a single line.
All this of course probably will just go silently unnoticed by most poeple.
## logo and size
We got our current curl logo back 2016. Created by Adrian Burcea. We of course
immediately put it to use on the curl website and in August 2016 we switched
to using a SVG version on the site. (The logo was originally provided to us
using Adobe Illutrator format.)
The SVG was of course much smaller on disk and SVG scales much nicer for all
possible screen sizes. That file was 8658 bytes.
Nine years later, in December 18 2025, I was tweaking and optimizing some
unrelated images when I came to think of the curl logo and did a new
conversion from PNG via an SVG optimizer and ended up at 4918 bytes - with no
visual differences. Yay, much smaller. I pushed the commit.
Amusingly enough, since our CDN solution caches SVG files for *six months* no
one actually got to see the updated SVG version of the logo before Viktor
Szakats fell over this change and scrutinized it closer.
He spotted several mistakes in this SVG version and did his own take on fixing
them and minmizing it further. Knowledge and skill is a fun combination and he
took it down to 2787 bytes. Still looking the same.
I manually flushed the SVG from the CDN caches and now Viktor's version is the
one being served.
Fascinated by this feat I posted about this image optimization on Mastodon.
This triggered user Йоте who came back with yet another improvement [2]. Now
at 883 bytes! It even includes a few newlines that can actually be removed.
Inspired by that, Viktor came back and managed to squeeze that even more down
to 778 bytes.
This is less than a tenth of the original file size from 2016 - and it still
looks identical!
We experimented further and concluded that this minimized version with becomes
just 354 bytes when brotli compressed. However, since our CDN (Fastly) already
serves most web content from the site brotli compressed to browser users, I
don't think it is worth it for us to serve the logo pre-compressed.
Now we're discussing exactly which version out of all these to merge and use
[3].
## release
On Wednesday I put together the curl 8.18.0 release [4] on sent it off into
the world. As of this writing we have not yet heard any particular outcries or
seen regressions reported, so I'm leaning towards decreeing this a success.
## security
We have already received and closed ten vulnerability reports for curl on
HackerOne this year. None of them considered "real".
## Coming up
- another week of curl feature freeze
- I better start working on my FOSDEM talk
## Links
[1] = https://daniel.haxx.se/blog/2026/01/06/6000-curl-stickers/
[2] = https://social.net.ua/notice/B25SxW3zQZFV1GDGbI
[3] = https://github.com/curl/curl-www/pull/536
[4] = https://daniel.haxx.se/blog/2026/01/07/curl-8-18-0/
--
/ daniel.haxx.se
More information about the daniel
mailing list