Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Heynote – A dedicated scratchpad for developers (heynote.com)
1063 points by jonatanheyman on Dec 22, 2023 | hide | past | favorite | 303 comments
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.




This is just outstanding. It's so exactly what I wish for out of a scratch pad.

My feature request to add to your pile (possibly a lonely one, since maybe it's just unique to how my brain works):

I really want a scratch pad like this to have UX that supports "inverted" order. Meaning, new blocks get added to the top of the page instead of the bottom. The blocks naturally flow in descending order of creation rather than ascending. The scratch pad always opens at the top of the page. Over time, blocks thus end up "decaying" toward the bottom, with the most relevant at the top.

It just fits better with how my brain works.

I also +1 the sentiment given elsewhere in this thread to bias toward ignoring the vast majority of these feature requests and preserve the simplicitly of what you've built. That includes mine!


Happy you like it :).

I get the idea of the "inverted order". I wonder if it would be enough to make it configurable so that C-Enter inserts a new block before the current one + Heynote sets the cursor at the beginning of the buffer at startup (instead of last which is the current behavior)?


Another option might be to have the default scroll position at the bottom, to act more like a terminal or chat app. Scroll up to see the history, rather than scrolling down to see the latest.

(Sorry if this is how it already works, I’m on my phone right now, so I can’t download it, but I’m very interested in the block idea. I like that concept a lot for a scratch pad. I’m definitely saving this for later.)


Yeah I was thinking similar. And/or a separate shortcut key that opens a new block at the very top of the page (regardless of where the current cursor is positioned).


Your app is awesome, it's just so satisfying to use. Really fantastic job!

My two cents on block insertion: Personally, I would love if Cmd+Enter inserts a new block at the very top

For inserting a new block in sequence, I feel like Cmd+Shift+Enter (splitting the current block) might already be enough - but I obviously haven't used heynote for long enough to have a very informed opinion on this :)

Maybe there's some way to make the behavior configurable?


Having an option to set either behaviour the default would be a better choice here.


That would be plenty for me!


I also like this. But I don't like the distraction of seeing all the blocks below my cursor move every time I make a new line.

The perfect UX would be to add a new buffer at the top, but with enough padding to fill the window so that you can't see the movement of previous blocks while you're typing.

(Maybe this is already kinda how it works - I haven't downloaded the app yet, but I'm excited to try it, because it looks great!)


I wrote a small Ruby TUI which works like this called Rodo (Ruby Todos). Pressing CTRL+t will get you a new Todo list (it's just markdown) at the top of a file.

https://github.com/coezbek/rodo


>I don't like the distraction of seeing all the blocks below my cursor move every time I make a new line.

Uhm... They don't move. They stay the same distance, relative to your line. As you add more lines, they'll disappear below the fold.


In a regular doc, if you start typing at the beginning, then all the lines after it move down as you type. It's just the movement I find distracting, compared to appending to a doc with no space below where I'm inserting text. I'd rather feel like I'm typing into empty space rather than up against a wall.


I agree that this addition would be very helpful as it is already how I take notes in a markdown document.


I made a notes app that's kind of like that. Notes get added to the top and when you edit a note it gets "bumped" to the top again: https://thinktype.app/


TIL using the .app TLD makes your website categorically an app


A web page that can run offline is typically called a web app. With some metadata it is possible to "install" them to run in ui chrome less windows like a natively installed app on multiple environments.

It's not the .app domain so much as the functionality. Web apps are nicer and easily accessible imo, lower friction than an install. Not everything should need an install.


I'm not sure what you mean. This is an app that stores everything client side. It works offline. It's no different from a native app.


You're somewhat right. However, I would hesitate to call any website an app. And there certainly is a difference. For one thing I would say an app must be it's own program, even if it just uses Electron or similar.


+1. This would be great. I could then use this for daily logging as well.


please do this inverted order


I would probably pay for this if:

- vi bindings

- show me where the file is so I can move it around, sync it across machines, back it up, etc.

- the inverse order stuff

It's really really good. thank you.


This looks awesome! I love the blocks idea. I’m gonna download and give it a try.

I see lots of comments about Electron (per usual here haha) and I just thought I’d shout out Tauri if you hadn’t run across it. It’s basically Electron-but-in-Rust and uses the system webview instead of Chromium, so bundle size and memory usage is reduced a bunch.

I took a look at the code and it looks like you haven’t got a ton of Electron-side code so if you felt like playing with Rust it might not be too hard to swap. I have a video editing app that I started building with Electron and then switched to Tauri midway and it’s been pretty nice.

I hope it’s clear this isn’t a request and please feel free to disregard this comment entirely :)


Yeah, I looked at Tauri in the beginning of the project. What made me go with Electron was the maturity and large user base. And it has actually been a bliss to work with Electron (my expectations after having worked with other cross-platform tools for mobile were extremely low), so I haven't regretted my choice. I've dealt with very few bugs. I love that there is a large ecosystem, and that it was easy to automate building (as well as auto-updating) for multiple platforms.


That makes a lot of sense. I miss a bit of that from Electron. Its auto-updater is nicer, and while I haven't had a ton of cross-browser issues there've been a couple that I had to fix with transpiling or avoiding some newer CSS stuff. Shipping everything with one browser engine lends a lot toward peace of mind.

I wish there was a way to build a stripped-down Electron, like a configurator where you could uncheck things you don't need. Printing support? WebGPU? WebRTC? Video playback? PDF reader? Straight to jail. It would be lovely. I'd love to see what would happen to the bundle size.


My issue with Tauri is that it used WebKitGtk2 on Linux. Which is pretty poor from a performance perspective and missing feature support compared to WebKit on MacOS or Webview2 on Windows.


I read that the Rust part was unergonomic. Do you find Tauri productive?


Yeah, it works pretty well for me. Rust definitely took some getting used to (I was new to it when I started).

There's a lot of functionality you can access from JS without needing to get into Rust, but on the Rust side Tauri has this notion of "commands" for calling Rust from the UI.

You can write a Rust function and annotate it with #[tauri::command], and register it, and then you can call it from the JS side with invoke('your_command_name', args). Those commands can be async too, so you can do blocking work on the Rust side and the UI won't freeze.

You can inject State variables into those commands, which get injected at call time and are effectively global to the Rust side. I would say the State stuff is a bit unergonomic in that you run up against needing to share them between threads, so everything inside them needs to be Arc<Mutex<>> and writing those wrappers was boilerplatey.

