The Denote-Explorer package provides auxiliary functions to maintain and explore your collection of Denote files. Denote-Explore provides three groups of Emacs commands:
- Summary statistics: Count and visualise notes, attachments and keywords.
 - Random walks: Generate new ideas using serendipity.
 - Janitor: Manage your denote collection.
 - Knowledge graphs: Visualise your Denote network as a network graph.
 
Read the Denote-Explorer manual for a comprehensive explanation of all functionality (C-h R denote-explore).
Visualising networks of Denote files with SVG or PDF files will require the GraphViz package to be available. The D3.js visualisation type downloads an external JavaScript file from d3js.org.
Denote-Explore package is available on MELPA and is easily installed with the use-package macro.
The configuration below customises all available variables and binds all available commands to the C-c e prefix. Modify this configuration to suit your needs, as one person’s sensible defaults are another person’s nightmare. To get started you don’t need to configure anything, so (use-package denote-explore) is sufficient.
(use-package denote-explore
  :custom
  ;; Where to store network data and in which format
  (denote-explore-network-directory "<your preferred folder>")
  (denote-explore-network-filename "denote-network")
  (denote-explore-network-keywords-ignore "<keywords list>")
  (denote-explore-network-regex-ignore "<regex>")
  (denote-explore-network-format 'd3.js)
  (denote-explore-network-d3-colours 'SchemeObservable10)
  (denote-explore-network-d3-js "https://d3js.org/d3.v7.min.js")
  (denote-explore-network-d3-template "<file path>")
  (denote-explore-network-graphviz-header "<header strings>")
  (denote-explore-network-graphviz-filetype 'svg)
  :bind
  (;; Statistics
   ("C-c e s n" . denote-explore-count-notes)
   ("C-c e s k" . denote-explore-count-keywords)
   ("C-c e s e" . denote-explore-barchart-filetypes)
   ("C-c e s w" . denote-explore-barchart-keywords)
   ("C-c e s t" . denote-explore-barchart-timeline)
   ;; Random walks
   ("C-c e w n" . denote-explore-random-note)
   ("C-c e w r" . denote-explore-random-regex)
   ("C-c e w l" . denote-explore-random-link)
   ("C-c e w k" . denote-explore-random-keyword)
   ;; Denote Janitor
   ("C-c e j d" . denote-explore-duplicate-notes)
   ("C-c e j D" . denote-explore-duplicate-notes-dired)
   ("C-c e j l" . denote-explore-missing-links)
   ("C-c e j z" . denote-explore-zero-keywords)
   ("C-c e j s" . denote-explore-single-keywords)
   ("C-c e j r" . denote-explore-rename-keywords)
   ("C-c e j y" . denote-explore-sync-metadata)
   ("C-c e j i" . denote-explore-isolated-files)
   ;; Visualise denote
   ("C-c e n" . denote-explore-network)
   ("C-c e r" . denote-explore-network-regenerate)
   ("C-c e d" . denote-explore-barchart-degree)
   ("C-c e b" . denote-explore-barchart-backlinks)))Alternatively, you can install it directly from GitHub:
(unless (package-installed-p 'denote-explore)
  (package-vc-install
   '(denote-explore
     :url "https://github.com/pprevos/denote-explore/")))Major version numbers coincide with Denote major versions.
- Minor compatibility issues with Denote 4.1. No upgrades.
 
- Various bug fixes and refactoring
 - Added 
denote-explore-random-signaturefunction - Add ability to ignore files by keyword for determining isolatedness (Pull request 41)
 - Added 
denote-explore-list-keywordsfunction (Pull request 42) 
- Compatibility check with Denote 4
    
- Minor update to denoter-explore-sync-metadata
 - Updated denote-explore-rename-keyword
 
 - Clarifications in the manual
 - Added error message when ‘missing’ link is not found in buffer
 - Clarifications in the manual
 
- Fixed bug in keyword renaming function.
 
- Refactoring of missing links functionality
 - Added table of missing file links in Denote files
 - Renamed 
denote-explore-dead-linkstodenote-explore-missing-links 
- Fixed issues in the manual.
 - Clarified duplicate detection.
 - Fixed bug in 
denote-explore-barchart-backlinks. - Added 
denote-explore-random-regex-ignorevariable to exclude files from random walks. 
- Knowledge Graphs
    
- New visualisation type: Sequences of Denote signatures
        
- Changed GraphViz geometry for sequence graphs
 
 - Full rewrite of most functions.
        
- Increased efficiency in detecting edges (links between files)
 - Ability to draw graphs without attachments by using the universal argument when generating and regenerating graphs
 
 - D3.js Visualisations
        
- New slider to change the number of node labels (from none to every node)
 - Added number of isolated notes to info tooltip (when isolated nodes > 0)
 
 
 - New visualisation type: Sequences of Denote signatures
        
 - Janitor
    
- New function 
denote-explore-dead-linksto find dead links - Optimised single and zero keywords detection
 - Change behaviour and optimisation for 
denote-explore-isolated-notes denote-explore-sort-keywordsreplaced bydenote-explore-sync-metadata- Refactored 
denote-explore-rename-keyword - Renamed duplicate notes functions to remove double verb and UI improvements.
 denote-explore-sync-metadatabug fix
 - New function 
 - Statistics
    
- New function 
denote-explore-barchart-timelineto show number of nodes and/or attachment created per year - The File type bar chart can also show only attachments.
 denote-explore-barchart-degreeallows text-only option- Added all used keywords to 
denote-explore-count-keywords - Fixed bug in random walk functions
 
 - New function 
 
- First version formally registered (for inclusion in Guin)
 - D3.js Visualisation
    
- Community graphs can filter out nodes where degree = 0 (isolated notes)
 - Preview images and PDF files in tooltips
 
 - Updated manual
 - Bug fixes
    
- GraphViz network
 - D3.js file type legend colours
 - Random walk functions
 
 - Updated code commentary
 - Updated counting and related bar chart functions
 
- Removed dependency on R for D3.js graphs. D3 now uses a template in which a JSON file is inserted. This format is now the default.
 - Fixed bugs in renaming functions
 - Protection against using quotation marks in note title when visualising networks in GraphViz.
 - Fixed backlinks barchart visualisation
 - Updates documentation strings.
 
- Compatability with Denote 3.0
 - Renamed barchart functions to all start with 
denote-explore-barchart-. - Using universal argument with 
denote-explore-barchart-extensionsvisualises only attachment file types. - All functions that rename files updated for compatability with Denote 3.0
 - Enhanced info manual
 
- New functions:
    
denote-explore-backlinks-barchartto view top-n notes with backlinksdenote-explore-random-regexto jump to random note matching a regular expression.denote-explore-identify-duplicate-notes-dired: View notes with duplicates ID in Dired.
 
- Fixed various compilation errors.
 - Enhanced output for 
denote-explore-identify-duplicate-notes - Update customization types for note ignore variables
 - Updated 
defgroupdefinition anddefcustomtypes 
- Published Info mode manual
 - Clarified obsolete variables and functions
 denote-explore-network-keywordsno longer interactive- Updates to Denote functions
 
- Geneal code refactoring with assistance from Prot
 - Added ability to filter keywords network by minimum weight of edges
 - Added ability for free text in 
denote-explore-network-graphviz-filetype - GEXF format now includes the total degree for each node
 - Enforced consistency with use of universal argument (its use will include attachments)
 denote-explore--retrieve-titledeprecated. Now using Denote function.- Updated manual with clarifications
 
- Fixed bugs with random links and keywords from nil file-name
 - New variable 
denote-explore-network-regex-ignoreto ignore files matching a regular expression when creating neighbourhood or community graphs. 
- Network visualisation
    
- SVG output includes links to source file.
 - Configure GraphViz output format with 
denote-explore-network-graphviz-filetype(SVG (default) or PDF advised). - Improved scaling of GraphViz graphics.
 denote-explore-network-regeneraterecreates the previous graph
 - New functions:
    
denote-explore-isolated-notesto select Denote files without any links or backlinks.denote-explore-degree-barchartdraws the distribution of total number of (back)links per file (Degree distribution - Wikipedia).
 - Updated functions:
    
denote-explore-rename-keywordallows renaming more than one keyword to a new version.denote-explore-sync-metadataenforces renaming confirmation.
 - Minor bug fixes.
 
- Complete rewrite of the graph visualisation functionality. Now includes three formats (JavaScript, GraphViz and GEXF) and three graph types (notes that match a regular expression, note neighbourhood and keyword graph).
 - Fixed bugs in 
denote-explore--retrieve-titleanddenote-explore--retrieve-keywords. - Enhanced function and variable documentation.
 
- Removed 
pandocdependency in network generation. denote-explore-identify-duplicate-notesreplacesdenote-explore-identify-duplicate-identifiers. This new version either detects duplicate identifiers, or duplicate file names (using the universal argument). Comparing duplicate filenames ignores any duplicate identifiers caused by exporting Org mode files.
- Added helper function to call R script for network visualisation.
 denote-explore-dashboard.eldeprecated.- Added to MELPA.
 
This version is a complete rewrite of the code to improve coding quality and compatibility with internal changes since Denote version 2.2.
Also major changes to the network visualisation, which can now take a regular expression for partial networks. Most of the code is now undertaken in Emacs Lisp, which saves the network in JSON format.
The functionality for a Dashboard widget has been moved to a separate file to not enforce the requirements for those users not seeking to implement the widget.
New functionality since the previous version:
denote-explore-identify-duplicate-identifiers: Provide a list of duplicate identifiers.denote-explore-single-keywords: Select a note or attachment with a keyword that is only used once.denote-explore-zero-keywords: Select a note or attachment without any keywords.denote-explore-sort-keywords: Order the keywords of all Denote notes and attachments alphabetically.denote-explore-rename-keyword: Rename or remove a keyword across the whole Denote collection.denote-explore-sync-metadata: Synchronise the filenames with the metadata for all Denote files.
Some random ideas for future development. Feel free to suggest other ideas.
- [ ] Functions to rename Denote attachments using EXIF metadata.
 - [ ] Store the Denote metadata in a hash table that is updated after every modification to a Denote file for more efficient visualisation.
 - [ ] Ring of previously-generated networks instead of overwriting 
denote-explore-network-previous - [ ] Use org-graph-view for live neighbourhood view of the current buffer
 - [ ] Community detection?
 - [ ] Create a Denote widget for the Emacs Dashboard with links to statistics.