diff --git a/.imgbotconfig b/.imgbotconfig index 68d6dd3..79722c1 100644 --- a/.imgbotconfig +++ b/.imgbotconfig @@ -1,6 +1,6 @@ { "ignoredFiles": [ - "*nocompress.svg", + "*.svg", ], "minKBReduced": 0, } diff --git a/_posts/2026-08-01-fourth-anniversary.md b/_posts/2026-08-01-fourth-anniversary.md new file mode 100644 index 0000000..9e58c85 --- /dev/null +++ b/_posts/2026-08-01-fourth-anniversary.md @@ -0,0 +1,299 @@ +--- +layout: post +title: "4 years of Sniffnet: the temptation that made it possible" +share-title: "4 years of Sniffnet: the temptation that made it possible" +nav-title: News +thumbnail-img: /assets/img/post/fourth-anniversary/cover.png +tags: [anniversary] +github-discussion: 1263 +--- + +**4 years ago** on this day, I made the very first commit to the Sniffnet GitHub repository and, +as is tradition, today I'd like to celebrate the project's anniversary with a blog post.

+Usually, the anniversary post is somewhat deep, reflective, and personal: over the past years I've talked about how being a maintainer changed my life, +how important it is to balance Sniffnet development with a full-time job, and how sustainable open source is crucial to ensure a project's longevity.