I wish the JS <-> Rust calling overhead were lower. It serializes everything to JSON and back, so I try to avoid too many calls, and try to avoid sending lots of data between them.


I love this! Simple and solid execution. I've been wanting to build something similar for some time now, might fork and play around with it. Thank you for open sourcing it!

I've started using Obsidian with a new note for each day and separating "blocks" with a Markdown horizontal rule (`---`) to achieve something similar, but this is much cleaner.

The strength of such an approach is making capture extremely easy -- new block, start writing, no thinking about where this goes and how to fit it into pre-existing structure. I find that if I'm trying to do that, then by the time I find where my idea goes, I've lost the idea.

The downside, of course, is finding things again. The ability to tag or title a block and search by tag or title would be great. More ambitiously, it would be cool to experiment with incorporating LLMs and embeddings to automatically tag, summarize, categorize, cluster etc. your blocks.

There's a lot of different directions one could take this, but I'll echo the sentiment of others to refrain from adding too many features and losing the original appeal of simplicity. :)

Also: How do you handle performance when the buffer gets very large?


It's not open source, as it uses the Commons Clause which severely limits what can be done with it (the name is misleading).


As far as a quick google search got me, it seems pretty open with the only caveat being you can't sell or monetize it... how is that not open source?


If you put any restrictions on usage or what can be done with it (like selling), then it's absolutely not open source.

open source doesn't mean source code is there. open source has a specific definition. There is a list of acceptable open source licenses, as defined by OSI. similarly there is a list of acceptable free software licenses, as defined by FSF. Broadly, the two lists are the same. Commons Clause is definitely not open source.


Not sure why you're being downvoted. Even the Commons Clause itself is clear about it:

https://commonsclause.com/#faq

> Is this “Open Source”?

> No.


There exists a niche of commercial software developers who are actively attempting to water down the commonly accepted meaning of "open source" for their own gain, and I suspect they are voting you down. :(


I didn't put too much consideration into picking a license. If someone has compelling arguments for why I should license it differently, I would absolutely consider it.


If you want to make commercial profit unlikely but encourage contributions and widespread use, GPL would probably work better than Commons Clause.


Performance is mostly handled by CodeMirror (https://codemirror.net/), the underlying editor that Heynote is built upon. It seems to handle quite large buffers well. Where I have seen some minor performance issues is when working with very large blocks in certain language modes.


I use Obsidian for my programming notes, troubleshooting logs, thinking on “paper”, writing and checking assumptions. It’s very powerful and quite performant. AMA.


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!


"Change block type" makes more sense then "Change block language". "Language" sounds like it could mean English, French, etc. whereas "block type" is unambiguous.


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


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".


You can do that (and lots more) with Fend: https://github.com/printfn/fend/


Love this. This is exactly what I need. I have been using a WhatsApp group with just me, for this purpose, until now.

Feature requests: - arch package

- would really like the results of the math to be in buffer.txt and in Ctrl+a and copy.

- changing font and color theme(I like the Nord one right now though!) Please keep it minimally colored as it is now so that changing color is just a simple matter of configuring a handful of colors as opposed to custom css. That would make it too complicated.

- support for images and media in markdown blocks would be nice to whatever extent possible. I would love it if you could copy the way vscode markdown works. Ctrl+v an image in the editor and it inserts the markdown for it and saves the image to a file. Markdown preview would be nice but I understand if you think that's out of scope.

- timestamp for blocks. especially would be nice if you could store createdAt updatedAt in the line with the infinity symbols in buffer.txt to make it easily extractable using grep and cut.

- saw that you mentioned downthread that you're working on reloading the file so that we can back it up with git or whatever. Would love that!

- is mobile possible? Through Cordova or something

Thanks for making this!


> would really like the results of the math to be in buffer.txt and in Ctrl+a and copy.

Adding the results to lines that are copied from Math blocks should be doable, and I like that idea! I agree that it would also be nice with the results in buffer.txt, but because of implementation details it's harder to implement I think.

> changing font and color theme

At the moment, I'm leaning towards keeping the number of configurable settings down and not add have font color theme settings.

> timestamp for blocks. especially would be nice if you could store createdAt updatedAt in the line with the infinity symbols in buffer.txt to make it easily extractable using grep and cut.

yes, this is on the TODO

> saw that you mentioned downthread that you're working on reloading the file so that we can back it up with git or whatever. Would love that!

Yes, this too :)

> is mobile possible? Through Cordova or something

Probably not :/


Changing the font is accessibility, not customization. I downloaded the app, opened it up, and the font was too small for it to be practical for me to use. I know it doesn't take much to fix, because I did a Ctrl-Shift-I, changed the font from 12px to 18px, and problem solved. It's not something I'm going to do over and over.


cmd + (or whatever the equivalent is for your platform) seems to permanently increase the font size.


Tried it, but it didn't work for me.


Yeah, it's not really usable without being able to configure a reasonable font.


For now, go to devtools and save a chrome snippet with document.querySelector(.cm-scroller).style.fontFamily = "whatever"; hit save.

Then everytime you open, Ctrl+shift+i, Ctrl+o, enter, Ctrl+enter incantation will run it.

Emacs style, if I may ;)


> At the moment, I'm leaning towards keeping the number of configurable settings down and not add have font color theme settings.

Alright, if you ever lean the other way a tad bit, please allow configuration of fonts, I can try to contribute that feature next week. I don't mind fixed colors nearly as much.

>> is mobile possible? Through Cordova or something

> Probably not :/

Understandable. Check my comment (sibling to my parent comment) for a suggestion for the PWA you mentioned though!


Adding to it:

Saw you mentioned below that you were planning to add a pwa + local storage version. In that case you can disregard my mobile request, and replace it with a download button on mobile so we can sync it to our desktop through git or drive or something.


Font and color could be implemented by letting us add some CSS to the html page (as it is made using Electron).

This would enable using fancy CSS for some notes.


This is really, really good. Just earned a permanent spot on my dock in short order.

One request (which I would happily pay for): make it so that you can run the code blocks and generate an output. I routinely crack open the browser console to test out some JS and it would be great to be able to do this right alongside my other notes.


have you tried RunJS? https://runjs.app/


I haven't, thank you for sharing.


You might be able to hook into the new Deno jupyter notebook feature for this



