Show HN: Heynote – A dedicated scratchpad for developers (heynote.com)

1063 points by jonatanheyman ↗ HN
Hey!

I made Heynote entirely for my own use case. For many years, I always had an Emacs instance running with the scratch buffer open, even long after I had abandoned Emacs as my programming editor in favor of more recent IDE:s.

The simplicity of having just one big scratch buffer appeals to me, but I still want to separate the different things I jot down somehow (without using tabs or similar). Previously, my solution was to insert a bunch of blank lines between the notes, but hitting C-A would still select the entire buffer. That's why I came up with the concept of "blocks", which turned out really well for my use cases.

I decided to release Heynote, thinking it might be useful to others.

320 comments

[ 4.8 ms ] story [ 278 ms ] thread
I'd love to get some feedback also :).

Heynote Github Repo: https://github.com/heyman/heynote

Hey! Nice app, I've always had scratch pads around for things like this and never had a particularly good solution for them. Soulver is nice but too maths focused, a tab in VSCode in nice but it's a pain to manage multiple buffers for different languages. I like the feature set here.

A few bits of feedback for potential improvements or clarifications...

- I couldn't find the shortcut to change the language until I hovered over the status bar element for it. It should have a menu item with the keyboard shortcut on it.

- Toggling light/dark mode doesn't live in the status bar in any other app I know, probably best to put it in settings.

- Doesn't respect the system light/dark mode, it should by default (but perhaps with an app specific override as some people like that).

- Check for update doesn't live in the status bar either in any other app I've used, this could be in settings.

- If there's not enough stuff to put in a status bar, maybe drop the status bar? It feels like things have been scraped together to justify having it.

- The green branding is ok, but it's quite a strong personality for an app to have. Do you want the app to have a strong personality? (Nothing else about it suggests so). Perhaps consider a more neutral palette that fits in with macOS more, or perhaps several choices for accent colour including a neutral option.

- 427MB is huge. Thankfully it's not particularly memory hungry at least with small documents, but damn that's a big bundle for what it is. Why is it bundling ffmpeg? Does it really need GLES? Is a base Electron framework really >300MB?

- Options for a keymap, but after deleting the initial content I've lost the actual keymap! Would be great to have a help reference in the app, or at least a docs page on the website that the help menu links to.

- Would be great to be able to change the font.

- I don't understand the saving model. Where is the data saved? Can I control this? Is saving necessary? If not, how often is the data persisted? Can I put it in cloud storage so it syncs across machines, or if it does this already, can I opt-out of that?

- Not personally a fan of putting the name of the app in the icon. Most apps don't, I'd suggest something more subtle.

I agree re the app icon - it would look great and still unique by simply removing the name.
> I couldn't find the shortcut to change the language until I hovered over the status bar element for it. It should have a menu item with the keyboard shortcut on it.

Noted. Will fix!

> Doesn't respect the system light/dark mode, it should by default (but perhaps with an app specific override as some people like that)

The light/dark toggle has three states. Light/Dark/Whatever the system is set to (default). If it's set to the third mode, it should respect the system mode. Otherwise it's a bug!

> The green branding is ok, but it's quite a strong personality for an app to have. Do you want the app to have a strong personality?

I do like the design (though I'm sure it could be improved ofcourse).

> - 427MB is huge

Yes, unfortunately that comes with Electron.

> Would be great to have a help reference in the app, or at least a docs page on the website that the help menu links to.

Yeah, goo point, will fix!

> Would be great to be able to change the font.

Maybe :)

> Where is the data saved?

The whole buffer is stored in a file called buffer.txt located in the user data directory (varies depending on platform, on Mac it's ~/Library/Application Support/Heynote, on Linux ~/.config/Heynote). It's saved as soon as you edit with a small debounce.

The data location is currently not configurable, and Heynote currently doesn't support reloading changes from the disk (except on startup), so at the moment it wouldn't work well to synchronize through a file syncing service if you were running Heynote on multiple machines. This is something I'd like to fix though.

Sync between devices (windows <> mac <> iphone) is the only thing more I'd want out of this. Great work!
> The light/dark toggle has three states. Light/Dark/Whatever the system is set to (default). If it's set to the third mode, it should respect the system mode. Otherwise it's a bug!

Ah ha! That's it. I must have toggled this to forced-light inadvertently when testing. I think it could be clearer.

Thanks for the explanation of the persistence. This sounds absolutely fine for where the app is at right now, but would be great to explain it (in less detail perhaps?) somewhere. In the future, being able to set a custom path for it might be a quick way to enable hacky syncing. I realise symlinks could probably achieve this, but I think that's less discoverable.

Thanks for the reply and best of luck with the app!

Is it possible to use proportional (non-monospace) fonts? It’s not clear from the website. That would be a necessary feature for me.
This is great! One small suggestion: I'd love a shortcut to be able to insert the current date/time. Or perhaps track the time a block was created, and have an option to display that somewhere small on the UI for each block? I find it super helpful to have the date when search back through old notes like this.
Yes, I think adding the creation time and last update time of blocks is a good idea.
Auto-tracking this would be amazing. I insert timestamps very frequently.
Any chance of an arm64 build for Linux? I'm sure I could build it myself but it'd be nice if I didn't have to!
I configured the Linux builds yesterday, and I don't personally run Linux on any desktop machine, but I'll look into it!
hey! i really like this. it's a great idea and implemented neatly. my MacOS arm install is <100mb. i know some asked for tabs. i would like to be able to open multiple windows.
I just downloaded and installed and I am really impressed. I liked the concept of math blocks though it took me a few seconds to figure out how to change a new block into a math block. This note at the top wasn't clear to me:

⌘ + L Change block language

The phrase block language didn't trigger my "change the type of block" thinking. I might slightly rephrase like:

⌘ + L Change block language (Math, Markdown, etc.)

Otherwise, I think this is a great "scratches an itch" type project. Congrats!

Good suggestion, I'll change that!
It would be nice with some documentation of what the Math mode supports, e.g. syntax, units, functions.

It can be difficult to figure out why some lines are interpreted ok and while others fail.

How to convert between fahrenheit and celsius?

Yes, I've learned that Heynote is lacking some documentation. Will improve that.

Math.js (https://mathjs.org/) powers the Math blocks, so what's supported by Math.js should be supported by Heynote, with the addition of currency conversions (exchange rates are updated daily).

> How to convert between fahrenheit and celsius?

This should work:

  10 celsius to fahrenheit
Could it be made to parse "10°C" as "10 celsius" as that is much shorter?

Suggestion: mouse over on green calculated value should show value in multiple formats. E.g. "time = 4000 seconds" could show "01:06:40"

also: "today + 4 days" or "now + 1 day"

Unicode "π" should parse like "PI".

All blocks should be collapsable - I was playing with it and had to enter a comment marker in some to be able to get the collapse arrow in the bar, like # in a python block, however the behavior for a python block collapsing vs another - is that the python block collapses to ' ... ' Whereas, other blocks maintain the firt row as a header, so if I label another block NOTES and collapse it, I can still see the header.

So a collapse button on every block would be nice.

I love this. Thank you.

I agree! This would (will hopefully) be an improvement.
Maybe a block header which includes the timestamp for block birth and whatever text on that line for the title. So row 0 of every block would be the block meta header? no feature creep I promise...

Oh! and one more thing....

https://i.imgur.com/UZwOhIZ.png

"Change block type" makes more sense then "Change block language". "Language" sounds like it could mean English, French, etc. whereas "block type" is unambiguous.
I was bummed since it uses the entry point DiscardVirtualMemory and for some reason it won't work on Windows 7 (Yea, I'm still using W7 for "Work Reasons")
Out of curiosity, what use case can possibly warrant using Windows 7 in 2023?
Very old PLC controllers in a mfg plant. You would be wildly (de)(im)pressed with the amount of equipment that is tied to W7 because of dongles, etc.
The usual reason is business-critical software that only runs on Windows 7.

Source: I've worked for multiple companies with very niche software that only works on certain OSes.

Absolutely love it! I've been looking for such a tool for a long time. Just a looooong text file when I can write my snippets. I like UI, icon and even the name :) One suggestion - make it collapsable.
(comment deleted)
Thanks :)!

