Rewrite Textpod to Go
On <2026-04-21 Tue> I rewritten Textpod from Rust to Go.
While I'm on vacation with the new MacBook Pro M4 Pro and I have installed only bare minimum on it, I don't have Rust toolchain but do have Go. So, asked Claude to do rewrite. The only external dependency is goldmark package to render Markdown as HTMLs.
Updated Elisp helpers:
(use-package textpod
:config
(setq textpod-token (cadr (auth-source-user-and-password "finita.myaddr.dev" "textpod"))
;;textpod-url "/notes"
textpod-url "http://localhost:3000/notes"
))
(let ((default-directory "~/Developer/src/github.com/velppa/textpod"))
(async-shell-command "go build -o ~/.local/bin/textpod ." "*textpod-build*"))
(let ((default-directory "~/Developer/src/github.com/velppa/finita-la-comedia/textpod")
(buffer-name "*textpod-server*"))
(when (get-buffer buffer-name)
(kill-buffer buffer-name))
(async-shell-command (format "textpod --token %s --base-path notes" textpod-token) buffer-name))
(browse-url (format "%s?token=%s" textpod-url textpod-token))
Trying Textpod once again
On <2026-04-13 Mon> I installed Textpod on Mac Book Pro M1 using Cargo (Rust tooling).
Good:
- Separate from notes, and from blog.
- Managing ton of markdown files for small notes that I produce - huge overkill
- I want something like this, write in org-mode, press a button (call elisp function) and heading is sent to website.
- Open source, so I can fork and improve it for my needs.
- ☑ make a fork - ~/Developer/src/github.com/velppa/textpod
- Can make it prettier.
Open questions:
- ☑ Does it have an API? Like I would select a Org text, convert it
to Markdown and send to Textpod.
- use {M-x textpod-org-region-to-note} function
- ☑ How to increase font? Increased in the sources.
- ☑ Token access, for hosting on finita-la-comedia
- ☑ Internal Org Roam links are pasted as markdown files. So in theory, I could somehow expose them.
I ended up forking it to https://github.com/velppa/textpod and greatly improving it for my needs. You're reading notes served by Textpod v0.2.0. It is my project.
Notable changes:
- Read-only mode with token authentication: The app now supports an
optional
--tokenflag that enables authentication. When a token is set, users without the token see a read-only interface where they can only search notes. Access is granted via a?token=Xquery parameter (which sets a cookie) or a Bearer token in the Authorization header. The UI dynamically adjusts based on authentication status, hiding edit/delete controls and changing the editor placeholder for unauthenticated users. - Enhanced note management: Notes now have unique IDs based on
timestamps, enabling direct access via
/note/:idURLs.PUTmethod allows editing notes (upserting if not found). - Subpath support: to deploy on your domain under subpath, supply
--base-path notesflag. Then notes will be under/notessubpath. - The app watches the notes file for external changes and automatically reloads.
- The link archiving feature lets users prefix URLs with
+to both raw urls and Markdown-formatted. - Special handling of links to
.mdfiles: They appear when exporting from Org-roam. These are internal links and Textpod now turns them into search by filename, effectively returning all mentions of this concept. Poor man zettelkasten import. - UI improvement: larger fonts, footer, better code snippets for dark mode, tags on the heading.
- textpod.el: Companion Emacs package for quick sending notes to Textpod.
Later changes to setup will go into separate notes.