gitwtfhub

wtf is jmap-screener?

kwatson/jmap-screener — explained in plain English

Analysis updated 2026-05-18

5GoAudience · ops devopsComplexity · 3/5Setup · moderate

TL;DR

A background daemon that watches which folder you move an email into and automatically learns a filter rule so future mail from that sender goes to the same folder.

Mindmap

Mindmap is still cooking. Refresh in a few.

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Why would anyone build with this?

REASON 1

Automatically route future mail from a sender to the folder you first filed their message into.

REASON 2

Rescue emails that a spam filter wrongly marked as junk by moving one out of Junk to teach the daemon the correct sender.

REASON 3

Block a sender entirely by moving one of their messages from Screener to Trash.

REASON 4

Run a self-hosted mail sorting daemon alongside a Stalwart JMAP mail server with no manual filter writing.

What's in the stack?

GoJMAPStalwartSieveSQLite

How it stacks up

kwatson/jmap-screeneralsultaneo/2cupeternal-flame-ad/mh-z19
Stars555
LanguageGoGoGo
Last pushed2019-03-31
MaintenanceDormant
Setup difficultymoderateeasymoderate
Complexity3/53/52/5
Audienceops devopsgeneraldeveloper

Figures from each repo's GitHub metadata at analysis time.

How do you spin it up?

Difficulty · moderate Time to first run · 30min

Requires a self-hosted Stalwart JMAP mail server with an API token, plus a Screener mailbox created in your email client.

The README does not state a license.

Wtf does this do

JMAP Screener is a small background program that watches your email and learns from how you file it, so you never have to write mail filtering rules by hand. Unknown senders land in a folder called Screener. When you move one of those messages into another folder, such as Family or Work, the program remembers that sender and automatically sends all their future mail straight to that same folder. It works with mail servers that speak the JMAP protocol, built specifically around the open source Stalwart mail server, and it manages this behavior by generating and updating a Sieve filter script on your account. It can react quickly through JMAP's push notifications when your server supports them, and otherwise checks for changes every five minutes as a backup. Beyond simple filing, it also understands mistakes made by spam filters. If a message from a real sender is wrongly marked as junk, moving it out of the Junk folder teaches the program to pull that sender's future mail out of Junk automatically going forward. There is also an optional rescue mode that periodically scans the Junk folder itself for known senders and moves their messages to the correct place. Moving a message back into Screener, or moving one to Trash, removes any learned rule for that sender. Setup involves creating an API token in your mail server's admin panel, providing the server address and token through a config file or environment variables, and creating a mailbox named Screener for unknown senders to land in. It can then run as a Docker container or as a standalone program built from the Go source code, and it exposes a simple health check endpoint you can use to confirm it is running correctly.

Yoink these prompts

Prompt 1
Help me create a Stalwart API token with the right permissions and configure jmap-screener to use it.
Prompt 2
Walk me through setting up the Screener mailbox and running jmap-screener with Docker.
Prompt 3
Show me how the rescue mode works and when I should enable it for my Junk folder.
Prompt 4
Explain what happens to a learned sender route when I move a message back into Screener.

Frequently asked questions

wtf is jmap-screener?

A background daemon that watches which folder you move an email into and automatically learns a filter rule so future mail from that sender goes to the same folder.

What language is jmap-screener written in?

Mainly Go. The stack also includes Go, JMAP, Stalwart.

What license does jmap-screener use?

The README does not state a license.

How hard is jmap-screener to set up?

Setup difficulty is rated moderate, with roughly 30min to a first successful run.

Who is jmap-screener for?

Mainly ops devops.

View the repo → Decode another repo

This repo across BitVibe Labs

Don't trust strangers blindly. Verify against the repo.