Emanote 1.4 released

It’s been nearly 2 years since I last released Emanote, and I’m happy to announce version 1.4.

Emanote enables you to create beautiful websites – such as personal webpage, blog, wiki, Zettelkasten, notebook, knowledge-base, documentation, etc. from future-proof plain-text notes and arbitrary data – with live preview that updates in real-time. It aims to be next-gen neuron with powerful features.

Think of it is as a static-site generator (but with live preview!) for your Markdown notes à la Obsidian.

Here’s what’s been added in this release, over the 2 years. You can try it out using Nix or Docker.

Notable features

  • LLM optimized single-file Markdown export (#598)
  • Obsidian-style callouts (#466)
  • TOC sidebar (#504)
  • Native support for combining multiple notebooks
    • Resolve ambiguities based on closer common ancestor (#498)
    • Support for folder “index.md” notes (#512)
      • Instead of “foo/qux.md”, you can now create “foo/qux/index.md”
    • Layers can be mounted in sub-directories, enabling composition of distinct notebooks (#523)

Other improvements

  • Add query syntax for listing folgezetten children & parents (#476)
  • emanote run --no-ws option to disable WebSocket monitoring. This is useful for using Emanote to serve the HTML site directly on the internet, without needing to statically generate it.
  • Allow specifying custom page title in sidebar (#488)
  • Allow specifying lang attribute for HTML page in YAML config (#485)
  • KaTeX support (#489)
  • Lua filters: filter paths will now be looked up in all layers now.
  • Live server now uses Tailwind 3 (#503)
  • Enable auto identifier for org files (#502)
  • Support date metadata from the filename when it begins with YYYY-MM-DD (#552).
  • Daily notes automatically get a hierarchical tag.
  • HTML
  • Update ema (2.7.2)
  • Nix flake module
    • Add link checker based on html-proofer
    • Replace baseUrl and prettyUrls with extraConfig
  • BACKWARDS INCOMPTABILE changes
    • Removed ema:homeUrl (use baseUrl instead)
    • feed.siteUrl is now page.siteUrl
    • A new HTML template layout “default” (unifies and) replaces both “book” and “note” layout. (#483)
      • Sidebar tree is now computed from the folgezettel graph, which is a superset of the folder hierarchy. The index page’s tree inherits the same.
      • The semantics of folder-folgezettel is now applied in inverse (see docs)
    • Add anchor links to headings (#500)

Bug fixes

  • Emanote no longer crashes when run on an empty directory (#487)
  • Stork search fixes
    • Fix empty stork index generation when using more than 1 layer (#493)
    • Stork search index is now uses note path from their associated layer (#495)

Performance improvements

  • Browser-side performance improvement using idiomorph (#567)
  • Fix memory leak and performance gradation overtime in the browser due to Tailwind when using live server (#569)
10 Likes

Thanks! I use this for my personal journal and I like it very much! :slight_smile:

I noticed that –no-ws seems like a handy flag, but is not documented in the –help output, in fact I get an error if I try to use it.

2 Likes

@bolt12 –no-ws is only mentioned in the help output of run subcommand:

$ nix --accept-flake-config run github:srid/emanote -- run --help
Usage: emanote run [-h|--host HOST] [-p|--port PORT] [--no-ws]

  Run the live server

Available options:
  -h,--host HOST           Host to bind to
  -p,--port PORT           Port to bind to
  --no-ws                  Disable websocket
  -h,--help                Show this help text

get an error if I try to use it.

Hmm, could you file a bug report? It works for me here:

$ nix --accept-flake-config run github:srid/emanote -- run --no-ws
[Info#ema] Launching Ema under: /Users/srid/Library/CloudStorage/ProtonDrive-user@proton.me-folder/Notes
[..]
1 Like

Thanks I missed that!