New Package! - Simply Annotate: A Lightweight Annotation System

Yes thats right, yet another annotation system!, in this case it is a lightweight annotation system for Emacs that allows you to add persistent notes to any text file without modifying the original content.

https://melpa.org/#/simply-annotate https://github.com/captainflasmr/simply-annotate

Still not convinced it is any different to any other note taking package in Emacs given that previous generic sparse description? Well I shall do my best to explain my own note taking ideas. Of course this is also just a pet project to continue to learn elisp, so there is that too :)

I developed this package to fill my own perceived gap in the existing Emacs note-taking ecosystem. Although annotate.el comes close to what I needed, I wanted a simplified version and something with a few workflow adjustments that better suit my note taking preferences. The result is a lightweight alternative that handles annotations the way I have always wanted them to work.

The main functional aspects that I felt were important to me that generally differ from other existing Emacs annotation packages are:

See https://github.com/captainflasmr/simply-annotate/blob/main/docs/simply-annotate.org for the manual!

Quick Demo Video

Open this file and open the simply-annotate.el file

Go to the directory level and now browse the 2 files

Whats New

<2025-07-03 Thu> 0.6.0

A little refactoring and tidying up.

<2025-06-29 Sun> 0.5.1

Updated Key Bindings:

<2025-06-20 Fri> 0.5.0

New Key Bindings:

<2025-06-20 Fri> 0.0.1

Installation

(use-package simply-annotate
  :bind ("C-c A" . simply-annotate-mode))

Manual Installation

  1. Download simply-annotate.el
  2. Place it in your Emacs load-path
  3. Add to your configuration:
(require 'simply-annotate)
(global-set-key (kbd "C-c A") simply-annotate-mode)

Quick Start

  1. Open any file
  2. Enable annotation mode: M-x simply-annotate-mode
  3. Select/mark text and press M-s j to create your first annotation
  4. Create some more annotations
  5. Navigate with M-n (next) and M-p (previous)
  6. Add replies: Press M-s r on any annotation to reply
  7. Set status: Press M-s s to track progress (open/resolved/etc.)
  8. Advanced editing: Press M-s e to edit annotation data structure directly

Usage

Enabling Annotation Mode

M-x simply-annotate-mode

Or bind to a convenient key:

(global-set-key (kbd "C-c A") 'simply-annotate-mode)

Creating Annotations

Simple

The M-s j command (simply-annotate-smart-action) is context-aware:

  1. With region selected: Creates new annotation or edits existing one
  2. On annotated text: Toggles annotation buffer visibility
  3. With prefix (C-u M-s j): Forces edit mode on existing annotation
  4. Elsewhere: Creates annotation for current line
  5. Enter your annotation text in the dedicated buffer
  6. Save with C-c C-c

Advanced Editing

Raw Sexp Editing

For complete control over annotation data structures:

  1. Place cursor on any annotation
  2. Press M-s e to open the raw sexp editor
  3. Edit the Elisp data structure directly:
    • Modify thread metadata (status, priority, tags)
    • Edit comment text and timestamps
    • Add/remove/reorder comments
    • Change author information
  4. Save with C-c C-c or cancel with C-c C-k

Example sexp structure:

((id . "thread-123456")
 (created . "2025-06-29T10:30:00")
 (status . "open")
 (priority . "high")
 (tags . ("bug" "critical"))
 (comments . (((author . "John Doe")
               (timestamp . "2025-06-29T10:30:00")
               (text . "Found a critical bug here")
               (type . "comment"))
              ((author . "Jane Smith")
               (timestamp . "2025-06-29T11:15:00")
               (text . "I can reproduce this issue")
               (type . "reply")))))

Threading & Collaboration

Adding Replies

  1. Place cursor on any annotation
  2. Press M-s r to add a reply
  3. Enter your response
  4. The annotation becomes a threaded conversation

Status Management

Author Management

Configure for single-user or team workflows:

;; Single user (default behavior)
(setq simply-annotate-prompt-for-author nil)

;; Team collaboration
(setq simply-annotate-author-list '("John Doe" "Jane Smith" "Bob Wilson"))
(setq simply-annotate-prompt-for-author 'threads-only)  ; Prompt only for replies
(setq simply-annotate-remember-author-per-file t)       ; Remember per file

Available prompting modes:

Author Commands

Display Styles

Simply Annotate supports three display styles:

Change styles with M-s ] or customize simply-annotate-display-style.

Viewing Annotations

When simply-annotate-mode is active:

Key Binding Action
M-n Jump to next annotation
M-p Jump to previous annotation
M-s j Smart action (context-aware)

Managing Annotations

Creating

Editing

Standard Editing:

Advanced Sexp Editing:

Deleting

Listing All Annotations

Cross-file Overview

Org-mode Integration

Export your annotation threads to org-mode files for further processing:

Tips and Tricks

Workflow Suggestions

Enable the mode globally if you wish for all files!

(use-package simply-annotate
  :hook
  (find-file-hook . simply-annotate-mode)
  :bind
  ("C-c A" . simply-annotate-mode)
  ("C-c 0" . simply-annotate-show-all))

Smart Action Usage Patterns

Advanced Editing Tips

Display Style Tips

Performance Notes

Comments

comments powered by Disqus