This reminds me a lot of org-mode(https://orgmode.org/). Do you have plans to add other org-like features, like evaluating code blocks? I don't personally see myself moving away from org-mode, but it would be nice to have something to recommend to people who are reluctant to use emacs, even if it's only for a single application.


Oh, I haven't seen orgmode before, so I don't know what its features are. I'm not planning to add evaluation of code blocks (apart from Math blocks that is) due to the complexity it would add.


I'm very surprised you haven't heard of org mode - your product is essentially a reimplementation.


This is so much like org mode (or rather, a small subset of org mode) its fascinating and cool to me you had never even heard of it! Great minds...

Make sure to also look at org roam, it is more specifically why I won't personally have a need for Heynote any time soon, but it could maybe be inspiring for you going forward.

https://www.orgroam.com/


> Oh, I haven't seen orgmode before, so I don't know what its features are.

Essentially, it’s an environment for writing+outlining+task tracking+time management. It’s incredibly useful — you should definitely try it since you’ve used Emacs.


Just like emacs itself, it's hard to describe what org-mode is, since it has so many features, most of which any individual probably won't use or even know about. You didn't mention tables, hyperlinks, tagging, exporting documents...

See the manual's table of contents: https://orgmode.org/org.html


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?


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


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 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.


> 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!


Sync between devices (windows <> mac <> iphone) is the only thing more I'd want out of this. Great work!


I agree re the app icon - it would look great and still unique by simply removing the name.


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.


Is it possible to use proportional (non-monospace) fonts? It’s not clear from the website. That would be a necessary feature for me.


It's not possible at the moment.


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.


Hey congrats, this looks great for macOS! Trying it now!

With a similar mindset and an Emacs background, I wanted a scratch-like experience on iOS, so I built one https://xenodium.com/scratch-a-minimal-scratch-area. Seems to work for others too https://irreal.org/blog/?p=11202

While there's a new built-in iOS journaling app, I'm building one to save to plain text (and no lock-in). https://xenodium.com/an-ios-journaling-app-powered-by-org-pl...


Very nice. Although nowadays I just Signal's note to self.


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.


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.


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?


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?


The calculations alongside the notes remind me of the "dynamic annotations" in Ink and Switch's "Potluck" [0] demo. I wish there were more examples of this in note taking applications - this sort of progressive enhancement from unstructured notes to structured data is useful.

[0]: https://www.inkandswitch.com/potluck/


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.


Initial thoughts:

1. It looks beautiful and useful. Very nice work! 2. I love the math sections. 3. I was shocked how large the download was. 4. It's chewing enough memory between the GUI and the (3!) helper processes that I will probably continue to use BBEdit for this kind of thing.

I think it will be useful to a lot of people... I like it and could see myself using it sometimes even if it feels too heavy to keep it running all the time.


Yeah, large file sizes and some RAM overhead is a drawback that comes with Electron apps.

However, it would never have been possible for me to make Heynote for all of Mac, Windows and Linux, on my spare time and within a reasonable timeframe, without Electron.

Also, the CPU usage overhead for Heynote is minimal. It's one of the apps I use the most, and it's never among the programs that have used the most CPU. Yes, 200+ MB of RAM seems quite excessive in theory, but in practice it's less than 1% of the total RAM memory of my laptop (24 GB).


> However, it would never have been possible for me to make Heynote for all of Mac, Windows and Linux, on my spare time and within a reasonable timeframe, without Electron.

I'm confused - browsers already do this for you - From what I can tell you aren't using any specific APIs necessitating electron?

You also could easily have a live demo since it's a client side app.

> Yes, 200+ MB of RAM seems quite excessive in theory, but in practice it's less than 1% of the total RAM memory of my laptop (24 GB).

You should consider that people would be adding this to their workflow. So it's not not 200MB/Total RAM but instead it's 200MB/Remaining memory

Mine has 32GB Total total but less then 2GB free (and the only reason it's free is because it was swapped), which would make this ~10% of my free memory. This means when I run webpack or other things like that it swaps even worse.


This feels like one of those situations where a PWA with local storage might be a winning play. Since it doesn't actually need filesystem access or some of the other integrations electron provides. In my case, at least, I do pretty well always have at least one chromium-type browser running, so that would cross off the download objection (which was mild) and the RAM overhead (which was more serious, today at least).


Consider Tauri[1] as well. It uses the native WebViews on the various platforms instead of bundling Chromium.

FWIW, we also have an Electron app, in part because the integration with native APIs (which we use) is fairly full-featured with Electron. But if I was greenfield starting an app today I'd probably try Tauri. For your app it looks like you're not trying to do too much outside the WebView so might be worth checking out.

[1] https://tauri.app/


Could it have been a PWA? I have seen some progressive web apps give an option to install as an app when you open them in your browser. Have thought about making a PWA for my kid which I could then install on my phone.


I have a total of 4 GB ram on my laptop. Background programs consume about 2 gb and windows around 1.5. Thay leaves me with around 500 MB free.


a web app (PWA) would be perfect :)


Yeah, I've entertained the thought of adding a web version of Heynote to heynote.com (using local storage for persistence).


You might consider Flutter for desktop apps next time, as they are compiled to machine code and won't be nearly as heavy as Electron, plus you get automatic mobile and web support.


My experience with apps built with Flutter is bad. Appflowy, for example, has extremely poor performance. Both in terms of loading large files and RAM usage. See my performance comparison of block editors[1].

I've built a block editor using Qt C++ and QML that is vastly more performant[2].

[1] https://imgur.com/ZL5QCS0

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


Interesting, how old is that Appflowy build? I know Flutter got quite fast recently due to them changing their renderer from Skia to Impeller.


The latest version of Appflowy (currently v0.3.9.1). Maybe it's Appflowy implementation.


I recall that the app Rows had their desktop version written in Flutter and it was extremely fast, able to render billions of rows as a spreadsheet, so I don't think it's a framework limitation but it is likely that Appflowy is not very well implemented.


Well, I'm yet to see a fast block editor implemented in Flutter (with proper RAM use as well). Another one is Super Editor[1] which is the editor from the Superlist app[2]. I didn't properly test it cause there are no builds. But the web version[3] hangs when I try to paste the text of War and Peace. I would like to test it properly one day.

[1] https://github.com/superlistapp/super_editor

[2] https://www.superlist.com/

[3] https://editor.superlist.com/


I was expecting to not like this, but it's actually pretty cool. I love how simple it is and that it's not trying to replace everything.

I used to use the scratch buffer in Emacs all the time, and it is something I missed from emacs. I go between using Obsidian and Trillium for notes, but I'm going to try using Heynote for a scratchpad / quick notes type of thing and copy things from it if it's worth saving.

Maybe a feature request would be the ability to export a block? I wouldn't want it to be complicated so maybe just something like "Export block to command" and then the command could be a customizable curl command or some other command that copies stdin to another app.


I absolutely fucking love this concept, this is basically my Sublime Text but with steroids, everyone using Notion, Obsidian and such apps and here I am with a +10000 lines of plain text where I dump everything and I am more than happy, and this concept only makes it better, it's how I prefer to organize myself but now I can make blocks of it and format it, I love it, really.

This blocks thing reminds me of Toad for SQL which I used extensively years ago, where you could execute queries based on the position of the cursor, great feature.

Any plans to change font and such things? Any general roadmap?


I'm happy you like it :).

There's a roadmap in my head and some tickets in my private Trello, but I should probably create Github issues for those.

There are a couple of main things that I want to add (file syncing support, timestamp metadata to blocks) and some general improvements. However I want to keep its simplicity, and I currently see Heynote as kind of complete when it comes to new concepts. Currently, I don't think I'm going to add tabs, and I'm not planning to make it into a "real" editor by adding the ability to open and save files.


I love the idea of this after playing with it for a few minutes. My main gripe is that the font size is way too small for my old-man eyes, and it doesn't seem to remember or restore the previous zoom-level when launching (meaning I need to re-zoom-in every time). If it were possible to set a larger font-size or if the previous zoom level was saved and restored on each launch that would be a greatly welcome addition to what seems like a super useful tool.


It's not just the font size but also the choice of font, with no way to specify a font that is readable.


Restoring the zoom level on restart is a good idea. Thanks for the suggestion!


You can zoom in with [Ctrl][Shift][+], and zoom out by [Ctrl][-].


Nice work, I like the simplicity, math blocks, and mixed syntax highlighting. My workflow for the past few years has been within all my sublime projects to have a gitignored folder named scratchpad with mixed files for this exact use case. It's annoying having to create separate tiny files if i want syntax highlighting though for a mixed bag of stuff. I would LOVE this exact app as a sublime plugin on a per project basis that created a .scratchpad file i could gitignore with this same feature set. I haven't ever gone deep on capabilities/limitations of sublime text plugins and if this would even be feasible. I definitely would want this ability for different blocks but on a per project basis or I can see the scrolling easily getting out of hand.

This project definitely hits on one of those things just about every dev probably has a slightly different approach to and nobody has really targeted a solution towards so kudos on that.


Why gitignore? Wouldn't you lose all your notes if your computer died or similar?


Congrats! I really like this. I use Boop on Mac now for my "scratchpad", but the separate blocks here is really ideal for me - the one thing that was a problem for me with Boop is that it was a single buffer and all the helpful commands (not solely stuff like formatting but helpful things like "decode JWT) ran against the whole buffer. Great work!


Looks great. Quick question. When I started it up, Little Snitch immediately told me it made a connection to GitHub and currencies.heynote.com.

Why does a scratch pad need to phone home?


Probably Github for autoupdate and currencies for current currency rates


Correct.

For the paranoid it should be simple to fork Heynote and disable currencies and auto updates.


I don't like software that connects to internet for no good reason.

I don't want your app to check for updates, I'll decide if and when I'd like to update it.

It also sucks that you haven't provided an option to disable update checks.

Since I am on linux and your app is distributed as an .AppImage - the binary gets random name on each run, so I can't set a permanent network rule to forbid it connecting to the internet - instead I get prompted every time.

Also, although blocks feature is nice - I still would like to be able to use tabs as well.

Also, I'd like to know where that info is getting stored on FileSystem: it is nice that the app saves it on the go, but I still would like to be able to work with the files directly.


> I don't like software that connects to internet for no good reason.

It makes HTTP requests to fetch current exchange rates (for currency conversion) and to check for updates.

> I don't want your app to check for updates, I'll decide if and when I'd like to update it.

It still requires user interaction to actually apply the update.

> I'd like to know where that info is getting stored on FileSystem

See https://github.com/heyman/heynote?tab=readme-ov-file#where-i...

It shouldn't be hard to fork it and disable currencies and auto updates. However, it sounds like Heynote might not be a good fit for you :).


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?


> 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...


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.


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


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.


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.


Really nice execution of a simple but compelling idea. And the presentation on the site is solid too - I get what this is immediately, and I could see how it would be useful to me. A replacement for that Sublime text window I keep around where I paste stuff to keep for later, or to examine some JSON I just grabbed from somewhere!

I do find myself wanting more features, but of course the beauty of this is how simple it is, so you definitely need to strongly resist the urge to add and add as people suggest ways to 'improve' it. Apply the old 'every feature starts with -100 points' mindset (attributable to Anders Hjelsberg, I think?).

But that said, I'm going to give you some feature requests anyway :D

The thing I feel like I most immediately want from a tool like this is something close to the common SQL notebook behavior where you can select a few lines of text and hit F5 to run just the selection. Obviously only makes sense in language blocks which have a script engine associated. But the ability to write a chunk of JS or Python or shell and instantly execute it might be powerful. Where does it run, what happens to the output, etc? All good questions. No idea.

I'd love to see markdown blocks get formatted in place (still monospaced, just some bold and italic and stuff) - probably whenever the cursor is not focused in the block... though the potential shift in line wrap that would cause might be annoying. Maybe just have an edit/display toggle on markdown blocks to flip them into formatted mode. Additionally, making markdown-formatted tables elastically align in place while editing them would be a huge quality of life boost....

... Which (since formatting markdown tables correctly amounts to the same thing) makes me think this could be an opportunity to implement a classic 'elastic tabstops' plain text mode... the fact that the tab key only increases line indent is... an interesting choice that reduces the need to indulge any tabs vs spaces discussions - though obviously it's possible to paste in text that contains tabs even if you can't type them. Coming up with something better to do with inline tabs than just 'snap to next multiple of tab width' is tricky, but I would suggest maybe enabling 'elastic tab' rules: https://nickgravgaard.com/elastic-tabstops/ - because this is a place that's meant to handle copy/pasted text and stuff natively typed in, NOT a place that is expected to open and correctly format files.


> I do find myself wanting more features, but of course the beauty of this is how simple it is, so you definitely need to strongly resist the urge to add and add as people suggest ways to 'improve' it.

Definitely! I'm happy that you preface the feature requests with this comment :).

I've thought about the possibility of some kind of evaluation of code blocks, but at the moment I'm not planning to add it. Mainly because of the questions you posed :).

Heynote currently gets most of its Markdown features (basically everything except the checkboxes) "for free" from CodeMirror's Markdown mode (https://github.com/codemirror/lang-markdown).

Regarding tab size, I realize that it's something that I'm going to have to add settings for. Up until now, me and a few friends have been the only users of Heynote, and it seems like none of us favors tabs before spaces (or at least no one has asked me to fix it).


I currently have a insane long Markdown file as brain dump. Will give it a shot. Something like an overview or minimap or a way to structure like mindmap would be nice :)


