Show HN: Edna, note taking app for developers

edna.arslexis.io

330 points by kjksf 6 days ago

I took a small break from coding SumatraPDF and wrote a note taking application that is perfect for me: https://edna.arslexis.io/

Edna is a note taking app for developers and power users. A cross between Obsidian and Notational Velocity.

Markdown, plain text, code, works in browser so no installation required, private (notes are stored in your browser or disk) and secure (can encrypt notes with a password).

The story so far.

I was always attracted to editors with minimalistic UI, like https://mak.ink/, simplenote, Notational Velocity. I like having most of the screen estate for writing because writing and editing is what note taking apps are for.

But: most of them are very thin on features and UI.

I saw Heynote and it was one of those minimalistic writing UIs with not many features.

I liked their concept of dividing notes into blocks so I forked Heynote and started coding.

The goal was to combine writing-oriented, minimalistic main UI while also providing on-demand UI for features and efficient operation. Things like context menu, type-down note switcher, command palette, quick access shortcuts, plenty of keyboard shortcuts.

Another goal was privacy and security. The notes never leave your computer and can be encrypted with a password. It also makes the code simpler because I don't need any backend storage, user accounts and auth etc.

Sadly, only Chrome and Edge provide the necessary file system api, on other browser you can only store notes in local storage, which means no sharing between computers or accessing the notes with other software.

40 working days and 528 commits later, here's what I've added:

  * added support for multiple notes
  * ability to store notes on disk
  * and if you store notes in a directory managed by DropBox, OneDrive etc., you get sharing of notes between computers
  * Ctrl + P: UI for switching between notes, creating new notes, deleting notes, inspired by Notational Velocity
  * Ctrl + Shift + P: command palette like in vs code
  * context menu to access frequently used functionality
  * Ctrl + E to open note from history (list of recently opened notes)
  * ability to assign Alt + 0 ... Alt + 9 quick access shortcuts 
  * ability to encrypt notes with a password
  * export all notes to a .zip file
  * automatic, daily backup of notes to a .zip file (optiona, see Settings)
  * Ctrl + B to navigate between blocks
  * re-designed Settings UI
  * added ability to execute Go blocks
  * support Svelte and Vue in code blocks
  * ported the UI code from Vue to Svelte 5, just because I could
  * converted from desktop app to run in the browser
