Skip to content

Finding the scanner, and taking over its settings

A teacher should press one button and get a scan. Behind that button are a search for the scanner, a list of settings nobody should have to touch, and a Windows firewall surprise.

6 min read

A document scanner with a stack of blank paper in its feeder, on a wooden desk with a laptop beside it, in golden light.

6 min read

On a fresh Windows computer, the first time a teacher opened our scanner list, Windows Firewall put up a security prompt. We saw it in a round of virtual-machine testing. A non-technical user should never meet that screen.

What is a firewall?

A firewall is a guard built into the computer or the network. It watches what tries to come in or go out and asks, or blocks, when something looks unfamiliar. That is why a first search of the network made Windows ask the teacher a question.

For the teacher, the scanning part of Tziyun B’Rega is one idea: put the papers in the feeder and press a button. For us it was a long story with three parts: finding the scanner, talking to it, and deciding who chooses its settings. The answer to the last one was the same each time. We choose. A non-technical person should never be asked to configure their scanner.

Key points

  • For the teacher it is one button. Behind it: finding the scanner, talking to it, and deciding who chooses its settings. We choose.
  • Opening the scanner list set off a Windows Firewall prompt. Since 21 October 2026 it only looks at the scanners the computer already knows, and searches the network only when the teacher asks.
  • On a busy computer the scanner list (the screen where the teacher picks a scanner) once reported that it found no scanners although the scanner was there. Now it keeps searching.
  • We list no brands or models. The program is built to work with scanners that have an automatic paper feeder.

First, we borrowed a tool

In the Electron (opens in a new tab) days, scanning was done by NAPS2 (opens in a new tab), a separate open-source scanning program that our program ran in the background. We used its Windows version. On 24 March 2026 we packaged a portable copy of it with the app.

It worked, and it had the usual drawbacks. We had it working only on Windows; it had to be installed and managed as a separate program, and our program could only talk to it through text passed back and forth. When we moved to Go (opens in a new tab) in May 2026 we dropped it. The decision record of 15 May says NAPS2 was eliminated for exactly those reasons.

Then, our own scanner layer

We replaced it with a Go library of our own, built for this project. Its first version is dated 12 May 2026. It talks to scanners the way the operating system does:

  • On Windows, through the system’s scanning service (WIA).
  • Over the network, by asking the local network who is there and speaking the standard language network scanners use (a protocol called eSCL, also known as AirScan), on any system. The network search was reworked on 16 May.
  • For USB scanners on Linux and on a Mac, the connections are planned but still placeholders.

Each of these has its own idea of what a scanner is, how to list one and how to read a page from it. The library hides that. It reports what is happening as a list of status messages that our screen turns into words: searching, found one, receiving a page, done, cancelled, failed.

Finding is a story on its own

Looking for a scanner on a network sounds simple, and it is where most of the surprises were.

Windows asked a question we did not expect. Opening the scanner list ran a full network search, and that search opens a door on the computer that listens for replies from the network. That is what set off the firewall prompt. On 21 October 2026 we changed the rule: opening the list only looks at the scanners the computer’s own drivers know about. The network is searched only if the teacher asks for a network search, and never if a scanner address has been configured.

What is a driver?

A driver is a small program that teaches the computer how to talk to one device, such as a printer or a scanner. It is like an interpreter between the computer and the machine, and each model usually comes with its own.

Some networks do not allow the search at all. The network search relies on a kind of call to everyone on the network (a broadcast) that some networks block. So we added a way to name a scanner by its address (27 August), and on 18 October 2026 the list began to show scanners configured by address next to the discovered ones. The same route is what let our test machine use a pretend scanner.

A scanner might simply be slow to answer. On 23 October 2026 our weak-computer test showed a failure, and we wrote it up the next day. The list searched once. When the busy computer missed the scanner’s one short answer window, it reported that it found no scanners and stopped. The scanner was there all along. Now the list keeps searching by itself while it shows nothing and no scan is running, waiting a little longer between attempts, and a scanner that was configured but did not answer gets a longer wait next time. The teacher can also press “search again” at any time.

