Tracking kernel development with korgalore
TLDR: use korgalore to bypass mailing list delivery problems
If you're a Gmail or Outlook user and you're subscribed to high-volume mailing lists, you're probably routinely missing mail. Korgalore is a tool that monitors mailing lists via lore.kernel.org and can import mail directly into your inbox so you don't miss any of it. You can also couple korgalore with lei for powerful filtering features that can reduce the firehose to what you'd actually find useful.
The problem with the “big 3”
If you're a user of Gmail or Outlook trying to participate in Linux kernel development, you're probably aware that it's... not great. Truth is, it's nearly impossible these days to run a technical mailing list and expect that it will be successfully delivered to the “big 3” consumer-grade mailbox providers — Gmail, Outlook, or Yahoo.
There are many reasons for it, and the primary one is that technical mail looks nothing like 99.99% of the mail traffic that their filters are trained on, and therefore when a technical message arrives, especially if it includes a patch, the automation thinks it's likely spam or something potentially unsafe. If you're not checking your junk folder daily, you're probably missing a lot of legitimate email.
Worst of all, if you're trying to subscribe to a high-volume mailing list using gmail or outlook, you can forget it — you will hit delivery quotas almost instantly. Our outgoing mail nodes routinely hit queues of 100,000+ messages, all because of “temporary delivery quotas” trying to deliver mail to gmail subscribers.
Korgalore is a tool that can help. It fetches messages directly from public-inbox archives (like lore.kernel.org) and delivers them directly to your mailbox, bypassing all the problematic mail routing that causes messages to go missing.
How korgalore helps
We cannot fix email delivery, but we can sidestep it entirely. Public-inbox archives like lore.kernel.org store all mailing list traffic in git repositories. In its simplest configuration, korgalore can shallow-clone these repositories directly and upload any new messages straight to your mailbox using the provider's API.
This approach has several advantages:
- Nothing gets lost — you get every message that was posted to the list
- You control the labels/folders — organize messages however you want
- Works with your existing workflow — messages appear in your regular inbox
Korgalore currently supports these delivery targets:
- Gmail (via API with OAuth2)
- Microsoft 365 (via IMAP with OAuth2)
- Generic IMAP servers
- JMAP servers (Fastmail, etc.)
- Local maildir
- Pipe to external command (e.g. so you can feed it to fetchmail)
Installing korgalore
The easiest way to install korgalore is via pipx:
$ pipx install korgalore
[...]
$ kgl --version
kgl, version 0.4
For the GUI application, you'll also need GTK and AppIndicator libraries. On Fedora:
$ sudo dnf install python3-gobject gtk3 libappindicator-gtk3
$ pipx install 'korgalore[gui]'
Getting started with Gmail
This is the hardest part of the process, because Google makes it unreasonably hard to get API access to your own inbox. It's like they don't want you to even try it.
Getting API access credentials
You will need to start by getting OAUTH2 client credentials.
If you are a kernel maintainer with an active kernel.org account, you can run the following command to get what you'll need directly from us:
$ ssh git@gitolite.kernel.org get-kgl-creds
If you're not a kernel maintainer, then I'm afraid you're going to have to jump through a bajillion hoops. The process is described on this page:
Authenticating with Google
Once you have the json file with your credentials, run kgl edit-config. An editor will open with the following content:
### Targets ###
[targets.personal]
type = 'gmail'
credentials = '~/.config/korgalore/credentials.json'
# token = '~/.config/korgalore/token.json'
### Deliveries ###
# [deliveries.lkml]
# feed = 'https://lore.kernel.org/lkml'
# target = 'personal'
# labels = ['INBOX', 'UNREAD']
Just save it for now without any edits, but make a note where the credentials path is. Save the json file you got from Google (or from us) to that location: ~/.config/korgalore/credentials.json.
Next, authenticate with your Gmail account:
$ kgl auth personal
This opens a browser window for OAuth2 authentication, so it needs to run on your workstation, because it will need to talk to localhost to complete the authentication.
Once you have obtained the token, it is stored locally and refreshed automatically unless revalidation is required (once a week for “testing” applications).
Configure a delivery
Let's say you want to subscribe to the netdev list.
Edit the configuration file again:
$ kgl edit-config
Add a delivery that maps the netdev feed to your Gmail account:
[deliveries.netdev]
feed = 'https://lore.kernel.org/netdev'
target = 'personal'
labels = ['INBOX', 'UNREAD']
Run kgl pull once after this to initialize the subscription. No mail will be delivered on the first run, so it's just like subscribing to a real list.
$ kgl pull
Updating feeds [####################################] 1/1
Initialized new feed: netdev
Pull complete with no updates.
You can add any list hosted on lore.kernel.org (or on any other public-inbox server) as a separate delivery.
Periodic pulls
Next time you run kgl pull you will see something like this, assuming there is new mail to be delivered:
$ kgl pull
Updating feeds [####################################] 1/1
Delivering to personal [####################################] 2/2
Pull complete with updates:
netdev: 2
If all went well, messages will appear in your Gmail inbox.
Targets other than gmail
Korgalore will happily deliver to the following targets:
- Gmail
- Outlook 365
- Generic IMAP
- JMAP (Fastmail)
- Maildir
- Pipe
Refer to the following documentation page on configuration details:
Yanking a random thread
See a thread on lore that you just really want to answer? You can yank it into your inbox by just pasting the URL to the message you want (or use --thread for the whole thread):
$ kgl yank --thread https://lore.kernel.org/netdev/CAFfO_h4cX0+L=ieA_JF7QBvH-dDYsHnTUuN4gApguqxVpWyy2g@mail.gmail.com
Found 5 messages in thread
Uploading thread [####################################] 5/5
Successfully uploaded 5 messages from thread
Doing a lot more with lei
The lei tool is the client-side utility for querying and interacting with public-inbox servers. It should be installable on most distributions these days. For Fedora:
$ sudo dnf install lei
This will pull in a large number of Perl dependencies, but they are all fairly tiny.
Yank and track a thread
Sometimes you don't want to follow an entire list, just a specific hot topic discussion. The track command lets you yank a thread and then receive any follow-ups to it. Korgalore lets you do that easily:
$ kgl track add https://lore.kernel.org/lkml/20260116.feegh2ohQuae@digikod.net/
Creating lei search for thread: 20260116.feegh2ohQuae@digikod.net
Populating lei search repository...
Started tracking thread track-bcd0dc0604fd: Re: [GIT PULL] Landlock fix for v6.19-rc6
Now tracking thread track-bcd0dc0604fd: Re: [GIT PULL] Landlock fix for v6.19-rc6
Target: personal, Labels: INBOX, UNREAD
Delivering 5 messages to target...
Delivered 5 messages.
This creates a persistent search that monitors lore.kernel.org for replies to that thread. New messages are automatically delivered during regular pull operations.
Tired of tracking a thread? Find it with kgl track list and then stop following it:
$ kgl track stop track-bcd0dc0604fd
Threads automatically expire after 30 days of inactivity, but can be resumed if the discussion picks up again.
Tracking messages for a specific subsystem
If you're a maintainer, you can track your entire subsystem using the track-subsystem command. This parses the kernel's MAINTAINERS file and creates queries for all relevant mailing list traffic:
$ kgl track-subsystem -m MAINTAINERS 'SELINUX SECURITY MODULE'
Found subsystem: SELINUX SECURITY MODULE
Creating mailinglist query: l:selinux.vger.kernel.org AND d:7.days.ago..
Creating patches query: (dfn:... OR dfn:... [...]) AND d:7.days.ago..
Created 2 lei queries for subsystem "SELINUX SECURITY MODULE"
Configuration written to: /home/user/.config/korgalore/conf.d/selinux_security_module.toml
Target: personal, Labels: INBOX, UNREAD
This effectively subscribes you to the selinux mailing list, plus creates a query that will match the patches touching that subsystem, using the patterns defined in MAINTAINERS.
The next time you run kgl pull, it will upload the last 7 days of messages matching both queries:
$ kgl pull
Updating feeds [####################################] 3/3
Delivering to personal [####################################] 37/37
Pull complete with updates:
selinux_security_module-mailinglist: 33
selinux_security_module-patches: 4
Arbitrary lei queries
Korgalore will happily follow arbitrary lei queries that you have defined. For example, if you want to receive a copy of all mail sent by a co-maintainer, you can run the following:
$ lei q --only https://lore.kernel.org/all \
-o v2:/home/user/.lei/comaintainer-spying \
f:torvalds@linux-foundation.org AND d:7.days.ago..
Then you can add the following section to korgalore.toml:
[deliveries.comaintainer-spying]
feed = 'lei:/home/user/.lei/comaintainer-spying'
target = 'personal'
labels = ['INBOX', 'UNREAD']
Filtering unwanted senders
Korgalore doesn't come with complicated filtering — lei is much more suited for that purpose. However, if there is someone whose mail you absolutely never want to see, you can add them to the bozofilter.
$ kgl bozofilter --add bozo@example.com --reason "off-topic noise"
Blocked messages are silently skipped during delivery.
Using the GUI taskbar app for background syncing
For day-to-day use, the GUI application runs in your system tray and syncs automatically:
$ kgl gui
The GUI provides:
- Automatic background syncing at configurable intervals
- Manual “Sync Now” when you want immediate updates
- “Yank” dialog to fetch specific messages by URL or Message-ID
- Network awareness — pauses sync when offline and resumes when connected
- Re-authentication prompts when OAuth tokens expire
- Quick editing of the config or the bozofilter
Here are a couple of videos demonstrating the gui app in action:
Documentation and source
Full documentation is available at:
https://korgalore.docs.kernel.org/
Source repository:
https://git.kernel.org/pub/scm/utils/korgalore/korgalore.git
If you run into issues or have feature requests, please send them to tools@kernel.org.