1
0 Comments

Show IH: I learned Rust from scratch with zero CS background — and my first project got featured in This Week in Rust

I don't have a CS degree. I never took a data structures class. I can't explain Big O notation beyond "faster is better." Three weeks ago, I didn't know what a borrow checker was.

Last week, my first Rust project got listed in This Week in Rust #650.

This is the story of how that happened — not as a tutorial, but as proof that you don't need to be a "real programmer" to ship something useful.


The problem I had

I take a lot of screenshots. And I kept losing them. On Linux, there's no clean "screenshot → file" pipeline like macOS or Windows. You screenshot something, it goes to the clipboard, you copy some text, and the screenshot is gone forever.

I tried wrapping xclip in shell aliases. I tried cron jobs that dumped the clipboard every 30 seconds. Nothing stuck — they were too fragile and too platform-specific.

I wanted a single tool: one binary, every platform, zero config. Just silently save every clipboard image.

Why Rust (spoiler: I didn't know it)

I had zero Rust experience. What I had was a problem and the stubbornness to solve it properly.

I looked at what I needed:

  • Cross-platform clipboard access
  • Single binary distribution (no runtime, no dependencies)
  • Small binary size
  • Fast enough to run in the background without me noticing

Rust checked every box. The arboard crate handles clipboard access across Windows, Linux, and macOS. cargo build --release with LTO gives you a ~1.5MB static binary. You download it, you run it. Done.

So I opened The Rust Book on a Saturday morning and started reading.

What I actually built

imgclip — a tiny CLI (~1,100 lines of Rust) that moves images between your clipboard and files.

imgclip demo

Four modes:

  • Default: save clipboard image to a file
  • --watch: auto-save every new clipboard image in the background
  • --interactive: single-keypress save/discard for each image
  • --copy: send any image file back to clipboard

The one I use every day is imgclip --watch --install. It auto-starts on login and silently saves every screenshot to ~/Pictures/imgclip/. I don't think about screenshots anymore.

6 prebuilt binaries: x86_64 + aarch64 for Windows, Linux, and macOS. MIT-licensed.

What learning Rust actually felt like

Let's be honest — the first week was brutal.

The borrow checker rejected everything I wrote. I fought with lifetimes for two days before realizing I didn't actually need them for this project. I wrote clone() more times than I'd like to admit. My first attempt at the watch loop had a race condition that ate 100% CPU.

But here's the thing nobody tells you about Rust: the compiler teaches you. Every error message explained what I did wrong and often suggested the fix. It's like having a very strict but very patient teacher.

By week two, things clicked. The type system started feeling like a safety net instead of a cage. I could reason about my code because the compiler wouldn't let me write the subtle bugs I'd been writing in other languages.

What I'd tell my past self

  1. Ship early. My first version was a 200-line main.rs that could only save PNGs to the current directory. It was ugly. It worked. I used it for three days before adding features.

  2. Scope ruthlessly. imgclip does one thing: move images between clipboard and files. No GUI. No cloud sync. No image editing. Every feature request I've gotten, I've asked: "Does this help save a clipboard image?" Most don't make the cut.

  3. The community is incredible. I submitted my project to This Week in Rust thinking nobody would notice. Not only did they include it, but I got genuine, helpful feedback from people who actually tried the tool. The Rust community genuinely wants newcomers to succeed.

  4. "Real programmer" is a myth. I'm not a systems programmer. I don't have a CS background. I had a problem, I found the right tool, I read the docs, and I shipped. That's it. There's no secret.

Current status

  • v0.3.0 released, MIT-licensed
  • ~1,100 lines of Rust, 9 source files
  • 6 prebuilt binaries on GitHub Releases
  • Featured in This Week in Rust #650
  • Looking into Homebrew/scoop/AUR packaging

If you're on the fence about learning Rust — or about building your first tool — just start. Read the book, write bad code, let the compiler teach you, and ship something. The bar for "useful" is lower than you think.

GitHub | Releases

on May 7, 2026