Gnus
Gnus is a message reader which is part of GNU Emacs.[1] It supports reading and composing both e-mail and news and can also act as an RSS reader, web processor, and directory synchronizer.[2] Gnus was originally written by Masanobu Umeda in 1990 and rewritten by Lars Magne Ingebrigtsen in 1994–1995.[3] It is highly customizable and integrated with Emacs, allowing users to manage various message sources within the editor's environment.[1]Introduction
Definition and Purpose
Gnus is a flexible and extensible newsreader and email client integrated into GNU Emacs, designed primarily for reading and posting Usenet news while also supporting a wide range of other messaging formats.[1] It provides users with a unified interface for accessing and interacting with various types of content within the Emacs environment, emphasizing configurability through Emacs Lisp.[4] At its core, Gnus treats all incoming messages—whether news articles, emails, RSS items, or other feeds—uniformly as "articles," which are organized hierarchically into "groups" for efficient navigation and management.[1] This abstraction allows seamless handling of diverse content types, enabling users to read, compose, reply to, and organize messages from sources such as Usenet newsgroups, mailing lists, and web feeds without switching between separate applications.[1] Originally developed as an Emacs extension for USENET news reading, Gnus was first written by Masanobu Umeda in 1988.[3] As part of the GNU Project, it is distributed under the GNU General Public License version 3.0 or later, ensuring its source code remains freely available for modification and redistribution.Relation to Emacs
Gnus has been distributed as a built-in package within GNU Emacs since version 19.30, released on November 24, 1995.[5][6] It is included in the standard Emacs distribution and maintained through the project's official repositories.[7] Gnus is deeply integrated with the Emacs environment, relying entirely on Emacs Lisp for its extensibility and customization options. All user interactions with Gnus occur within dedicated Emacs buffers, utilizing major modes such as Group, Summary, and Article for navigation and operations, alongside standard Emacs keybindings for efficiency.[8] Originally developed as a module for Emacs, Gnus has evolved into a core component of the GNU Emacs ecosystem. Its development transitioned from an independent repository to integration within the main Emacs Git tree around 2016, aligning its maintenance with the broader Emacs project. In line with this focus on GNU Emacs, support for XEmacs was discontinued in recent versions, ensuring compatibility and development efforts are directed solely toward the GNU variant.[9] Gnus remains available and actively updated in Emacs 30.x, released starting February 2025, with enhancements such as the introduction of the nnfeed backend to facilitate web feed handling through abstract backend creation.[5][10]Features
Message Handling Capabilities
Gnus employs a uniform article model to process incoming messages, parsing them into standardized components including headers, bodies, and MIME parts irrespective of the originating backend or protocol. This abstraction ensures consistent handling of both news and mail articles, where headers may be augmented with Gnus-specific fields likeLines or X-Gnus-Group during ingestion, while the core structure remains intact for subsequent operations.[11]
Mail splitting in Gnus automates the organization of incoming messages into groups or folders using configurable rules that evaluate headers such as To, From, and Subject. The basic mechanism relies on nnmail-split-methods, a list of pairs where each rule matches a regular expression against header content to direct the article to a specified group; for instance, a rule like ("mail.junk" "^From:.*[email protected]") routes messages from a known spammer to a junk group. More advanced fancy splitting via nnmail-split-fancy supports complex structures, including logical operators like (| ...) for sequential matching or (& ...) for combined conditions, enabling dynamic group creation such as sorting Debian list mail to mail.debian.\\1 based on extracted substrings from addresses. Unmatched messages default to a "bogus" group, with options for crossposting if multiple rules apply.[11][12]
The article scoring system allows users to prioritize or filter messages through adjustable numerical values applied via rules in score files. Each article begins with a default score of 0, which can be modified by user-defined entries—such as adding +1 for subjects containing specific keywords or subtracting 10 for headers from known spammers—to influence visibility and sorting in the summary view. Scores are categorized as permanent for enduring adjustments or temporary for short-term changes that expire after a configurable period, like one week, to manage file size; articles falling below a threshold like gnus-summary-mark-below are treated as read and deprioritized.[13]
Expiration and archiving mechanisms in Gnus facilitate automatic cleanup by deleting or relocating old articles based on age and marks. An article qualifies for expiration if explicitly marked expirable (via the E command) and exceeds the default seven-day wait period set by nnmail-expiry-wait; read articles in configured groups can be auto-marked expirable, while total-expire parameters process all read items regardless of marks. Instead of deletion, articles may be archived to a target group like nnml:expired by customizing nnmail-expiry-target, preserving content while freeing primary storage.[14]
Drafts and queueing support interrupted or deferred message composition by storing unfinished articles in the dedicated "queue" draft group. When composing mail or news, users can save drafts for later editing and resumption, with outgoing messages automatically queued if Gnus is in offline mode; mail queuing is toggled via gnus-agent-queue-mail, and sends from the queue prompt for confirmation to avoid unintended dispatch while unplugged. This ensures reliable handling of delayed transmissions without loss of work.[15]
Threading organizes conversations by linking articles through follow-up detection, using References and In-Reply-To headers to construct hierarchical structures that group related messages. Gnus builds threads recursively from parent articles, optionally ignoring subject variations via gnus-thread-operation-ignore-subject to connect follow-ups across slight mismatches, or employing fuzzy matching for more precise subject-based clustering. This enables coherent navigation of discussions, distinguishing chains from isolated posts.[16]
Supported Backends and Protocols
Gnus employs a modular architecture with specialized backends to interface with diverse sources for retrieving and managing messages, each tailored to specific protocols or storage formats. These backends handle the low-level communication and data access, enabling Gnus to treat news, mail, feeds, and archives uniformly as groups. For news retrieval, the primary backend is nntp, which connects to Usenet servers using the Network News Transfer Protocol (NNTP) to fetch articles, headers, and group information. This backend supports features like NOV (Netnews Overview) headers for efficient header scanning when available on the server. Mail backends provide access to email sources via standard protocols and local formats. The nnimap backend interfaces with remote servers over the Internet Message Access Protocol (IMAP), allowing direct access to mailboxes without mandatory local storage, and supports server-side operations like searching and flagging.[17] For POP3, Gnus does not have a built-in backend; instead, external tools such as fetchmail or getmail are commonly used to download messages from POP3 servers to a local mail spool, which is then accessed via local backends. Local mail storage options include nnml, which organizes messages in individual files within MH-style directories for fast access via overview files; nnmaildir, adhering to the Maildir format with separate files per message for robustness against corruption; and nnmh, a basic MH-compatible backend without built-in indexing.[18] Additional formats are supported by nnfolder for group-specific mbox files and legacy options like nnmbox for single-spool mbox and nnbabyl for the historical Babyl format.[18] Feed integration allows Gnus to subscribe to web-based content streams. The nnrss backend retrieves RSS and Atom feeds, storing them as local groups with periodic updates from specified URLs. Introduced in Emacs 30.1, the nnfeed backend extends this capability by providing a framework for developers to implement custom web feed parsers, enhancing extensibility for emerging feed standards.[10] Archival and directory-based access is facilitated by backends like nndir, which treats filesystem directories as virtual groups for browsing files as articles, and nnfolder, which parses mbox-format files into structured groups.[19] For outgoing messages, Gnus relies on the smtpmail library to transmit via the Simple Mail Transfer Protocol (SMTP), configurable for multiple servers and authentication methods.[20] It also integrates with the system's sendmail interface as a fallback for local delivery.[8] Support for foreign servers expands connectivity, through NNTP gateways that archive mailing lists as read-only newsgroups accessible via nntp; for example, the now-defunct Gmane service formerly provided access to many lists at news.gmane.io, but users should verify current availability of similar services.| Backend | Protocol/Format | Primary Use |
|---|---|---|
| nntp | NNTP | Usenet news retrieval |
| nnimap | IMAP | Remote email access |
| nnml | MH directories | Local indexed mail |
| nnmaildir | Maildir | Local file-per-message mail |
| nnfolder | mbox per group | Local mbox handling |
| nnrss | RSS/Atom | Web feeds |
| nnfeed | Custom web feeds | Extensible feed parsing (Emacs 30.1+) |
| nndir | Filesystem directories | Archival browsing |
| smtpmail | SMTP | Message sending |
Customization and User Interface
Gnus utilizes a three-buffer interface to facilitate navigation and interaction with news and mail sources. The Group buffer serves as the primary entry point, listing subscribed groups along with metrics such as unread article counts, and operates undergnus-group-mode for managing subscriptions and server configurations.[21] The Summary buffer, activated upon selecting a group, displays a list of articles with threading and marking options, running in gnus-summary-mode to enable selection, sorting, and actions like replying or forwarding.[22] The Article buffer provides a dedicated viewing area for the selected article's content, shared across all summary buffers unless customized otherwise, supporting scrolling and MIME part handling.[23]
Customization of these buffers occurs through Emacs hooks and keybindings, allowing users to tailor behavior to their workflow. For instance, gnus-group-mode-hook runs upon entering the Group buffer, enabling additions like topic mode for hierarchical organization, while gnus-summary-mode-hook executes when generating a summary, permitting modifications to display formats or automatic actions.[24] Keybindings in these modes, such as RET for reading articles or r for replying, can be remapped via mode maps, and toolbars are adjustable through Emacs customization interfaces for visual efficiency.[22]
Display options in Gnus leverage Emacs faces for thematic customization, applying colors, fonts, and styles to elements like group names, article subjects, and tick marks across buffers to improve readability and integrate with broader Emacs themes. For multimedia content, Gnus employs the Emacs MIME library via mm-decode to render attachments and encoded parts, such as inline images or text with specific charsets, though it lacks built-in support for composing HTML messages, relying instead on plain text with optional attachments.[25]
Organization of content extends to virtual groups and topic hierarchies, enhancing the user interface for handling diverse sources. Virtual groups aggregate articles from multiple backends or subsets of groups into a unified summary view, streamlining access without altering underlying data.[26] Topic hierarchies, enabled via gnus-topic-mode, structure the Group buffer as a foldable tree, grouping related newsgroups or mail folders under custom labels like "Emacs" or "Work," with commands to expand, collapse, or mark entire branches.[27]
Integration with external Emacs tools occurs through dedicated hooks, fostering extensibility in the interface. For example, the BBDB address book integrates via gnus-startup-hook with bbdb-insinuate-gnus, automatically displaying contact details in article headers and enabling quick additions from messages.[28] Similar hooks allow connections to Emacs' calendar for event reminders tied to message dates, though such setups require user-defined functions.
Accessibility features emphasize Gnus's reliance on Emacs' keyboard-centric navigation, supporting full operation without a mouse through arrow keys, C-n/C-p for movement, and mode-specific shortcuts.[29] Voice support is provided by Emacspeak, an audio desktop that speech-enables Gnus buffers, reading group lists, article summaries, and content aloud for visually impaired users, with auditory icons for navigation feedback.[30][31]
History
Origins and Early Development
Gnus originated in 1987 when Masanobu Umeda, working at Fujitsu Laboratories, developed it as a simple netnews reader integrated into GNU Emacs.[32] Designed primarily for accessing Usenet newsgroups, the initial implementation focused on reading and posting messages through the Network News Transfer Protocol (NNTP).[33] Early versions of Gnus, known simply as GNUS and predating version 5.0, were implemented as an Emacs Lisp package and distributed separately from the Emacs core distribution.[3] These releases, spanning from 1988 to 1992, relied on community input shared via Emacs mailing lists during the late 1980s and early 1990s.[3] The early iterations had notable limitations, including only basic support for message threading, a complete absence of email handling capabilities, and compatibility restricted to Emacs 18.x.[32] Development of the original GNUS ceased around 1992, paving the way for a major rewrite in 1994.[3]Major Versions and Rewrites
In 1994, Lars Magne Ingebrigtsen undertook a complete rewrite of Gnus, initially dubbing it "(ding) Gnus" to signify "ding is not Gnus," which introduced an extensible architecture with pluggable backends for handling diverse message sources.[34] This modular design allowed backends to be swapped or extended without altering the core, enabling support for various protocols beyond traditional NNTP. Gnus 5.0, released in November 1995 after 15 development releases, formalized this modular approach as the foundation of the 5.x series, emphasizing pluggable backends for enhanced flexibility in news and mail integration.[6] The version numbering adopted a 5.x scheme to reflect its evolutionary status, with sub-versions tracking incremental updates. Subsequent releases built on this framework. Red Gnus, version 5.4, launched in January 1997 following 84 prereleases, incorporated color support in the summary buffer for better visual distinction of articles and refined threading algorithms to improve conversation visualization.[6] Version 5.10, known as Oort Gnus and released in May 2003 after 24 iterations, facilitated deeper integration with Emacs 21 by aligning with its enhanced Lisp environment and display capabilities.[6] No Gnus, encompassing versions 5.12 and 5.13, debuted in development in January 2004 and culminated in a stable release with Emacs 23.1 in July 2009.[6] It advanced scoring mechanisms with adaptive files that evolve based on user interactions, introduced adaptive expiration to automatically prune old articles according to usage patterns, and provided comprehensive UTF-8 support for international character handling. Ma Gnus, version 5.14, initiated in January 2012 and released in 2013, marked the final standalone distribution before full synchronization with Emacs releases.[6][35] Key enhancements included refined MIME processing for more reliable attachment decoding and expanded IMAP support with improved folder synchronization and query efficiency.[35]Integration with Modern Emacs
Since the release of Emacs 24.1 in 2012, Gnus development has shifted to the Emacs Git repository, with updates integrated directly into Emacs releases rather than as standalone versions. Changes to Gnus are documented in the Emacs NEWS file, reflecting its evolution as a core component of the editor. This integration has allowed Gnus to benefit from broader Emacs improvements in areas like Lisp performance and security, while focusing on enhancements to message handling and protocol support.[36] In Emacs versions 24 through 27, Gnus saw incremental updates to RSS handling and preliminary support for modern environments. For instance, Emacs 25.1 introduced options likemm-html-inhibit-images to control image fetching in HTML-rendered messages, improving safety and performance when displaying RSS or MIME content. Emacs 27.1 added navigation commands such as gnus-summary-prev-unseen-article and support for splitting mail based on mailing list headers, alongside options for nnimap-expunge to manage deletions more flexibly. These changes provided hints toward better mobile compatibility, aligning with Emacs's growing portability features, though full mobile support materialized later.[37][38]
Emacs 28.1, released in 2022, enhanced MIME security with support for OpenPGP headers in Message mode, configurable via message-openpgp-header, to better handle encrypted and signed attachments. It also introduced the gnus-topic-display-predicate option for the tree-widget-based group display, allowing users to filter topics more precisely, and the nnselect backend for creating dynamic groups from search results across servers.[39]
Emacs 29.1 in 2023 included bug fixes for scoring mechanisms, ensuring more reliable article prioritization, and improvements to nnimap SSL handling for secure IMAP connections, such as refined expunge behaviors from prior versions. Additional updates encompassed new faces like gnus-header for variable-pitch fonts in headers and the gnus-treat-emojize-symbols option for emoji rendering in articles.[40]
Emacs 30.1, released in 2025, introduced the nnfeed backend to simplify creating custom backends for web feeds, including the new nnatom for Atom syndication format support, enabling seamless integration of modern RSS/Atom sources. Native JSON parsing, now always available without external libraries, aids efficient feed processing. Gnus also gained compatibility with the new Android port of Emacs, allowing basic operation on mobile devices via the graphical interface.[41]
Gnus continues to be maintained primarily by Lars Magne Ingebrigtsen in collaboration with the Emacs development team, with no independent releases since the Ma Gnus development branch began in 2012; all advancements occur within Emacs.[35][42]
Usage
Initial Setup and Configuration
Gnus is integrated into Emacs as a built-in package, allowing users to start it directly without explicit installation beyond having Emacs available. To launch Gnus for the first time, execute the commandM-x gnus within Emacs, which autoloads the necessary libraries and initializes the newsreader. Alternatively, for users preferring explicit loading, adding (require 'gnus) to the Emacs initialization file (init.el) ensures the package is loaded on startup, though autoloading via the command is the standard and efficient approach.[43]
Configuration begins by setting key variables in the Emacs initialization file or a dedicated ~/.gnus.el file, which Gnus loads automatically upon startup. The primary server for fetching news or mail is defined using the gnus-select-method variable, typically as a list specifying the backend and server details; for example, to use IMAP as the primary method, evaluate (setq gnus-select-method '(nnimap "imap.example.com")). For multiple sources, such as combining news and mail servers, configure gnus-secondary-select-methods as a list of additional select methods, like ((nntp "news.example.com") (nnimap "mail.example.com")), enabling access to diverse backends without altering the primary one.[44]
For outgoing mail, integrate Gnus with the smtpmail library by setting variables like smtpmail-smtp-server to the SMTP host (e.g., (setq smtpmail-smtp-server "smtp.[example.com](/page/Example.com)")) and ensuring user-mail-address is defined with the user's email (e.g., (setq user-mail-address "user@[example.com](/page/Example.com)")); these establish basic sending capabilities compatible with most providers.[20] Additionally, set user-full-name to the user's display name for proper message headers.[43]
Gnus uses default directories for storing data: ~/News for newsgroup files and ~/[Mail](/page/Mail) for mail archives, managed by backend-specific variables like nnml-directory for mail spool. These can be customized globally via gnus-directory to relocate state files, such as .newsrc, to a preferred path (e.g., (setq gnus-directory "~/gnus/")), preventing home directory clutter while maintaining organization. For performance in environments with many groups, adjust gnus-large-newsgroup from its default of 200 to a higher threshold (e.g., (setq gnus-large-newsgroup 1000)), which influences how Gnus handles large group scanning during startup.[45][46]
On first run, if gnus-select-method is unset, Gnus prompts via an interactive setup process to select a primary backend and subscribe to initial groups, storing subscriptions in the .newsrc file using the internal gnus-newsrc-hashtb for efficient hashing and retrieval. This wizard-like initialization, combined with the aforementioned variables, completes basic setup, preparing Gnus for subsequent use without further intervention.[47]
Managing Groups and Servers
In Gnus, the Group buffer serves as the primary interface for managing newsgroups and mailing lists, allowing users to subscribe, unsubscribe, and organize groups dynamically during runtime. Subscribing to a group involves selecting it from the list of available groups and toggling its status; the commandu (bound to gnus-group-toggle-subscription-at-point) toggles the subscription of the group at the current point, moving it between subscribed (levels 1-5) and unsubscribed (level 6 or 7) states.[48] To list all groups, including unsubscribed ones, users can invoke L (or A u, bound to gnus-group-list-all-groups), which displays subscribed and unsubscribed groups regardless of read status, while l (or A s) limits the view to subscribed groups with unread articles.[48] Killing a group with C-k ( gnus-group-kill-group ) removes it from the visible list at level 9, but it can be restored via yanking with C-y.[49]
Server management occurs primarily through the Server buffer, accessed via the ^ command ( gnus-group-enter-server-mode ) from the Group buffer, where users can monitor and configure connections to news or mail servers. To add a foreign server for browsing and subscribing to its groups, the /a command in the Group buffer initiates a temporary connection, allowing selection of groups without permanent addition to the configuration.[8] Within the Server buffer itself, the a command ( gnus-server-add-server ) adds a new server by specifying its select method, such as nntp for NNTP servers or nnimap for IMAP, enabling persistent access to additional backends.[50] Pressing RET on a server entry displays its available groups, facilitating subscription adjustments directly from the buffer.[8]
For hierarchical organization, Gnus supports topics via the gnus-topic minor mode, enabled by pressing t in the Group buffer, which toggles topic display and allows nesting groups under topical headings.[27] Once activated, users create new topics with T n ( gnus-topic-create-topic ), assigning groups to them via commands like T c for copying or T m for moving, resulting in an indented tree structure where subtopics represent categories such as "Emacs" containing subgroups like comp.emacs.[27] This mode enhances navigation by collapsing or expanding branches, with indentation controlled by gnus-topic-indent-level (default 2 spaces).[27]
Subscription levels provide fine-grained control over group visibility and behavior, with gnus-group-default-list-level (defaulting to 5) determining the threshold for listing groups in the group buffer by default, hiding higher-level groups unless explicitly shown. Groups at levels 1-5 appear as subscribed and prioritized, while those at levels 6-7 are unsubscribed but retained (with level 8 for zombies, which are previously read unsubscribed groups, and level 9 for killed groups); commands like S C-k can kill all groups at a specified level, such as 7, to clean up unsubscribed entries without active messages.[46][49] This system ensures the buffer focuses on relevant content by hiding read groups above the default list level unless explicitly listed.[49]
The Gnus Agent facilitates offline reading and caching, particularly useful for slow or intermittent connections, by downloading articles in advance for later access without server contact.[51] Users agentize servers with J a in the Server buffer, configuring download policies via group or topic parameters to fetch eligible articles; starting Gnus unplugged with gnus-unplugged then allows reading from the local cache.[51] Commands like J s retrieve articles from all agentized groups during online sessions, storing them for offline use.[51]
To update subscriptions and check for new content, the g command ( gnus-group-get-new-news ) in the Group buffer queries servers for updates, incorporating new groups based on gnus-check-new-newsgroups (default ask-server) and applying subscription methods like gnus-subscribe-zombies for automatic handling.[8] A numeric prefix limits the check to specific levels, while a non-numeric prefix forces a full rescan of active files.[8]
Reading and Composing Messages
In Gnus, reading messages begins in the summary buffer, where users navigate through article summaries using key commands such asn to move to the next article and p to move to the previous one. Pressing RET on a summary line opens the selected article in the article buffer for full viewing, allowing seamless transitions between overviews and detailed content.[52]
Articles can be marked for various actions directly from the summary buffer to manage reading progress efficiently. The ! command toggles the tick mark on an article, indicating it as read while keeping it visible for reference; # applies a catch-up mark to the entire group, designating all articles as read; and d marks the current article as deferred or expirable, postponing its processing until later.[53]
Composing new messages or responses occurs via dedicated commands in the summary or article buffer. The m key initiates a new message, f prepares a follow-up to the current article, and r sets up a reply, all of which launch the composition in Message mode—a specialized Emacs major mode for editing mail and news with features like header completion and spell-checking integration.[54][55]
Gnus handles MIME-encoded content through interactive buttons in the article buffer, where users click on attachment indicators to view or save files such as images or documents. For inline display, the mm-inline-images function renders embedded images directly in the text flow, enhancing readability for multimedia messages without external viewers.
Searching within articles is facilitated by the / command, which performs a regular expression search across the article buffer content. Additionally, L limits the visible articles in the summary buffer to those matching process marks, streamlining focus on specific subsets like unread or scored items.[56]
During reading sessions, adaptive scoring dynamically adjusts article rankings in the summary buffer based on user interactions, such as following threads or marking preferences, to prioritize relevant content according to predefined scoring rules.[57]
Development and Community
Current Maintenance Status
Gnus is actively maintained as part of the GNU Emacs project, with ongoing development integrated into the Emacs source tree.[6] Commits to Gnus are submitted and discussed via the emacs-devel mailing list, ensuring coordination with broader Emacs enhancements.[58] In 2025, the Emacs Git repository recorded 51 commits to the lisp/gnus/ directory between January and October, addressing documentation, multibyte text handling, and other improvements.[59] The lead maintainer for Gnus remains Lars Magne Ingebrigtsen, who has overseen its evolution since major rewrites, with contributions from the Emacs core team including developers like Stefan Kangas and Eli Zaretskii.[42] Gnus follows the release cadence of Emacs, with updates incorporated into versions such as 30.1 (February 2025) and 30.2 (August 2025), focusing on stability and compatibility.[5] There have been no independent Gnus releases since 2013; all changes are now delivered exclusively through the Emacs trunk and stable branches.[6] Maintenance faces challenges from the declining relevance of Usenet, which has diminished in popularity compared to modern web-based forums and social media since the early 2000s.[60] Compatibility efforts continue for upcoming Emacs versions, including work toward Emacs 31, with the current trunk (31.0.50) incorporating Gnus adjustments. Bug tracking occurs through the bug-gnu-emacs mailing list, where users report issues and developers address them. Recent fixes in 2025 include resolutions for IMAP synchronization problems, such as message disappearance in gnus-cloud, and enhancements to feed parsing in the nnrss backend.[61] These updates underscore Gnus's adaptability to contemporary protocols despite its roots in newsreading.Resources and Documentation
The primary resource for learning and using Gnus is the official Gnus manual, accessible within Emacs via the Info system by typingC-h i m Gnus or online through the GNU Emacs documentation at the dedicated Gnus section.[62] This comprehensive manual covers configuration, group management, message handling, and advanced customization, serving as the authoritative guide maintained alongside Emacs releases.
The official Gnus homepage at gnus.org provides archives of past releases, historical documentation, and links to further resources, although much of its content reflects older versions and has not been actively updated in recent years.[63] For ongoing discussions and user support, the active community mailing list is [email protected], a low-volume forum (typically fewer than 1 message daily as of late 2025) focused on development, troubleshooting, and feature requests, with subscriptions handled via [email protected].[64]
Community-driven resources include forums such as the r/emacs subreddit on Reddit, where users share configurations and tips for Gnus integration, and the Emacs Stack Exchange site (tagged with "emacs" or "gnus"), offering Q&A on practical issues like setup and extensions. Recent tutorials, such as the 2025 "Gnus for Noobs: Mail and News in Emacs" video series by System Crafters on YouTube, provide beginner-friendly walkthroughs of core workflows and modern adaptations.[65]
For extending Gnus functionality, the MELPA package archive offers community packages like gnus-desktop-notify, which adds desktop notifications for new messages in specified groups, enhancing usability without altering core behavior.[66] The full source code for Gnus is integrated into the Emacs repository and browsable via the official Git interface at Savannah, under the lisp/gnus directory, allowing inspection and contribution for advanced users.
Books providing in-depth coverage include chapters on Gnus in Learning GNU Emacs (Third Edition, 2004), which explain news reading, mail integration, and basic customization as part of broader Emacs usage.[67] An older but detailed reference is found in sections of Mastering Emacs (2015), which discusses Gnus for email and RSS handling within Emacs workflows.