Taking over the settings

A scanner offers many choices: which paper source, what page size, colour or grey, the quality, the file format. Each one is a way for a person to get it wrong, and the wrong choice tends to show up later as a confusing result rather than as an error at the time.

So the program decides. It asks for the document feeder, the page size we print on and the other settings it needs, and the teacher is not shown any of this. Some of what those values are is part of how the product works, and we would rather not publish it. The principle is simple: whatever the scanner would ask the user, the program already knows the answer.

Blank sheets of paper going into the feeder of a document scanner, with one large round button glowing softly beside it.

Illustration: papers in the feeder, one button to press.

Scanners do not all accept the same file format. On 23 September 2026 we found one failure that is hard to see from the outside. When a network scanner is asked for a format it does not support, it refuses the entire job with a generic “conflict” answer, which looks exactly like “the scanner is busy”. Now the program asks the scanner what it supports first and picks something it accepts. On Windows it also asks for a more direct transfer, but only when the scanner says it can do it.

What we have not claimed

We do not list scanner brands or models. Our notes name no model that we can show was tested on a real device, and a list of brands that look supported when they are not would be worse than no list. What we can say is that the program is built to work with scanners that have an automatic paper feeder.

What we learned

The easy case, one scanner plugged in by USB, is a small part of the job. The real work is every other situation: a network that blocks the search, a computer that is busy, a firewall that asks questions. Taking the settings away from the user was about making sure the person at the desk could not end up in a situation they have no way of understanding.

Read next

Building Windows software from a Mac: a borrowed computer, a virtual machine and a photo of an errorSchools run Windows. We work on a Mac and Ubuntu. This is how Tziyun B'Rega learned to build and test for Windows, and the photo that taught us the most.A mouse pointer that looked wrong on WindowsThe same program can look different on every operating system. One day the mouse pointer changed on Windows, so we chose our own pointer and learned to test the small things.

Got something to build? Let's talk.

No sales pitch. Tell us what your business needs and we'll tell you straight how we'd tackle it, or whether you need it at all.

9 stories about Tziyun B'Rega

All 9 stories

"Why can't you just scan it?" How Tziyun B'Rega beganIt started with one email asking a simple question. The studio's account of the first search, a lottery-ticket comparison, a childhood memory of bubbles, and why we built our own reader.How we chose the tools: Tauri, Electron, then Wails and GoWe started with Rust and Tauri, went back to the tools we knew, and ended up with Go and Wails, which we never planned. The lesson: pick tools you can deliver with.Why we left Electron: the exam that moved on the pageTziyun B'Rega printed exams through a hidden Chrome window, and later pages drifted. We tried LaTeX twice, then found Folio, Go and Wails. The project history shows the path.Printing without the print dialog: learning from how Chrome does itThe first idea was to hand printing to the operating system and let people sort out the options. That was a mistake. Here is how we cut the choices down to three, and how reading Chromium's source helped.Finding the scanner, and taking over its settingsYou are reading this story. A teacher should press one button and get a scan. Behind that button are a search for the scanner, a list of settings nobody should have to touch, and a Windows firewall surprise.Building Windows software from a Mac: a borrowed computer, a virtual machine and a photo of an errorSchools run Windows. We work on a Mac and Ubuntu. This is how Tziyun B'Rega learned to build and test for Windows, and the photo that taught us the most.A mouse pointer that looked wrong on WindowsThe same program can look different on every operating system. One day the mouse pointer changed on Windows, so we chose our own pointer and learned to test the small things.Watching a school computer from far away: what the logs taught us about small computersTziyun B'Rega sends its logs home so we can see it work where we cannot visit. A small computer in a remote town showed us that a computer's size, and in the end its processor, decides how well the program runs.Offline first, but is it really always offline?Tziyun B'Rega works without an internet connection, but a few features need one. Telling the two cases apart turned out to be harder than we expected.
Accessibility menu

Keyboard shortcuts

Open accessibility menuAlt+A
Accessibility statement

These settings are saved on your device only and are used to adjust the display. They do not change the site content and send no information to any server.