# Revising nndiscourse.el

**URL:** <https://forum.systemcrafters.net/t/revising-nndiscourse-el/1579>\
**Category:** Emacs Lisp\
**Created:** [April 30, 2025, 12:12am UTC](https://forum.systemcrafters.net/t/revising-nndiscourse-el/1579 "2025-04-30T00:12:25Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Glenneth](https://yyz1.discourse-cdn.com/flex029/user_avatar/forum.systemcrafters.net/glenneth/32/11_2.png) [@Glenneth](https://forum.systemcrafters.net/u/Glenneth)\
**Post date:** [April 30, 2025, 12:12am UTC](https://forum.systemcrafters.net/t/revising-nndiscourse-el/1579/1 "2025-04-30T00:12:25Z")

</div>

# Enhancing nndiscourse: New Features and Improvements

## Introduction

I’ve been working on enhancing the nndiscourse package for Emacs, which provides a Gnus backend for Discourse forums. I wanted to share some of the recent improvements that make it more powerful and user-friendly.

## Key Enhancements

### 1. Username Display Fix

Previously, usernames were showing as “unknown” in posts. I’ve implemented a fix that:

- Properly extracts usernames from Discourse API responses
- Caches usernames to reduce API calls
- Shows the actual username of the person who posted each topic

### 2. JSON Parsing Performance

To address performance issues with JSON parsing:

- Built a custom Emacs from the `faster-json-parsing` branch
- Added JSON timing logging to measure and compare performance
- Significantly reduced parsing time for large forum responses

### 3. Posting Capabilities

The biggest enhancement is adding posting capabilities to transform nndiscourse from a read-only client into a fully interactive Discourse client:

- Create new topics in any category
- Reply to existing posts with proper threading
- Use Markdown formatting in your posts
- Secure authentication using Discourse credentials or API key

## Usage

This topic was created in emacs, but when pressing `C-c C-c'` it currently opens your browser with the topic details populated. I am working on being able to post directly from emacs, I am, I promise.

Creating a new topic will be as simple as pressing `C-c C-n` in the Gnus Summary buffer, while replying to a post will be done with `C-c C-r` in the Article buffer. Keybindings are subject to change.

## Future Plans

I’m considering adding support for:

- File attachments
- Further performance optimizations
- Improved error handling

## Conclusion

These improvements make nndiscourse a much more complete solution for interacting with Discourse forums directly from Emacs. I hope to have some code available soon(ish)

Happy Emacs-ing!

This is what it looks like in gnus

 ![gnus-nndiscourse](https://canada1.discourse-cdn.com/flex029/uploads/systemcrafters/original/1X/f7b04ff7e886f1fc63e16aa431e3f7b88329dc27.jpeg)

---

<div class="post-metadata">

**Author:** ![shinkansen](https://yyz1.discourse-cdn.com/flex029/user_avatar/forum.systemcrafters.net/shinkansen/32/652_2.png) [@shinkansen](https://forum.systemcrafters.net/u/shinkansen)\
**Post date:** [September 25, 2025, 9:52am UTC](https://forum.systemcrafters.net/t/revising-nndiscourse-el/1579/2 "2025-09-25T09:52:28Z")

</div>

Any updates on the `nndiscourse.el`? I checked your codeberg profile but couldn’t see the codebase for it. Anything usable on the horizon?

---

<div class="post-metadata">

**Author:** ![Glenneth](https://yyz1.discourse-cdn.com/flex029/user_avatar/forum.systemcrafters.net/glenneth/32/11_2.png) [@Glenneth](https://forum.systemcrafters.net/u/Glenneth)\
**Post date:** [September 25, 2025, 10:02am UTC](https://forum.systemcrafters.net/t/revising-nndiscourse-el/1579/3 "2025-09-25T10:02:44Z")

</div>

The code can be found here [GitHub - glenneth1/nndiscourse: A Gnus backend for Discourse](https://github.com/glenneth1/nndiscourse) @shinkansen I had to press pause on this project due to work commitments.

I will get back to it at some point 🙂

---

<div class="post-metadata">

**Author:** ![trev](https://yyz1.discourse-cdn.com/flex029/user_avatar/forum.systemcrafters.net/trev/32/81_2.png) [@trev](https://forum.systemcrafters.net/u/trev)\
**Post date:** [September 26, 2025, 7:12pm UTC](https://forum.systemcrafters.net/t/revising-nndiscourse-el/1579/4 "2025-09-26T19:12:22Z")

</div>

> [@Glenneth](#):
>
> due to work commitments

LIES!

Maybe one of @daviwil ‘s agentic AI demons can finish it on a stream

---

<div class="post-metadata">

**Author:** ![ashraz](https://yyz1.discourse-cdn.com/flex029/user_avatar/forum.systemcrafters.net/ashraz/32/509_2.png) [@ashraz](https://forum.systemcrafters.net/u/ashraz)\
**Post date:** [October 9, 2025, 6:41am UTC](https://forum.systemcrafters.net/t/revising-nndiscourse-el/1579/5 "2025-10-09T06:41:55Z")

</div>

> [@trev](#):
>
> Maybe one of @daviwil ‘s agentic AI demons can finish it on a stream

Like they finished the chat bridge? 🤔
