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.
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...
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.
hey this is awesome, thanks for sharing!
quick capture experience
How would that experience look like? (I think I'm after the same thing!)
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/
To me this looks more like Unforget which was shared here a few weeks ago https://unforget.computing-den.com/demo
Silverbullet.md looks really good to me. With a few more features it might be able to replace vscode as my note taking app.
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
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?
Sounds like it's using event.keyCode (deprecated) or event.code (key button number) instead of event.key (the character that the button represents).
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.
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.
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 :)
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.
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.
Me too - I currently use https://runjs.app/ while developing but this would fit better.
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.
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.
Ctrl/Cmd + L is very useful. It also works in Windows File Explorer, Spotify Desktop, and presumably many other apps.
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!
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?
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.
Thanks for the detailed answers, I'll definitely be keeping an eye on this.
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 :)
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?
I found your blog and your diary of a solo developer building a web app [0]. Maybe the answers to my questions are there. Thanks for this, too.
[0]: https://blog.kowalczyk.info/article/30da6655040f47e693f8e66e...
Yeah, that was for a different project that I no longer work on.
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.
Supports Go, JSON, JavaScript, HTML, CSS and Markdown
What is required to add additional language support?
It's based on Monaco Editor, which is the open source base of VSCode - you can see the full list of supported languages by clicking the dropdown on the bottom right (similar to VS code: https://code.visualstudio.com/docs/languages/overview#_chang...)
Actually, it's based on CodeMirror
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
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!
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`
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.
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
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.
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.
This is slick. Are there plans for rendering LaTeX equations and/or diagrams/flowcharts, such as mathjax and/or mermaid.js?
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.
For equations and flowcharts, I would argue that the rendering is more important than the textual "code", so a "preview block" with rendered output would be very useful already.
A much better UI would be something like what you described, such as
- https://github.com/benrbray/prosemirror-math?tab=readme-ov-f...
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).
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.
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
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.
It is a fork of Heynote.
oh. Thank you. I stand corrected.
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.
Edna actually has Emacs mode which you can choose in settings.
You can see implementation: https://github.com/kjk/edna/blob/main/src/editor/emacs.js
I can't say how well it works. I just noticed that I would need to change some keybindings because they conflict with Emacs keybindings.
org-mode has entered the chat.
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.
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.
No support for math.js or katex
It has math blocks, which are powered by math.js
Glad that you led with having made SumatraPDF, I love that app and it's a big recommendation for me.
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.
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.
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.
vi notes
(and the like.)
has worked fine since 70/80s onward. an (overly & well-) solved problem space
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.
This looks a lot like Unforget https://unforget.computing-den.com/demo (which was a Show HN few weeks back) also Heynote which others have mentioned already.
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!
I love the minimalistic UI and keyboard shortcuts - cool!
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.
If only it would support Quarto flavored Markdown, that would be awesome.
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
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.
Anything good that integrates with vscode?
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.
I love this.
I didn’t realize HeyNote applied Commons Clause to their license.
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.
desktop, or offline? isn't the PWA satisfactory?
I can’t back up the data in a PWA.
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.
You can do that with Edna too.
Store notes on disk (https://edna.arslexis.io/help-win#storing-notes-on-disk) and you can auto commit the whole directory with git.
Personally I store my notes (encrypted with a password) on directory managed with OneDrive.
Edna also auto-saves files.
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.
not everyone has 24-hour online access
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).
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.
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.
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
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.
If you have git, golang and bun/nodejs on your machine it works from localhost.