(Ctrl is on Windows, on Mac it's ⌘).

I've been using it daily while working on it. 94 notes and counting.

I still have ideas for improvements but it has all the core features for productive work.

The app: https://edna.arslexis.io/

The code: https://github.com/kjk/edna

thesunny 6 days ago

This is a really cool idea. I especially like the math blocks where you can add blocks of information that actually do things. I could see this potentially even growing beyond math, but other types of functionality as well.

One optimization that might be interesting is to simply use Markdown as your main document all the time and then when you want to add special functionality like the math block to simply have that as a code block in Markdown. For example, using the triple back tick followed by the word math. Then anything inside of that math block works just like you already have.

This also makes it easy to add other types of blocks incrementally.

One challenge for me in reading the sample document was that it wasn’t clear that a math block was a math block without the comments that you wrote. Using the triple back tick with the block type would solve that problem

  • kjksf 6 days ago

    Yeah, so far this behavior is inherited from Heynote.

    I've been thinking about making math an option within markdown.

    The type of the block is shown at the bottom, in the status bar.

    • geoelectric 5 days ago

      FWIW, doing it as a special code block would align with how Obsidian handles stuff like that from its extensions.

      For example, ```tasks blocks are used in Obsidian Tasks to denote queries. The extension replaces the block with the rendered task list, when in wysiwyg editing or in the rendered view.

      In your case the results would just appear, a la soulver, but the way of setting it up would be familiar.

Arjuna144 5 days ago

Now there are three "newish" Markdown / PWA / Note apps that I am aware of:

- Silverbullet.md (https://silverbullet.md)

- Eidos (https://eidos.space/)

- and this ofc (https://edna.arslexis.io/)

Is someone aware of more of these?

I am liking all of them and they seem to have different perspectives, goals and philosophies.

Sadly none of them have a quick capture experience on android that I am satisfied with...

  • mk12345 5 days ago

    I created https://floatynotes.app a while ago, which might fit your list :). It provides virtual sticky notes, using the new Document Picture-in-Picture API.

    • royaltjames 5 days ago

      hey this is awesome, thanks for sharing!

  • bobajeff 5 days ago

    Silverbullet.md looks really good to me. With a few more features it might be able to replace vscode as my note taking app.

  • rajatkulk 2 days ago

    Octarine (https://octarine.app)

    Desktop only (Mac currently) though, with windows on the way. Most likely will never have a web version.

    Source: Me who built it

  • deskr 5 days ago

    > quick capture experience

    How would that experience look like? (I think I'm after the same thing!)

    • wonger_ 5 days ago

      I'm working on quick capture! Just a prototype so far for saving text snippets: https://wonger.dev/posts/in-the-works#gimme-that

      Ideally, note capture is as easy as screenshots. It means removing nonessential menus, decisionmaking, buttons, etc. For example, having the app start with an editor and keyboard open, versus having the app start with a list of existing notes. It may mean gesture shortcuts.

      For a published app with adjacent ideas, check out Bebop for iOS: https://www.jackcheng.com/bebop-design-dev-process/

michaelrpeskin 6 days ago

Is desktop on the roadmap? I use HeyNote (desktop) every day and the only feature I _really_ want is multiple notes. You added that, but I need desktop because of corporate rules.

  • babo 6 days ago

    If you have git, golang and bun/nodejs on your machine it works from localhost.

      git clone git@github.com:kjk/edna.git
      cd edna/server && go get && go build && cd ..
      ./server/server -build-local-prod
      ./server/server -run-local-prod
  • kjksf 6 days ago

    Desktop would be easy to do but seems a bit pointless.

    You can install a PWA shortcut which gives you even more desktop experience in the sense that it looks like an app separate from the browser.

    That is what I do.

    What are those corporate rules and how are they enforced?

    Is it about storing data? Because Edna stores the notes on your computer, it's never sent to any server.

    • NoahKAndrews 5 days ago

      I have Heynote configured to float on top of all other windows, to close to the tray instead of exiting entirely, and to open when I press a hotkey combo. I don't think I can do all of that with a PWA.

    • vunderba 5 days ago

      Uhh no... desktop isn't pointless unless you're wildly optimistic about the app website remaining online indefinitely into the future.

      Whereas if I have an installer or an electron app, I can copy it to a thumb drive and install it years later on a totally different machine even if your website is long gone.

      I personally dislike PWAs because they gave the deceptive illusion that you're installing an actual application as opposed to just a bunch of ephemeral stuff that's thrown inside the user data folder of the respective browser.

    • acoustic_ghost 4 days ago

      not entirely, requiring an internet connection at the start does limit use, e.g. lets say you need to travel and don't have an internet connection or just have your notebook out and about the PWA doesn't entirely cover that case

  • pax 6 days ago

    desktop, or offline? isn't the PWA satisfactory?

    • kiratp 5 days ago

      I can’t back up the data in a PWA.

      • kjksf 5 days ago

        If you store notes on disk, which is what I do, you can back them up with any file backup tool.

        I store my notes (encrypted with a password) on OneDrive.

        See https://edna.arslexis.io/help-win#storing-notes-on-disk

        I even have a settings option for a daily backup which exports all notes into a single .zip file in `backups` sub-directory. Not sure if it makes much sense, but it's there.

      • michaelrpeskin 5 days ago

        For me, I like that HeyNote auto saves to buffer.txt and I can have a crib job auto commit that to git at regular intervals.

    • stronglikedan 6 days ago

      not everyone has 24-hour online access

      • spartanatreyu 5 days ago

        PWAs don't need online access. They only need initial access to download them.

        Same with plain old websites if they're made to run offline (e.g. https://devdocs.io/offline).

liquid_bluing 5 days ago

I am a prolific note-taker, and I use vim. Many of these features and more are supported in vim with the vim-markdown plugin, which has support for markdown syntax highlighting and syntax highlighting in code blocks, and a hierarchical table of contents using the location list, which is my favorite feature. I have scripts and functions that implement some other features. The one important thing that vim necessarily lacks that is very useful for note-taking is the ability to render images and mathematical equations, which is why I still sometimes use Word.

This is a neat piece of software, but it would seem to me that the tools available on the command line - Unix or PowerShell - cover just about all the use cases, and importantly, are customizable, lightweight, and interoperable. For instance, I have scripts that use fzf and/or ripgrep to quickly search my notes directories and open notes for editing.

This is just me - it's definitely possible that I'm missing out on a better way of doing things, but I can't easily see the value, for a developer at least. Maybe folks just aren't that familiar with what can be done with common tools that already exist? Maybe it's because the CLI can be a pain to learn? I guess that's what a GUI note-taking app is for...

BTW, I'm not trying to be negative, just sharing my possibly idiosyncratic perspective.

  • skjoldr 3 days ago

    Vim has a steep learning curve though, GUI apps don't.

mcintyre1994 5 days ago

This is really cool, I think I'll end up using this instead of a random VSCode window. Multiple blocks and especially the math ones are really nice for this use case.

FYI in every browser I use on Mac, command + L highlights the current page URL, so that shortcut to change language/block type doesn't work for me. Not a huge deal because you can change it from that bar at the bottom or the command palette, but figured I'd flag in case it's worth changing that shortcut.

  • DiggyJohnson 5 days ago

    That is probably the most useful shortcut that I haven't been using. I have been up the creek since my workplace implemented and actually-effective browser extension plugin and I lost my precious Vim Vixen.

    • wonger_ 5 days ago

      Ctrl/Cmd + L is very useful. It also works in Windows File Explorer, Spotify Desktop, and presumably many other apps.

    • mcintyre1994 5 days ago

      It’s a really useful one. Arc also has cmd + shift + c to copy the current URL, which I very much miss everywhere else now!

suranyami 6 days ago

This is remarkably similar to Calca.app, which I still use occasionally. http://calca.io/

I love that yours is web based! Can see it being much more reusable in a number of use-cases.

Calca was originally MacOS/iOS, but has since been ported to Windows.

I think that the notation in Calca to use a `=>` to display results maybe adds a bit more clarity to the math expressions, but your display style seems to work pretty well too.

The only advantage Calca seems to have is they’ve had almost a decade to add things like extra functions (compound interest, trig, …), constants, operators, etc.

I’ve always thought that style of simple but highly visible calculation is a far superior alternative to spreadsheets. Jupyter, LiveBook, Mathematica, etc… have shown that it works, but the world is still enamored with Excel, despite its propensity to hide mistakes.

viccis 6 days ago

I will check this (and Heynote) out. I have long wanted to get into something like Obsidian, but have always had trouble finding a good example of a workflow in the development world that makes good use of their features. Almost all example workflows I've seen are from people whose job it is to work on and evangelize note taking tools, and it's mostly things like organizing their notes on how to take notes. Seemed like a bad sign. This seems a bit more focused and could at least replace my habit of opening up Notepad++ (on Windows) or a text document in a scratch folder (on Linux) to jot down a query to tweak and reference later. Thanks!

  • Vegenoid 5 days ago

    I had the same experience as you, and held off on getting into note taking with Obsidian for quite a while. Eventually someone said to me "Don't worry about workflow at all, just start taking notes with no flow or organization. You will develop a flow that works for you as you use it more." That's what I did, and it was very true. I don't think my flow matches any popular workflow, I just started taking notes and it naturally developed.

    If you have something you want to write down to be able to reference in the future, create a note and put that in it. The next time you want to write something down, you can either put it in the note you already created, or you can make another note if that sounds nicer. Up to you. You'll find out what works.

    You can do basically what you're doing right now, which is opening a random file and putting it in there, except now instead of your files being spread across your system they're all in one place, and if you want to start doing fancier stuff with them in the future you can. I use a small percentage of Obsidian's features, and they don't get in my way if I'm not using them.

  • kjksf 6 days ago

    This is one of the uses for me as well: jotting temporary notes when programming.

    One of the default notes is `scratch` for exactly that and you can summon it quickly with `Alt + 1`

felarof 17 hours ago

Take my money, if someone can build an obsidian plugin similar to this!

lordgrenville 6 days ago

Glad that you led with having made SumatraPDF, I love that app and it's a big recommendation for me.

  • slyfox125 5 days ago

    Agreed. Sumatra is great. The addition of night/dark mode was a game changer. It's lightweight and effective, and thus efficient. Accordingly, knowing that this project originates from someone involved with Sumatra speaks volumes.

filcuk 5 days ago

This looks really good. Have you come across SilverBullet? Similar concept. https://silverbullet.md/

SB can be hosted on Docker, which has the benefit of being able to access your data from any device. Do you have any such plans for Edna?

  • kjksf 5 days ago

    Regarding accessing from any device: at least for desktop you can store notes on disk, in a folder managed by DropBox or OneDrive or Google Drive (https://edna.arslexis.io/help-win#storing-notes-on-disk).

    You can then access the note on every computer where you replicate that folder.

    This doesn't cover accessing from mobile or computers you don't own but it's just a different kind of a problem of auth.

    Edna is actually a self-contained go binary that you could run yourself on a server or your desktop.

    Currently the backend (Go server) is there to just serve HTTP files but it wouldn't be hard to add storage API to Go server and modify Edna to use that. I already have 2 storage backends: local storage and file system api.

    I would say it would be at most a few days of work to make it work similarly to SB but that's not something I plan right now. I still have some UI functionality to add to Edna and then we'll see.

    • filcuk 4 days ago

      Thanks for the detailed answers, I'll definitely be keeping an eye on this.

  • kjksf 5 days ago

    Funny you would say that.

    Earlier I also made a fork of silverbullet: https://notedapp.dev/ with similar goals to Edna (which is a fork of heynote).

    But don't use it. I stopped working on it half-way. In retrospect, I've made a mistake there of doing my note storage backend.

    Then I was thinking about re-starting it and re-doing the backend for notedapp but then I saw heynote and used that as a based and I'm quite happy with the result.

    I do like SilverBullet so it's a possibility that I'll do another project which combines the UX ideas of Edna with SilverBullet editing UI. But for now I still have some ideas for Edna, will keep me busy for at least a week :)

geoelectric 5 days ago

Any capacity for inter-note links there or planned?

I guess the OG NV didn’t have that but I used them pretty extensively in nvAlt and in Obsidian (not that I’d expect anywhere near what the latter does with analyzing them).

  • kjksf 5 days ago

    I guess I could add 2 helpful features:

        - autocomplete for note name when `[`
        - if there's note `foo` and `[foo]` in markdown block, Ctrl + click could open to that note
  • mrtesthah 5 days ago

    Nope, OG NV had inter-note linking, Simplenote syncing, file saving, encrypting, etc. long before the NVAlt fork existed[1]. Just about the only thing NVAlt added was a Markdown preview pane.

    1. https://notational.net

hawski 5 days ago

Not long time ago I started making a note taking thing and some of your goals align with mine - minimal, keep your data local. What is different about my thing besides being very crude (EasyMDE and a few CGI programs in C served by BusyBox httpd) is the goal of using it as my new tab on devices to cut down on using tabs as bookmarks.

I see myself adopting your solution for my case or maybe extending it. What I'm missing: image support and ToC.

ThinkBeat 6 days ago

This reminds me of an earlier project posted here: https://heynote.com/

I have been using that for quite a while and I like it.

  • sadeshmukh 6 days ago

    It is a fork of Heynote.

    • ThinkBeat 5 days ago

      oh. Thank you. I stand corrected.

dcuthbertson 5 days ago

Thanks for sharing. This is an impressive tool. Well done!

Would you mind sharing a little about your workflow? 528 commits over 40 workdays seems like a lot of work that must have been well organized. I'd guess each commit is a small amount of work on a focused aspect of the program. If that's so, did you have clear goals for what you wanted to achieve, break down the work ahead of time, or plan out what you wanted to change/add?

  • kjksf 5 days ago

    As far as individual commits, you can see the scope yourself: https://github.com/kjk/edna/commits/main/

    Yes, I like to work in relatively small, but logical, commits.

    Yes, I did have clear goals in mind. I knew I wanted multiple notes, storing notes on disk, command palette, encryption etc.

    I was writing the app for myself and using it every day, which helps with motivation and knowing what to do next.

    There were also changes based on usage. For example, I've added a top nav bar but occasionally it would obscure the text so I made it hidden when typing.

    One of the uses of Edna is keeping track of what I want to do next.

    I have a note for each project, including Edna, and I keep a list of ideas there, sorted by the most important things at the top.

    That way I can jump start the day quickly by looking at that note and picking one of the items to implement.

spartanatreyu 5 days ago

This is nice, but I'm surprised you went with "P" for shortcuts since they're already taken by browsers.

Ctrl/Cmd + P = Print Ctrl/Cmd + Shift + P = New Private Window

  • kjksf 5 days ago

    Undocumented: Ctrl + K and Ctrl + O also work.

    Ctrl + K was actually the first. Ctrl + O because it's naturally "open". And you can switch to command palette with `>`, like in vs code.

    I've added Ctrl + P and made it the documented one because I also use VS Code heavily and I was tired of context switching.

    It's unfortunate that it conflicts with browser's Print but I figured that you do this often and print rarely.

    The ultimate solution, of course, is to allow customizing keybindings.

  • bjeanes 5 days ago

    Command + P worked for me in Firefox, but Command + Shift + P did not.

    Further, because I don't type in QWERTY, I noticed that _some_ shortcuts seem correctly mapped in my layout, but others are not. The Option+N shortcut for a new note just starts the "˜" combining character (expecting a following character like "n" to form "ñ") when using the "n" key in my layout. However it works if I use the physical "n" key (which is my "k").

    I feel like that explanation is pretty poor, but yeah basically some shortcuts seem bound to the physical key location whereas others seem bound to the mapped key. I wonder if they are declared differently?

    • spartanatreyu 5 days ago

      Sounds like it's using event.keyCode (deprecated) or event.code (key button number) instead of event.key (the character that the button represents).

      • kjksf 5 days ago

        I only use that for `Alt + 1` - `Alt + 9` quick access shortcuts.

        `Alt + N` for new scratch note is implemented via `Mod-n` CodeMirror keymap (keymap.js) so I'm not sure why it wouldn't work.

simplify 6 days ago

I was going to say this looks exactly like Heynote, but then saw you said you forked it. Is there a fundamental difference in vision between the two apps? Both taglines are notes "for developers", so I'm a little confused on why the separate project.

  • kjksf 6 days ago

    Heynote is a scratchpad, a single note, and has no plans to support multiple notes or really grow it beyond what it is right now.

    Which I respect but I needed at least multiple notes, bringing this much closer to apps like Obsidian, Bear etc.

    And then I added a bunch of features that I wanted to have, like UI for opening/creating/deleting nots inspired by Notational Velocity, encryption, command palette, history, Ctrl + B for navigating between blocks.

    Edna is basically a superset of Heynote: it does everything Heynote does and lots more.

    So yeah, the vision is pretty different.

bdcravens 6 days ago

> Supports Go, JSON, JavaScript, HTML, CSS and Markdown

What is required to add additional language support?

  • kjksf 6 days ago

    The above is a partial list, Edna supports about 30 langs.

    To add another one, you need to find library that implements CodeMirror mode for that language, add it to package.json and update languages.js

haxzie 5 days ago

This is pretty neat! I had built snipp.in to solve my own problems with other note taking app. It works completely offline + looks a lot like VS code for folks who love using .txt files

SuperNinKenDo 5 days ago

I clicked in here and then realised I really don't need to be looking at yet another note taking app. As I was clicking off my eyes managed to skim "I took a small break from coding SumatraPDF" which had me reopening this thread quicksmart.

Thanks so much for the high quality, light-weight, native applications you put out. You're a saint.

That said, I will not eat the bugs, and I will not live in the browser. Project isn't for me. But I just wanted to say that you always have my attention.

propeller_head 5 days ago

Math blocks are truly great. I did try converting `2 tbsp butter in grams` and nothing happened, which I half expected.

I guess a "cooking" block would go a long way - at least for me!

omerhac 5 days ago

I love the minimalistic UI and keyboard shortcuts - cool!

fayazara 5 days ago

As someone who uses heynote almost everyday, having it in the browser makes so much sense.

Heynote is ~200mb, eats a lot of ram, I think I am switching over to this.

tarasglek 5 days ago

Took me a while to realize that I can't execute JS blocks. Kind of unexpected that go works and js doesn't in JS a web app :)

  • kjksf 5 days ago

    Yeah, the reason I could add Go quickly is because I already did the hard work of figuring out how to execute Go code when I built https://tools.arslexis.io/goplayground/

    Executing JavaScript safely is actually hard. You don't want to just execute code in browser context because then an attacker could trick you to execute his JavaScript code and e.g. grab all your notes.

    So you need to sandbox it via e.g. iframe or by running using wasm-compiled quickjs

    Which is something I might do.

    Additionally I'm thinking about allowing to run a javascript function over content of a block so e.g. you could base64-encode a text block etc.

    • kjksf 5 days ago

      To expand on this even more: it would be possible to make it a lightweight web playground like codepen.io

      By convention, if a note has html block and javascript block (and optionally css block), I could consider that a small website with index.html, index.js and index.css files and provide a preview of html output.

jxy 5 days ago

This is slick. Are there plans for rendering LaTeX equations and/or diagrams/flowcharts, such as mathjax and/or mermaid.js?

  • kjksf 5 days ago

    It's a possibility but I'm not using those myself so I don't have good intuition on what is a good UI for that.

    A relatively simple thing would be to add "preview block" which e.g. for mermaid blocks would add a panel with rendered diagram.

    A much more complicated solution would be to add codemirror view which renders diagram when cursor is outside the markup and switches to editing when inside markup.

    But that's significantly more complicated.

florieger 5 days ago

Wow, i really like this, especially the Math blocks. How do I create them?

CMD + L is not working on Safari, since it will open the address bar.

  • kjksf 5 days ago

    Block type is also displayed at the bottom in the status bar. Click on that to change.

    Or: context menu (right click), Block / Change Language.

    Or: command palette, "Block: Change Language" command.

jsilence 4 days ago

If only it would support Quarto flavored Markdown, that would be awesome.

rodneyzeng 6 days ago

No support for math.js or katex

  • NoahKAndrews 5 days ago

    It has math blocks, which are powered by math.js

fud101 5 days ago

Anything good that integrates with vscode?

syngrog66 5 days ago

vi notes

(and the like.)

has worked fine since 70/80s onward. an (overly & well-) solved problem space

SoftTalker 6 days ago

I like the idea of a developer focused note environment, but I've got such deep muscle memory for emacs that any other editor is a non-starter for me.