Once browser support improves, minimaps on web-powered stuff will be pretty trivial: https://developer.mozilla.org/en-US/docs/Web/CSS/element


A few suggestions: On Macos a menubar item would be nice to pop the app up. Also, expanding the Language set to include bash and a few other common languages would be ace. Finally, if you remove the canvas background or set it to the same as the app background color, it will eliminate the white flicker when you resize the app window. If I get time, I may take a look and put in a PR.


Yes, I'd like to add more languages. It's currently limited to what Lezer (https://lezer.codemirror.net/) supports . However I just found this repo (https://github.com/withfig/lezer-bash) which seems to be Lezer grammar for bash, so I can probably use that for bash syntax support.

> Finally, if you remove the canvas background or set it to the same as the app background color

Will look into that. Thanks!

> On Macos a menubar item would be nice to pop the app up

Hm, not sure what this means, sorry :)?

EDIT: Now I googled "macos menubar" and see what you mean :). I'll look into it!


Would love to see support for Swift as well!


Looks great - I've been using markdown files and a markdown editor for my dev notes.

But I tend to create a file per week, with notes about what I have to do / have done, etc. by day within the weekly file.

Having one big file for a project that lasts months (or years) would be unworkable.

I'd like to see the ability to create and open whatever files I want, rather than just saving a single pre-determined file.