+I love discussing such topics because they pull the curtain back and show _the human that's behind the code_, but this year it'll be slightly different.
+I think that delicate subjects must come out naturally without forcing them, so rather than repeating myself +with another tear-jerking essay, or letting AI prose fake sentiments in my place, +this time I'd like to take a more lighthearted route, sharing some fun facts and Sniffnet's visual evolution over the years. + +
+ +### "The temptation to make a GUI is strong" + +As many of you know, Sniffnet was originally +a simple program that could only run from the command line to collect network traffic and print some rudimentary statistics. + +At the time I was a student, and I had just taken a Rust course.
+I don't know why, it's probably that the Rust language hit me differently or that I was getting into the magic world of networking, +but I felt like there was huge potential to make something way more complete and useful than a primitive terminal interface. + +The fact is that on the 20th of October 2022, I wrote this message to the friend I worked with on the first version of Sniffnet CLI: + +
+ +
+ +Translated from Italian, the message just says: _"The temptation to make a GUI is strong"_. + +Attached to that message there was a short video showing a very early prototype of the graphical interface: a simple counter of the network packets being captured.
+It was the first time I saw a window with Sniffnet's name on it, and I'm only sharing the video publicly today. + +
+ +
+ +I still remember the excitement I felt when I saw the window appear: in retrospect it was a small step, but at the time it felt like a huge leap.
+In fact, initially I didn't even know if it was possible to make a graphical interface in Rust at all. + +After some research I found several frameworks that could help me with this, and ultimately I decided to go with Iced.
+My first steps with Iced are still vivid, and I'd never have imagined that 4 years later Sniffnet would be prominently featured on their landing page as one of the most popular tools built with it. + +From there things moved quickly, and just a month later, on the 21st of November 2022, I released the first graphical interface as version 1.0. + +After all of this time, I was curious to look back at how the interface evolved, so I made a minimal widget that lets you travel through Sniffnet's main pages and releases. + + + +
+
+ Page: + + + + +
+
+
+
+
+
+
+
+
+
+ +You can use the scrubber to see how the app has become more complete and polished over time. + +
+ +### The past 12 months + +Let's now shift to recent history. + +The past year saw the release of a new major version, which finally brought the long-awaited process identification feature.
+Implementing it was quite a challenge, but I can say it was worth it: version 1.5.0 has +been the most successful release of the project so far, with more than 100k downloads in the first two months after its launch. + +In addition to 1.5.0, three minor releases were published to introduce more features such as remote notifications, +BPF filtering, pausable packet captures, custom IP blacklist support, connection latency measurements, +and signed installers for Windows (shoutout to SignPath for providing free code signing to Sniffnet). + +This year brought the total number of downloads to 530k, with a daily average of 657 downloads that is considerably higher than the previous year's 397 per day. + +
+Downloads over the years +
+ +The GitHub repository has also gained 10k new stars, fewer than last year's 14k, but still a very good result considering that the project is more mature and has been around for a while.
+This growth places Sniffnet in the top 0.0002% of all GitHub public repositories (678th[↗] out of 395 million[↗]): something astonishing to even think about. + +
+GitHub Stars over the years +
+ +Along the way I met new contributors who helped package Sniffnet as an AppImage, fixed various bugs, and added four new languages (bringing the total to 26 different translations by native speakers). + +Lately I've also had the pleasure of being contacted by recall.ai and CodeRabbit, two companies that started sponsoring Sniffnet with a recurring monthly donation. + +Last but not least, the project also has a new domain and custom email addresses, as announced not long ago. + +
+ +### What's next + +If during the past couple of years I found the energy and motivation to keep working on Sniffnet until late at night, +it was largely thanks to the substantial support I received from the European Commission's Next Generation Internet program.
+Unfortunately, nothing lasts forever, and their funding is now coming to an end. + +I'll keep maintaining Sniffnet after the funding period, albeit probably not at the pace of the past months: +in these cases _long-term consistency_ beats speed and intensity, keeps burnout at bay, and leaves room to enjoy life as much as development. + +The next major release will be version 1.6.0 and will finally make it possible to inspect network traffic from remote machines, firewalls, and routers.
+You can already have a look at sniffnet-agent, +a new companion program that will soon allow you to capture traffic from headless devices and send it to Sniffnet for inspection. + +
+ +
+ +Other exciting features are already in the pipeline, so make sure to +check the complete set of planned items in the usual Roadmap. + +Until the next blog post, I wish Sniffnet a happy birthday! + + diff --git a/apple-touch-icon.png b/apple-touch-icon.png index 3538610..4728f86 100644 Binary files a/apple-touch-icon.png and b/apple-touch-icon.png differ diff --git a/assets/img/coderabbit.png b/assets/img/coderabbit.png index 7e0a892..30e37bc 100644 Binary files a/assets/img/coderabbit.png and b/assets/img/coderabbit.png differ diff --git a/assets/img/connection_details.png b/assets/img/connection_details.png index 5b8b6bc..ddaeae1 100644 Binary files a/assets/img/connection_details.png and b/assets/img/connection_details.png differ diff --git a/assets/img/post/500k-downloads/cover.png b/assets/img/post/500k-downloads/cover.png index 658b0a8..19dec2e 100644 Binary files a/assets/img/post/500k-downloads/cover.png and b/assets/img/post/500k-downloads/cover.png differ diff --git a/assets/img/post/fourth-anniversary/chat.jpeg b/assets/img/post/fourth-anniversary/chat.jpeg new file mode 100644 index 0000000..2b86efc Binary files /dev/null and b/assets/img/post/fourth-anniversary/chat.jpeg differ diff --git a/assets/img/post/fourth-anniversary/cover.png b/assets/img/post/fourth-anniversary/cover.png new file mode 100644 index 0000000..a368b1b Binary files /dev/null and b/assets/img/post/fourth-anniversary/cover.png differ diff --git a/assets/img/post/fourth-anniversary/downloads.png b/assets/img/post/fourth-anniversary/downloads.png new file mode 100644 index 0000000..c4e2982 Binary files /dev/null and b/assets/img/post/fourth-anniversary/downloads.png differ diff --git a/assets/img/post/fourth-anniversary/gui_experiment.mp4 b/assets/img/post/fourth-anniversary/gui_experiment.mp4 new file mode 100644 index 0000000..bbb289c Binary files /dev/null and b/assets/img/post/fourth-anniversary/gui_experiment.mp4 differ diff --git a/assets/img/post/fourth-anniversary/gui_experiment_poster.jpg b/assets/img/post/fourth-anniversary/gui_experiment_poster.jpg new file mode 100644 index 0000000..e2b5d76 Binary files /dev/null and b/assets/img/post/fourth-anniversary/gui_experiment_poster.jpg differ diff --git a/assets/img/post/fourth-anniversary/initial-v1.0.png b/assets/img/post/fourth-anniversary/initial-v1.0.png new file mode 100644 index 0000000..5682384 Binary files /dev/null and b/assets/img/post/fourth-anniversary/initial-v1.0.png differ diff --git a/assets/img/post/fourth-anniversary/initial-v1.1.png b/assets/img/post/fourth-anniversary/initial-v1.1.png new file mode 100644 index 0000000..494c8a2 Binary files /dev/null and b/assets/img/post/fourth-anniversary/initial-v1.1.png differ diff --git a/assets/img/post/fourth-anniversary/initial-v1.2.png b/assets/img/post/fourth-anniversary/initial-v1.2.png new file mode 100644 index 0000000..97a5a18 Binary files /dev/null and b/assets/img/post/fourth-anniversary/initial-v1.2.png differ diff --git a/assets/img/post/fourth-anniversary/initial-v1.3.png b/assets/img/post/fourth-anniversary/initial-v1.3.png new file mode 100644 index 0000000..fa671c8 Binary files /dev/null and b/assets/img/post/fourth-anniversary/initial-v1.3.png differ diff --git a/assets/img/post/fourth-anniversary/initial-v1.4.png b/assets/img/post/fourth-anniversary/initial-v1.4.png new file mode 100644 index 0000000..b188607 Binary files /dev/null and b/assets/img/post/fourth-anniversary/initial-v1.4.png differ diff --git a/assets/img/post/fourth-anniversary/initial-v1.5.png b/assets/img/post/fourth-anniversary/initial-v1.5.png new file mode 100644 index 0000000..bb24045 Binary files /dev/null and b/assets/img/post/fourth-anniversary/initial-v1.5.png differ diff --git a/assets/img/post/fourth-anniversary/inspect-v1.2.png b/assets/img/post/fourth-anniversary/inspect-v1.2.png new file mode 100644 index 0000000..3d37804 Binary files /dev/null and b/assets/img/post/fourth-anniversary/inspect-v1.2.png differ diff --git a/assets/img/post/fourth-anniversary/inspect-v1.3.png b/assets/img/post/fourth-anniversary/inspect-v1.3.png new file mode 100644 index 0000000..544ca43 Binary files /dev/null and b/assets/img/post/fourth-anniversary/inspect-v1.3.png differ diff --git a/assets/img/post/fourth-anniversary/inspect-v1.4.png b/assets/img/post/fourth-anniversary/inspect-v1.4.png new file mode 100644 index 0000000..9e666cd Binary files /dev/null and b/assets/img/post/fourth-anniversary/inspect-v1.4.png differ diff --git a/assets/img/post/fourth-anniversary/inspect-v1.5.png b/assets/img/post/fourth-anniversary/inspect-v1.5.png new file mode 100644 index 0000000..ad52b1b Binary files /dev/null and b/assets/img/post/fourth-anniversary/inspect-v1.5.png differ diff --git a/assets/img/post/fourth-anniversary/notifications-v1.1.png b/assets/img/post/fourth-anniversary/notifications-v1.1.png new file mode 100644 index 0000000..362d82e Binary files /dev/null and b/assets/img/post/fourth-anniversary/notifications-v1.1.png differ diff --git a/assets/img/post/fourth-anniversary/notifications-v1.2.png b/assets/img/post/fourth-anniversary/notifications-v1.2.png new file mode 100644 index 0000000..fa179b9 Binary files /dev/null and b/assets/img/post/fourth-anniversary/notifications-v1.2.png differ diff --git a/assets/img/post/fourth-anniversary/notifications-v1.3.png b/assets/img/post/fourth-anniversary/notifications-v1.3.png new file mode 100644 index 0000000..ebe3ee2 Binary files /dev/null and b/assets/img/post/fourth-anniversary/notifications-v1.3.png differ diff --git a/assets/img/post/fourth-anniversary/notifications-v1.4.png b/assets/img/post/fourth-anniversary/notifications-v1.4.png new file mode 100644 index 0000000..ab1235b Binary files /dev/null and b/assets/img/post/fourth-anniversary/notifications-v1.4.png differ diff --git a/assets/img/post/fourth-anniversary/notifications-v1.5.png b/assets/img/post/fourth-anniversary/notifications-v1.5.png new file mode 100644 index 0000000..20cff8d Binary files /dev/null and b/assets/img/post/fourth-anniversary/notifications-v1.5.png differ diff --git a/assets/img/post/fourth-anniversary/overview-v1.0.png b/assets/img/post/fourth-anniversary/overview-v1.0.png new file mode 100644 index 0000000..eb20298 Binary files /dev/null and b/assets/img/post/fourth-anniversary/overview-v1.0.png differ diff --git a/assets/img/post/fourth-anniversary/overview-v1.1.png b/assets/img/post/fourth-anniversary/overview-v1.1.png new file mode 100644 index 0000000..980f62b Binary files /dev/null and b/assets/img/post/fourth-anniversary/overview-v1.1.png differ diff --git a/assets/img/post/fourth-anniversary/overview-v1.2.png b/assets/img/post/fourth-anniversary/overview-v1.2.png new file mode 100644 index 0000000..56dc75a Binary files /dev/null and b/assets/img/post/fourth-anniversary/overview-v1.2.png differ diff --git a/assets/img/post/fourth-anniversary/overview-v1.3.png b/assets/img/post/fourth-anniversary/overview-v1.3.png new file mode 100644 index 0000000..25bb095 Binary files /dev/null and b/assets/img/post/fourth-anniversary/overview-v1.3.png differ diff --git a/assets/img/post/fourth-anniversary/overview-v1.4.png b/assets/img/post/fourth-anniversary/overview-v1.4.png new file mode 100644 index 0000000..9dc334c Binary files /dev/null and b/assets/img/post/fourth-anniversary/overview-v1.4.png differ diff --git a/assets/img/post/fourth-anniversary/overview-v1.5.png b/assets/img/post/fourth-anniversary/overview-v1.5.png new file mode 100644 index 0000000..5d6189f Binary files /dev/null and b/assets/img/post/fourth-anniversary/overview-v1.5.png differ diff --git a/assets/img/post/fourth-anniversary/sniffnet-agent.png b/assets/img/post/fourth-anniversary/sniffnet-agent.png new file mode 100644 index 0000000..b5d3140 Binary files /dev/null and b/assets/img/post/fourth-anniversary/sniffnet-agent.png differ diff --git a/assets/img/post/fourth-anniversary/stars.png b/assets/img/post/fourth-anniversary/stars.png new file mode 100644 index 0000000..fb6a2e1 Binary files /dev/null and b/assets/img/post/fourth-anniversary/stars.png differ diff --git a/assets/img/post/new-domain/cover.png b/assets/img/post/new-domain/cover.png index 6935b77..19e4fa5 100644 Binary files a/assets/img/post/new-domain/cover.png and b/assets/img/post/new-domain/cover.png differ