Do you mean that the blocks should be collapsable? If so, blocks should be collapsable by clicking the small arrow to the right of the first line number. For some reason it seems that Markdown blocks aren't collapsable though - I'm going to investigate why.

Cool, been looking for new tools to help collect the mess that is my notes.

Nice and simple, as a tool like this should be.

A few questions after playing for a few minutes:

* Where are the notes stored?

* Can I delete a block easily?

* After creating an additional cursor (great extra feature btw) how do I stop creating them, and/or remove one I've created?

Answered my own question on the additional cursor, Esc takes you back to a single cursor.

Great way to make a list. Start with a number, make your list, then use the additional cursor to add in a checkbox.

> Where are the notes stored?

The whole buffer is stored in a file called buffer.txt located in the user data directory (varies depending on platform, on Mac it's ~/Library/Application Support/Heynote, on Linux ~/.config/Heynote).

> Can I delete a block easily?

I do that by pressing: C-A Backspace Backspace.

> After creating an additional cursor (great extra feature btw) how do I stop creating them, and/or remove one I've created?

Pressing ESC (or C-G in Emacs mode) should remove all extra cursors.

So I can use grep and pbcopy to interact with this on the CLI. Too cool! Thank you for a great app.
The buffer file has a syntax for the block separators, but it's human readable. Here's what it looks like:

  ∞∞∞text
  content of note 1
  ∞∞∞text-a
  note 2
  -a denotes that the block language is in autodetect mode and 
 might change
  ∞∞∞css
  .some-class {
etc...
Downloading now! I'm already excited! There's a couple of similar apps but they are 99% mac-only. Thanks for making a cross-platform one!
I really like the simplicity of it. I'm just not sure if I'd use it.
Haven't gotten a chance to try yet but thank you for having an icon that actually looks unique. My dock is filled with purplish blue circles and squares and I have no idea which app any of them are for anymore.
Kinda crazy that it took this long to get a Note++ equivalent (or similar) for macOS! Until now I've been using Sublime for all my quick dev-related scratch notes. This should make things way way better!!
Do you mean Notepad++? If so, that strikes me funny, because I've long thought of Notepad++ as a Windows thing that's kind of similar to BBEdit[1], which is a 25 year-old Mac editor.

If not, what are you thinking of?

[1](https://www.barebones.com/products/bbedit/index.html)

D'oh, yes, I do mean Notepad++. I haven't used Windows in a while

But good point, I totally forgot about BBEdit

This is great. I always resort to textedit for this stuff, i am going to use heynote instead and see how it goes.

love seeing stuff like this on HN like the good old days.

Any plans to add vi keybindings support by any chance?

(comment deleted)
yes, this is cool, but without vi keybindings it's not very practical for me

now I wonder if I can get or write a vim plugin to do something similar... that would also have the advantage of being in a terminal so it can live in a persistent tmux session and be accessible remotely...

This is where my mind went too -- currently I use VimWiki for this and it can be pretty nasty. Just a little bit of sugar could go a long way.
2nd this, would be great with vi/vim bindings
This is cool. I was recently looking for something to use for quick notes. This should serve my use case
Will definitely try this±
Nitpicks:

* On Linux, clicking the main "Download / Linux AppImage" button results in Windows .exe download instead of an .appimage. Clicking on the down arrow and selecting Linux does work, however.

* The opening sentence of the description includes "it's" instead of the more correct "its".

The link has been fixed. Thanks!

And thanks for the grammar correction - I always keep doing that error (it's instead of its).

> "it's" instead of the more correct "its".

"It's" = Contraction of "it is"

"Its" = possessive (but the origin long ago was also a contraction, that is a grammatical rabbit hole)

So "its" here is not just *more correct*, it is *correct*. The use of the contraction here is not *less correct*, it is *incorrect*. --Cheers!

It would be perfect that you add this on brew because most corporate mac users have no permission to download these type dmg except brew
Interesting! Do you know of any other Electron apps that can be installed via Brew?
I think he’s referring to a managed/corporate provided Mac machine.
yes absolutely talking about that.
There are lots of them. You should checkout “brew cask”
Postman, mattermost, 1Password most of it can be installed by brew and they using electron
I’ve never not had permissions to download a dmg; I wouldn’t say most Mac developers…
"most"? I'd say that's actually an extremely weird and rare restriction.
Not sure about "most," but I have this exact restriction at work. I don't think it's extremely rare.
Yes. There are lots of us on enterprise controlled systems and can only install apps with homebrew.
I love this! I typically use a separate text editor for things like this, but the block idea is great and works with how my brain likes to group things.

I know this is expanding the scope and complexity and probably opposite to what you're trying to do, but one thing that would be cool is to have different tabs. In my current workflow, I have a notepad for "working memory" which Heynote will easily replace. I also have a separate one to track the things I worked on each day. I need to have a record of who I charged for what incase I get audited. I could totally see having a block for each day - and I wouldn't want that intermingled with the other data.

Oh I would love it if you could render markdown as formatted html a la Typora

Yeah, at the moment I'm hesitant to add tab support (for the reasons that you stated), though I've definitely thought about it.
Right - not sure tabs is the right metaphor. I definitely want the ability to keep some blocks around, put them aside, return to them later...

Maybe a block 'tagging' mechanism? Let me 'stash' a block and label it with tags... then later on I can 'restore' stashed blocks by searching for tags. Or open a new window easily containing every block that shares a particular tag?

Probably better not to. From my experience tabs (in the long run) are more annoying than helpful. Take vscode: I use the "open editors" menu, because tabs work just up to 3 of them. Then they either not fit (scroll-x), have titles far too short to be identifiable or take half the screen when using tab wrapping.

I haven't used heynote yet (in a train rn), so you may've that already in place, but:

I suggest implementing bookmarks with fuzzy search. Press ctrl+b a prompt comes up, type the thing, press enter and get your file scrolled to that section (markdown title)

Love this idea. Almost like a vscode "go to definition" functionality. Pair that with a "go back to previous location" feature and you can get a surprisingly nice and flexible workflow.
Perhaps you could consider documenting/specifying the file format. Seems to me that this could potentially become some kind of standard (if you're open to that). Perhaps with a .mixt extension (for "mixed text")?

Seems to me that this would be a pretty good general document format for a lot of use cases.

I think tabs could be interesting if coupled with a way to filter the list of blocks (ex: I only want to see math blocks, or only blocks containing the #daily tag, or only blocks from this month).

Then each tab would be an opportunity to apply a new set of filter on top of the same document.

Maybe try Obsidian for the second use case?
(comment deleted)
Great work, I like this a lot. Some feedback:

- It would be great to have the options of having tabs so that I could group my notes into a Math specific tab, or raw notes, code, etc.

- Another option to the above tabs would be to sort the blocks by type (grouping all the Math at the top for example).

- Having the ability to then save each block into a separate file.

Great work! I´ve been looking for something like this for quite a time!

C# syntax support would be welcomed.

This is super cool, nice work! I've just used apple notes for this in the past when on my mac, but this is way nicer.
I use Apple Notes for this. It doesn’t do the calculations, or the syntax highlight. But, it mostly just revives whatever I paste into it, and allows me to copy it to wherever when needed. Including images(screenshots), text with links etc.

The side benefit from using Apple Notes is that it is constantly and reliably syncing to my phone. So, I can always refer to stuff on the go.

I've recently started migrating from using Sublime Text to Notes for these scenarios too. I downloaded Heynote and am struggling to understand how/where it's better than either of those apps. Clearly I'm missing something, based on the other comments here.
This is so neat. Good work! I've tried Obsidian, Notion, Typora, and a myriad of other local editors only to come back to vim every time.

My ideal text editor is one that has syntax highlighting, scratchpad, markdown support, block based editing, ability to link between documents and vim keybindings. No cloud login, AI assistant, cross-device sync, or other bloat.

I try to avoid using electron apps for lightweight tasks, but Heynote looks like its worth a try.

Hey there!

Maybe you'll like my next note-taking app[1]. It has a block editor based on Qt C++ so it's very performant. It supports Markdown out of the box, will have advanced media support like Kanban, images, columns, etc.

[1] https://www.get-plume.com/

Approximately when will it come out?
In about seven weeks. Sign up to the wait list, and you'll get an email when it's ready.
If you were an evernote fan, try Upnote as a replacement.
Finally I can ditch Sublime text as a scratch pad. This is simpler to use. Good work!