Good job, though - thanks!


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


I’ve never not had permissions to download a dmg; I wouldn’t say most Mac developers…


Yes. There are lots of us on enterprise controlled systems and can only install apps with homebrew.


"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.


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 move between machines a lot and prefer an online tool; I'm self-hosting Trilium Notes https://github.com/zadam/trilium ; this looks a bit cleaner but without syncing (or server-side storage) it misses a bunch of potential use cases.


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.


This looks super nice! I have been using either a plain text file, or telegram's saved messages, or the clipboard history for basically the same purpose, and it never really occured to me that there would be such an elegant solution. Looking forward to trying this out when I get back tonight.


“Math” mode apparently depends on Math.js: https://mathjs.org

So it should support the syntax available in this Math Notepad: https://mathnotepad.com


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!


The Slack use case highlighted on the front page would be better if Slack markup was an available syntax. Slack is not really Markdown, so composing messages in Heynote won't have high fidelity.

One thing that often trips me up is that links and code formatting cannot coexist:

    [`method_name`](https://github.com/example/example/blob/main/src/foo.rs)
Would be rendered by most Markdown engines as a link with fixed-width text. Do the same thing in Slack and text will be fixed-width, but won't be a link.

There's a partial summary of the differences here: https://www.markdownguide.org/tools/slack/


Not only that. It seems that with all the millions they have, Slack devs were unable to implement the most basic bracket balancing in the link parser.

Try to send a link with a title including square brackets, and contemplate the disaster that gets interpreted from it:

   [Unmarshal(data []byte, v any)](https://github.com/golang/go/blob/go1.21.0/src/encoding/json/decode.go#L97)
(spoiler: it just thinks that the link title is "Unmarshal(data [" and somehow inserts links into the rest of the words.)


I agree with the use case, but also wonder if it’s more on Slack, Jira, etc., to try harder to adopt Markdown.


And the clouds parted, and the angels sang...

Oh my God, where has this program been my entire life? I've been hackily using a Python interpreter to do back of napkin math and trying to keep track of units etc in my head (and making frequent use of the up arrow key when I need to save a result from a previous equation). This program would have been a game changer if I'd discovered it a few months earlier before I finished my university physics course. It probably still will be next semester. I'm sincerely blown away by the automatic unit conversion. Each variable has a unit, and when I divide joules by meters I get newtons. This is fantastic and I cannot believe it is free, much less open source!

Do you have a donation link?


This is cool. I was recently looking for something to use for quick notes. This should serve my use case


This is rock solid. I keep a plaintext file with all my daily notes in it, but still find myself formatting code before/after dropping it in. The formatting feature alone is a draw here. The math part is great as well - I use a REPL all the time just to do napkin math.


"napkin math" - I'll steal that for the website. Thanks :)!


Amazing! While I come from a tech background (DevOps) I no longer work in tech (Operate my own companies - completely unrelated).

Point being: This still fits my needs perfectly well as a general scratchpad! I usually have dozens of separate text files spread around the place, this should be a good fit to replace.

Suggestions: - Make it clear that things are auto-saving - Option to save a block to file - Option to change the background color of alternating blocks; whether that's just allowing two colors - dark and light to alternate - or on an individual basis - Allow titling of blocks and some sort of table of contents - I can see this eventually having dozens that I'd like to reference and quick jump to


I prefer the simplicity of a single `notes.md` for this,always open in vim in a terminal tab.

To do the separation, I've a keybinding to insert current timestamp, and but me on a new line:

`nnoremap <leader>t :r! date "+\%F \%T"<CR>I#<space><esc>o`


Hi. Great work! I'll be giving this a try, as I always type my notes on txt files.

Any plans on adding support for tabs/multiple files? I usually have different files for different types of notes (todos, project notes, tmp file for random things, etc).


Thank you, this is very cool. It'll probably replace my current "keep a random vscode/sublime tab" method of notekeeping. Shift+Alt+Down clones the current line, but this is not indicated in the keybinds info. Since the next large version will add the feature to customize the buffer storage path, perhaps it's only a small leap from there to add save/load of different buffer files? I imagine it would already be possible at that point by changing the path and reloading or restarting the program, but a slightly more UX friendly version would be neat.


This looks really promising! I just tried it out. A few pieces of feedback!

1. It seems like the save delay is a bit too long. If you reload the page within like 1s of writing, what you just wrote disappears. Maybe make that faster and/or include a confirmation that there's unsaved changes if you try to close so you don't lose changes.

2. I was expecting some of the other languages to evaluate too (specifically JS). Maybe I missed something, but it seems like just the Math blocks are evaluable? Does it work with JS too?

Some things I love: 1. Block concept! 2. It's a scratchpad, there's no files to save. I'd love to use this as a dev journal.


> It seems like the save delay is a bit too long.

This is now fixed by making sure the buffer is flushed on reload / exit. Should be released in a beta version in a couple of minutes. Turn on the beta channel in Heynote's settings if you want to update to it right away.

2. Only Match blocks evaluate, and it's likely to stay that way.


Good for you if this is useful to you. But from my point of view this is another low effort slap it together web technology text editor, with emphasis first on a cool name branding - false promises title (coolname.tld), with barely any features and added value on top of stack it is running, almost indistinguishable from next to dozen other so called productivity apps that usually stop being supported few years after launch, and overall almost unnecessary compared to fast, reliable, extendible but hard to make software like Sublime Text that probably outlast most software like this by decades.


I thought this looked pretty cool, and downloaded. Messed around with the demo for a second and hit CMD+s to save my thing somewhere and realized this was actually literally just a simple scratchpad. This will be my daily driver!


I use org mode which was great in emacs but the plugin kinda sucks for VS code. The main feature there is the ability to fold and nest sections.

I see you have a "blocks" concept which seems roughly equivalent to a top level foldable bullet in org mode. Are blocks nestable? Otherwise what is the recommended way to organize a multi-block set of notes? Typical example for me might be tackling a larger problem/feature (top level block) and then having sub blocks/bullets for each part of the problem which are also foldable. I usually don't go more than a few levels deep but could get by with just 2 if need be.


I _really_ like it --- have you thought about a more abstract icon? Agree w/ folks elsethread that just removing the text would be a huge improvement --- perhaps have an option for displaying total number of blocks and collapsed blocks?

Where are the currency conversion ratios pulled from? I guess that requires 'net access?

Possible to add a right-click menu (say to collapse blocks and so forth)?

There seems to only be one fold point for a given block? (The markdown one for instance) --- it would be nice if the first and second line were always possible collapse/folding points.

Perhaps menu commands for collapse all/show all?


This is great and I quite enjoy it. I would love the ability to create multiple cursors from a selection (within a block of course). Intelij (and others) have a hotkey like Ctrl+G to add another cursor at the next instance of a word and Ctrl+Cmd+G to select all instances of a word. That's something I do in IDEA's scratch pads constantly but I'd like an ever-running note of what I'm doing divided into blocks.

Also it would be awesome to have some metadata on each block that is toggle-able (or just inserts as text) so I can have the current date/time added or shown.


> I would love the ability to create multiple cursors from a selection (within a block of course)

Ctrl-D (CMD-D on Mac) does this (currently not limited to the current block though, but that is something I'd like to change).

> Also it would be awesome to have some metadata on each block that is toggle-able (or just inserts as text) so I can have the current date/time added or shown.

Yeah, I've been thinking of adding timestamp (of last edit) as metadata for each block


Hahaha, had this same idea a little while back, really cool stuff: https://lol-dusky.vercel.app/


The webpage is great. loads INSTANTLY. So noticeably fast that I checked the source. Looks more or less hand-done.

Just want to give a nod and say thanks for the craft and care.

& +1 I downloaded the scratchpad. Looks useful.


I don't think I've ever seen so many positive comments. It must be Christmas.

What really amazed me was the Command-Tab icon. My brain registers what it is faster than all the other icons.


Really cool idea. I ran it on Windows and noticed the text rendering was off (incorrect/missing subpixel anti-aliasing) but at the same time I got distinct Electron vibes which threw me off: Electron does text rendering correctly and lack of subpixel rendering usually means a custom (native) gui. Is everything a canvas? If so, using text gives you accessibility plus better text rendering.

But maybe it's just the font. Is there a way to change which font is used?


This is awesome.... I'm super interested in polyglot file formats like this one. Huge congrats and I will definitely be giving it a try.

I've actually been working on my own project to combine Python+SQL+Markdwown+Rich Text into one reactive executable document. If any of you are interested here is a link: https://github.com/Zero-True/zero-true.


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.


Cool app! Reminds me of Quiver[1], which is the note-taking app I used throughout my college degree with varying amounts of success. It is also in part what inspired me to build my own note-taking app, as it opened me up to the idea that there are still a lot of unexplored modalities in the note-taking / knowledge-management space.

[1] https://yliansoft.com/


I saw the unit conversions and it immediately reminded me of Fend (https://github.com/printfn/fend). If you're looking to expand on your maths / unit conversion feature, it could be a good option. It also supports forum-style since rolling (e.g. 3d6+4), which some people could find pretty useful


This is really cool and I see myself using this a lot. I tried it out but one thing doesn't seem to work now

I was able to toggle language using `⌥ + Shift + F` once before, but that does not seem to be working anymore.


I’ve been using iA Writer for this exact purpose. A place to quickly dump text I don’t want to lose or quickly create drafts I don’t want to accidentally send.

I’m not sure whether blocks would be better than just separate files, which can be created quickly using Cmd+N.

However, the lack of syntax highlighting in iA writer has been less than ideal, so I’m definitely trying this out!


First impressions:

- resizing the window creates white borders when the content of the window hasn’t been updated yet to reflect the new window size. these are a bit jarring / look non-native.

- I try to keep electron apps to a minimum, as I’ve had only bad experiences with them so far (Discord, Warp, Unity Hub) and they take up a lot of resources.

- While writing code, it does not keep indentation when entering a closing bracket.

These are more nitpicks, but I love the concept :) Great work!


Very interesting! A few years ago I imagined something similar, with the added ability to move blocks between adjacent windows: https://twitter.com/jgthms/status/1225513837379641350


This is awesome! I currently use numpad[0] for this, but would much prefer a local app. I would love to switch but the only thing holding me back is lack of Vim support. Are there any plans to add Vim keymap in the future?

0: https://numpad.io/



Oh wow, i do exactly the same but with vim. After leaving vim for a period of flirtation with intellij i settled for vscode, well recently I am leaning towards cursor. But I always have a macvim window handy for notes and snippets. This might be a better suited tool though. Thanks!


This looks great. I currently use Sublime Text for this. Can easily see using this. Thank you for building it.


This is pretty cool. I particularly like the Math block.

One issue I noticed while doing a calculation: "belt_pitch = 5/8 in" evaluates to "0.625 in^-1". To get the behavior I expected, I had to add parenthesis around the fraction. Maybe this could be fixed by adjusting precedence rules?


Interesting. It's Math.js that is powering the Math blocks. I'll have to investigate if it can be configured.


I like the execution and minimalist UI.

It would be awesome if this was a native or Tauri / Wails app, moving away from Electron would really de-bloat the application and set it apart from say using another VScode extension etc... I already have far too many chrome instances running due to Electron.


This is amazing! One thing I'd love to see though is the ability to zoom in/out like in Sublime


On Mac, at least, ⌘ + and ⌘ - seem to change the font size.


This is fantastic, thank you for making and sharing it?

Is there any chance of Heynote supporting Clojure syntax one day?


This could be a real boon for shell snippets, I hope you'll consider adding support for them.


Please make a non-electron version. This app takes up 400mb in my applications folder on macOS.


Nice! Is the single buffer feature, non-negotiable?

I've found myself using Sublime Text in a similar manner (because it's crash-proof without saving to a named file).

I do use multiple buffers though (often ending up with too many and culling them like I do browser tabs).


I do the exact same thing. It's very handy that I don't have to save anything. I even use it for putting together longer prompts for ChatGPT.


How does syntax highlight work, or how to activate it for each block? What are the supported languages?

edit: now I get it. Suggestion, change the explanation of CTRL+L to "Change syntax highlight language for the current block"


Great tool, thanks for sharing. If you are open to suggestions, I would love to have spellcheck in it.

https://github.com/languagetool-org/languagetool


Great utility. I rely on Sublime to quickly jot down my thoughts. I will use Heynote going forward. A few suggestions:

1. Can we create multiple tabs with split view? 2. Display stats like word, character count in the status bar. 3. Export options for the notes.

Thanks


Somewhat off topic, I love your website designs. They are simple but look great with a good use of color and space. The copy is also very well done.

What do you use to design your websites (Heynote and Locust)? Are you working off a template?


It seems strange for the website to only give the Apple shortcut keys for a cross-platform app. It gives the actual keys when I run it on Linux, but I can't figure out what "Ctrl + ⌥ + Up/Down" means.

Looks quite neat though.


Oh good catch. When I added linux support yesterday, I updated the download button, but I forgot to update the Ctrl/Cmd button. Should be fixed now.

I'll also fix the "⌥" in the editor. Thanks!


"⌥" is "option" on a mac keyboard, which should usually be the alt key on linux/windows


Not alt here apparently, or super.


Finally I can ditch Sublime text as a scratch pad. This is simpler to use. Good work!


This looks great. And after reading the description I immediately thought of emacs. Only then I read this post.

Have you tried emacs org-mode with code blocks? One can even execute them. (I never tried myself)

Have you considered any other emacs-based options?


I’ve always wanted something like this but integrated into the terminal or vim. Like you could have a hotkey that sends a json object from your debug session over to this scratch pad to save for later.


If you’re on macOS:

pbpaste >> ~/Scratchfile

You can probably hook that up to Alfred or whatever to have a hotkey for 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.


I just tried it and it runs nicely. I'm sure you get this request all the time, but I'd love to have VIM key binding. I'm still using vim/neovim and I open a "temp.txt" for scratch.


...I wish this was on iPad too! Very cool to see and I'll try it on Mac.


Seconded!

Of course, then I’d want sync. This is pretty close to what I want Drafts.app to be.


Good point about sync. Probably could use iCloud Drive or Google Drive for data.


Amazing, and congrats on building it! Any plans on supporting Ruby syntax?


I love this. I currently use an app like this. Ctrl-: opens and closes. But it is just one big blob and the Cmd-a thing gets me as well. Looking forward to giving this a go.


I'll try this out! I use a Slack DM with myself to persist scratch notes. The main benefit of this is that I'd easily be able to view notes on my phone and other computers.


This is excellent

Please add a donation button to allow us to thank you for your work


Thanks!

Please send that donation to some organization that help people in greater need than me, on my behalf instead :).


Wanted to ask if it was cool with you if I created a Flatpak repo for Flathub for this? That was it can be distributed with Flatpak.


ah a fellow electron app publisher! qq - have you figured out automatic updates yet? i tried to do that in my app (https://github.com/smol-ai/GodMode) but everyone just complains about a blank white screen whenever i push an update, if they even receive it at all. feels very flimsy. what do uou recommend for update push best practice?


This is awesome. I've downloaded and added by todos to it. But then I remembered, how do I backup my notes and todos?

Can you add a feature to back up this to git?


Hey jonatanheyman, how do you render markdown? I tried to use the shortcut ⌥ + Shift + F but it doesn't look works for me.


⌘ + N to name the current note, and then a command to search notes by name, would be a great UX boost for a large volume of notes


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 love this concept, blocks with different language is great! Can drop my sublime plain text now


can we save the content into different files? Then I can split my lines into different subject


I always have a text editor open for notes and snippets like this. This sounds like a perfect replacement. Tabs would be a very nice addition.


The idea of Pages/Tabs would be useful to me. I'm a bit of a scratch-pad hoarder. I currently have 200+ notepad++ documents open.


I'd love to share this between computers (cross-platform) like I do my notes via IMAP. Is there an underlying file I can sync with?


Thank you jonatanheyman. This is absolutely brilliant and I see myself using this daily.


I've always used multiple tabbed unsaved files in notepad++ to do the same. Funny how things converge, this is very similar.


Amazing UX. I'm hopeful something like this can be done to replace the hellish experience of Jupyter notebooks.


Really well done. This will be replacing Sublime Text which I use as a scratch pad.

Please add inverted add and syncing to iCloud Drive.


Props for the default install location to be %LOCALAPPDATA% and not %APPADATA% (which ends up being AppData\Roaming...).


Seriously, nice work. If you are going to eventually offer a web version of it it would be great to be able to self-host.


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'd love a macOS menubar icon for Heynote. I currently use Evernote's Quick Note feature from its menubar app.


I'll look into it!

Not what you asked for, but slightly related: You can set a global hotkey that shows/hides Heynote.


Yes, that might be adequate, thank you. I can't quite put my finger on what I like about the menubar app, but I do click it 30 times a day. Maybe just habit now.

The hotkey is very responsive. Nice!


This is amazing, I, too will always open notes/logseq/typora/sublime text for such purposes.

Heynote is next level.


It's perfect. I've been using bbedit's scratchpad for this. This is a perfect alternative.


This is awesome. Consider fitting in as a browser extension so that when you open a new tab this comes up


Great app. Thanks for making it available.

Is there an option to rearrange blocks using drag-and-drop or a keyboard shortcut?


With the soaring popularity of Electron apps we need Electron to be distributed as a shared runtime.


so you want something akin to how the .NET Framework was included in Windows...

what about different applications requiring different Electron versions?


In such rare case, it would download the required version. Having two separate Electron versions is still better than having ten in total, for each app separately.


I see Electron has a point release approximately every two weeks.

Factor in, let's say (conservatively), 5 Electron based applications on a given system. I posit everyone of those will depend on a different Electron version.


This is great! Thank you for creating this. Would love to see unix timestamp conversion in there too


AppImage DL leads to the windows .exe


Oh, good catch! Fixed now!


This is great! Can you also add a preference menu to let users set custom fonts?


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.


awesome... I've always dreamed of a notepad that I could dump any text which includes numbers and it automatically simply made the sum of all the numbers found in the text (also averages)

maybe you could add a "Math adder/Math averager" block languages?


This is great! I've been using Caret or Sublime for note taking for years, love this.


i immediately tried e^(pi i) and is delightfully surprised that it works! not only the math supports complex numbers, it also allows functions

however, something like f(x)= sin(x)/x, f(0) returns NaN.

Are there any plans to support derivatives, integration and summation?


The Math blocks are powered by Math.js (https://mathjs.org/).


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

C# syntax support would be welcomed.


Units handling in maths blocks is awesome.

Exemple 1:

g = 9.81 m/s^2

time = 60s

Then "g*time" shows "588.6 m / s"

Exemple 2:

energy = 14 J

distance = 5m

"energy/distance" shows "2.8 N"

Wow.

EDIT: I just found out that behind the scenes it's using maths.js. This library does this natively. Input "14J/5m" into maths.js and you get "2.8 N" as output. Glad I discovered this library.


I really like the simplicity of it. I'm just not sure if I'd use it.


I like this so much!

(Now I want to add blocks in reverse chronological order to my todo app)


Note that this is not open source software. It has a nonfree license.


Will definitely try this±


Love this! You just need to add auto evaluate code and done


I kind of want my Emacs scratchpad to work like this now.


Nice but..I expected a run command on my Javascript block.


This is cool, it kind of reminds me of stashpad.com too.


This is so delightful. Thanks for creating!


Looks cool. Vim would be a great addition.


very good concept! i really would like to have this as a Web-app instead of downloading it...


I've entertained the thought of adding a web version of Heynote to heynote.com (using local storage for persistence).


great application and something i didnt ask for but needed somehow ;) Sometimes i have to quickly write something down for the reasons you stated. Then i have to open a text editor like Windows Editor or Notepad++. These are nice but they really don't have the feeling to write things down. You have somewhat of an anxiety that you'll lose that data if you forget to save it. Also there is no vim support and stuff like that. So i really liked the idea and would definitely use it if it gets vim support! Also one thing i realized is that the cursor starts at the bottom of 'the note' or whatever i should call it. It would be great too if i got the cursor position where i left it when i closed the app. Also on Windows there is a black bar on the top which should be removable i think looking at obsidian and other js apps. Whatever these are just some small things and im sure they'll get fixed soon. Thank you for the great application and i hope it succeeds!!


What's Windows Editor? Do you mean the good old Notepad? :)


yeah yeah suure Notepad of course. If Windows is set to german its "Editor" and not Notepad for some weird reason. Thanks for reminding me of that <)


This is absolutely fantastic well crafted app that I was looking for. Kudos to you(/u/jonatanheyman). The UX is all around friendly and not 10x bloated feature crapyard. Also thanks for not pumping the whole landing page with 20k emojis, something I honestly truly appreciate.

Aside: This may (or not) have issues with hey.com people.


emacs org mode… anything else needed?


emacs org mode + babel =P


looks cool.

Vim would be a great addition.


this is great and neat


great work!


This looks fantastic. I will definitely give it a spin. I've been tracking what I call "computational scratchpad" apps for a while now but haven't found one that fits my environment/workflow yet. Maybe Heynote will. Here are some others that I've looked at:

* https://soulver.app Granddad of them all, Mac-only, proprietary, expensive

* https://numi.app Mac-only, proprietary, semi-expensive. Has a Github and claims to be MIT-licensed but I don't see how you could build a working application with what's in the repo.

* https://calca.io Windows- and Mac-only, proprietary, not expensive, nice docs.

* https://notepadcalculator.com Web-based, not open source, hosted but uses local storage. You can optionally create an account to sign in and have your notes saved in plaintext on his server.

* https://github.com/bbodi/notecalc3 Web-based, open source, self-hostable. But it seems to save your document in the URL string itself, which means the URL gets updated with almost every keystroke. Worth it for quick calculations and very small notes, I guess.

* https://numpad.io Web-based, hosted, not open source. Also stores entire doc in URL, but doesn't update the URL bar the whole time you're typing.

* https://numbr.dev/ Web-based, hosted. Has a Github but is not open source and the repo does not have all the bits needed to self-host it. Stores entire doc in URL.

* https://github.com/metakirby5/codi.vim Vim/NeoVim plugin that is less like a "smart notepad" and more like Jupyter but with results printed on the right side of the screen instead of in a cell below. Supports lots of programming languages.


I would consider Emacs to be the granddad of "computational scratchpads". Being able to run a repl in a buffer, tangle code blocks in org-mode, create buffers against which to run code, etc. Plus the calculator is fire.


Great list! It looks exhaustive, you've managed to include all I have tried and a few more.

Myself I have ended up with mostly using Soulver and TextMate. TM is not really the same thing but it has nice built in text manipulation for more advanced things like "diff selection with clipboard", regex and "sorta and remove duplicates". The thing it lacks is on the scratchpad/autosaving... So I just abuse the window restoration feature and never close or save any documents but have 50 textmate windows :-)


Here's another web-based one: https://www.turo.io/


Off topic but what is the definition of scratch pad? What is it, technically?




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: