11 ms·
Show HN: Unforget, the note-taking app I always wanted: offline first, encrypted
Hi HN! I created Unforget out of years of frustration with Google Keep and the lack of alternative that met all my needs. I hope you find it useful too!
Features include:
- import from Google Keep
- offline first including search
- sync when online
- own your data and fully encrypted
- Desktop, mobile, web
- lightweight, progressive web app without Electron.js
- markdown support
- programmable with public APIs
- open source [1]
While I still use org mode for long-form notes with lots of code, Unforget has become my go-to for quickly jotting down ideas and to-do lists after migrating the thousands of notes I had on Google Keep.
In addition, I'm thrilled to announce the opening of our software agency, Computing Den [2]. We specialize in helping businesses transition from legacy software, manual workflows, and Excel spreadsheets to modern, automated systems. Please get it touch to discuss how we can help you or if you wish to join our team.
[1] https://github.com/computing-den/unforget https://github.com/computing-den/unforget
[2] https://computing-den.com https://computing-den.com
- deleted 2y ago[deleted]
- deleted 2y ago[deleted]
- realityfactchex 2y ago1. Nice. The more kinds of self-run notes apps to choose from, the better, IMO. 2. Nit - on the demo page: Priavcy --> Privacy 3. Why does one of my browsers raise the error, "Your browser does not support service workers. Please use another browser."? Can this be worked around, or is the use of service workers essential to the distinguishing characteristics of the app? Genuinely curious.
- wonger_ 2y agoAnd another small typo: GitHub falvored -> GitHub flavored
- seansh 2y agofixed, thanks!
- deleted 2y ago[deleted]
- seansh 2y agoThanks a lot. Well without the service worker it wouldn't work offline any more and that's one of the key features. I remember trying to write down some notes in Keep while traveling just to find out it sometimes doesn't work offline. I'm curious which browser are you using?
- csense 2y agoNot OP, but I get this message too. I'm using a modern Firefox (Firefox has supported service workers since 2016) so browser version isn't an issue. I don't know much about service workers. But, after some searching I found out they apparently aren't supported in private / incognito mode. I do 95%+ of my browsing in incognito mode, so this makes a lot of sense.
- deejayy 2y agoI experienced a strange thing while tried inspecting the source code: regardless of what file I opened, I always got back the contents of the index.html. See the screenshot here: http://deejayy.hu/share/paste-20240611-214248.png http://deejayy.hu/share/paste-20240611-214248.png After refreshing, it properly displayed the JS code for the SW.
- cyanydeez 2y agoPrivacy featurss in pwa odte. Preveny pwa
- realityfactchex 2y ago> I'm curious which browser are you using? Tor Browser > Well without the service worker it wouldn't work offline any more and that's one of the key features. Thanks, that definitely seems worthwhile then!
- cyanydeez 2y agoIts likrly the.privacy options that prevent storage.
- colinhb 2y agoLooks great! One thing I’d suggest (which still isn’t clear to me but interested enough to investigate later): make the note taking workflow clear… * Is this a bunch of titled markdown docs organized (conceptually) into folders/hierarchically? * Is this a bunch of untitled/title optional “cards” organized by tag? * Is this a long, markdown document, which you append to? These are similar to different mainstream and less so note taking systems, and would appreciate understanding what workflow you’ve designed and optimized around. Saying you started as a Google Keep user is helpful, buy I’ve only used other systems (Homebrew textfiles, Simplenote, obsidian, etc), and have some concepts around what Evernote and OneNote are like, so giving a couple more signposts on usage would be helpful.
- seansh 2y agoThanks for the feedback. You're right I didn't really think about the fact that you may come from a very different system with different concepts. I'll explain the workflow better in the demo notes. To answer your questions quickly, I usually keep very small notes just a few lines or todo checkboxes. One note per idea. But sometimes an idea grows over many days and that note gets much larger. There's no limit to how large a note can get. You can always set the title of the note using # which is standard markdown, or leave a blank line after the first line and it automatically becomes the title. There's no concept of tag per se but you can write #someTag and then literally search for #someTag. The search feature is just substring search over all the notes (no stemming or anything fancy).
- colinhb 2y agoThanks for the clarification, still haven’t really played with it, but take it these are the mechanics (not the workflow)… * You have a big chronologically ordered list of notes * By default, all notes are in view * You can make a title (instructions in demo), but significance of title is only internal to note (not for ordering/management) * Big list of notes is union of two disjoint sets: pinned and unpinned * Can view either all notes, pinned notes, or un-pinned notes But not sure if I have that right. FWIW appreciate some of the design decisions I’m seeing, just haven’t had time to poke around to understand.
- gregwebs 2y agoNotesNook has e2e encryption and seems to check all the same boxes? Not sure if it uses electron on desktop or not but the mobile app works well.
- seansh 2y agoyeah notesnook is really cool with lots of features but the client does seem to be electron based.
- fastball 2y agoIf it is built with web tech but is not available as a web app (only Electron), that presumably means it is using features that you can't get only using web APIs. I also build a web-tech-based note-taking app, and honestly I resisted wrapping the thing in Electron for a long time for the same reasons HNers love to hate on Electron wrappers, but honestly people like having an actual "app" (even if it is Electron) way, way more than they enjoy using a web app, in our experience. You can still access our app via web only, but almost nobody does because they like the apps much better.
- seansh 2y agoI agree, an actual app can certainly get access to more APIs and have a tighter integration with the platform. So it depends on whether you actually want a tighter integration. If you're like me and prefer the note taking app to be minimalist with no bells and whistles then a PWA would be a great fit. For example, Unforget doesn't have background sync, push notifications, reminders, etc. etc. and for my needs that's perfectly fine. > but honestly people like having an actual "app" (even if it is Electron) Do you mean because of the tighter platform integration and more features? or the fact that it is an icon on your home screen? if you mean the latter then a PWA is actually quite nice. Some non-techie people I showed this to were quite impressed and excited to find out that they could just add a website to their home screen that acts like an actual app including working offline.
- 2y ago
- achrono 2y agoNeat work and more power to you to build further. This reminded me of Joplin. What's the direction you're looking to take this in?
- seansh 2y agoThanks you. I tried Joplin too. I really like it but there were a few issues other than its being an electron app. For example, the workflow didn't seem very fast to me. For example, open the app, then at most after one tap you should start typing immediately, enter multiple todo items without going to menus or pressing any other buttons. On desktop, it should all be keyboard driven anyways. In other words, I want the UI to get out of the way. I think this is something that many note taking apps miss. As for the direction, I'd like to make it easier to migrate from other apps. There's already a Google Keep importer but there should be many more. Also, with the public APIs, I'd love to see some Emacs, vscode, vim clients/integrations :) Other than that, it pretty much covers all my needs at this point.
- tonymet 2y agoGreat work! Can you share more about the native apps? I’m looking for something native, lean and quick – similar to apple notes.
- seansh 2y agoThank you. It's a progressive web app (PWA), not a native app. I've been using it myself on an old iphone for a long time now and it's lean and quick. To install it, in safari go to share -> add to home screen. That's all!
- jackomelon 2y agoThis looks great. I'm excited to try this later! Great work!
- seansh 2y agoThanks, I'm glad you like it.
- bjord 2y agoPriavcy first!
- seansh 2y agofixed!
- twh270 2y agoLooks clean, but how are you organizing the "thousands of notes I had on Google Keep"? It looks like a single page of notes.
- seansh 2y agoYes it is a single page of notes with the pinned notes at the top which can be toggled and we have archived notes. That's all. I meant to add organizing notes into folders but after using it for a while I realized I didn't miss it. The search is very quick. I usually just write one or two phrases in the search and it will narrow down the notes to the ones that include all those phrases. Sometimes, I add tag-like text to a note e.g. #people so I can always search for it quickly. Is another form of organizing essential for you?
- twh270 2y agoUh... maybe not? I've been living with just a few folders in Outlook for some time now (Inbox[0], Archive, and Important) and can almost always find what I'm looking for. Usually with a search word/phrase, sometimes by another field. Tags could cover most of my need for taxonomy/organization. (I'm hesitant to say 'all'.) FYI I noticed a typo, "Github falvored markdown". [0] I try for 'inbox zero' but am okay with leaving things in my inbox for a few days if I'm expecting to need them soon. Sometimes I flag for followup or color-categorize.
- twh270 2y agoExperimented a few more minutes, and I have a few suggestions I think I'd like to see implemented: -- Allow regular expression search. -- Click outside the note to save. (Autosave every N seconds would be nice as well.) -- Customizable CSS. (Yes, I can do this with a local build.) -- Collapse/expand (sub)headings. I'll give it more of a test drive over the next few days.
- seansh 2y agoThanks a lot for the suggestions. Regular expression search would be cool. I was thinking to add a few color themes. But custom CSS to be honest I don't think would work well. In my experience CSS is a little fiddly especially given that the css includes some hacks to get safari on ios working properly which was a big pain. Auto save is already done, nothing you type is every lost. It's saved immediately (and synced every few seconds). There is a collapse/expand feature but not for subheadings. If you put --- at the beginning of a line followed by a blank line it'll collapse everything after that, as shown in the demo note.
- VyseofArcadia 2y agoI find "offline first" software to be interesting because it's so foreign to me. If I wanted to build an offline first application, I'd just build a traditional desktop application with Qt or GTK etc. Why did you choose to build this with a webdev stack? (Not a criticism! Use what works for you! I'm just interested in why people choose the tools they do.)
- seansh 2y agoI understand where you're coming from but in addition to offline first, having cross-platform support is also a priority. Although it's possible to run Qt/GTK apps on win, linux, mac, ios, and android, it still misses a huge platform: the web. Also, even if we exclude the web, you still have to deal with app stores, code signing, separate builds for each platform and whatever else you'd have to do to distribute your app everywhere (not my area of expertise). But with a PWA, you make a website that uses Service Worker and you're done.
- ozim 2y agoQT is not as approachable as web stack. With all downsides of the web stack I still would rather go with it than QT.
- VyseofArcadia 2y agoHaving worked with both, I strongly disagree.
- seansh 2y agoI'm curious how many platforms do you support for your Qt app(s) and how easy was it? It's been a few years since I touched Qt and back then mobile support was a pain.
- VyseofArcadia 2y agoI've only worked with Qt apps that supported Windows, Mac OS X[0], and *nix. I've never touched mobile. [0] That is to say, before the macOS rebrand, so this was a number of years ago.
- whynotkeithberg 2y agoThis looks awesome... Love the google Keep integration. Any plans for this to be able to install into firefox?
- seansh 2y agoI'm glad you like it. Unfortunately, Firefox and Safari on desktop don't support progressive web apps. The issue is being tracked here [1] and there is certainly demand for it. [1] https://connect.mozilla.org/t5/ideas/bring-back-pwa-progressive-web-apps/idi-p/35/page/25 https://connect.mozilla.org/t5/ideas/bring-back-pwa-progress...
- fusslo 2y ago"offline first" AND "privacy first", self hosted or cloud options, AND I need to sign up? Why do I need to sign up? When I "sync" how do I know my notes are private? Where are they 'synced' and who has access to the keys? I wish there was a 'how Unforget works' section I'm not web tech savvy, but I value my privacy (especially with notes) and I need a note taking app with permanence. With this landing page I have no idea how it works, where my notes get saved, how do I access my notes if https://unforget.computing-den.com/ https://unforget.computing-den.com/ goes down. how do I self host? maybe I just didnt spend enough time or navigate to the right section of the app shrugs edit: I was going to delete this comment because I am not sure it adds anything meaningful. It was mostly a rant. But I want to explain that I'm coming from a place where I've also been looking for a note taking tool for a long time and this is very close to what I'm looking for.
- deleted 2y ago[deleted]
- pvg 2y agoIt was mostly a rant Show HN's are for people to show their work and get constructive critique/interesting conversation. Take a look AT https://news.ycombinator.com/showhn.html https://news.ycombinator.com/showhn.html
- fusslo 2y agoDid you read my comment or just the edit? It was constructive critique. Terse, but not only did I point out the things that are unclear to me I suggested a fix. The edit was to soften the effect of being so blunt. Its a technique of being harsh then giving the reader some reason to attribute their negative emotions to. Its a way of side stepping the ‘defensive reflex’ So my friend I would appreciate you take as much time to read as write
- pvg 2y agoLike I said, take a look at the linked guidelines, they ask you not to write like this in HN comments generally and in Show HN's specifically.
- jamesgeck0 2y agoClicking the checkmark button from the editing view causes the header to expand until it covers almost the entire window. Using Firefox 127, macOS.
- polairscience 2y agoWoah. You made exactly what I want. Lucky day for me. Thank you. Also, thanks for the markdown support. I'm one of those weird people that will ask if you'd be willing to support org mode as well. And I'm kinda surprised you don't if you use it yourself! I'd be very likely to use this if I could simply point it to an org file and have it displayed nicely on the web. I often take short notes that turn into long notes or vice-versa. A fair response to your question would be, "submit a pull request" (thanks for being open source)... but I've got far too much science to do at the moment. So, regardless, thanks for building something cool!
- seansh 2y agoThank you, I'm glad you like it. I'd also like to see org mode support! Since the APIs are public and documented, I would love to see a client inside Emacs as well. Then we can browse the notes in actual org-mode on desktop. I can't say I have any plans for it yet since it covers all my needs as is. But, if I find some spare time, I'd love to make it happen.
- whartung 2y agoWhat has been your experience writing the "off line first" style PWA? There's an appeal to it, basically using the web purely as distribution, and the browser as the runtime. But I'm concerned with the fiddly-ness of local storage and such like that. The "out of site, out of mind" nature of it. The data not being in a "~/.app/app.dat" file, etc. The idea of it potentially just up and vanishing with a browser update. And, heck, just the complexity of dealing with the schema versioning in the native web model. As well as the portability of data (say when you copy over to a new computer). The idea of simple web distribution is compelling. Now you need nothing more than a github account, and off you go. No server, no nothing. But I still feel (perhaps ignorantly) that the data situation is still on shaky ground. (Discounting the whole lack of something like SQLite, etc.) And, the idea of bundling something like SQLite as a webassembly blob just makes me itch. Just curious how that's worked out.
- winrid 2y agoThis was my concern with building a PWA, which is why SidewaysData is a native desktop app. The downside of course is updates, but that's manageable.
- tithe 2y agoIt seems it's using `better-sqlite3`[0] and saving the database to a file called "private/unforget.db"[1]. (Although, I don't have experience with SQLite, so that file might be as volatile as `localStorage`.) [0] https://www.npmjs.com/package/better-sqlite3 https://www.npmjs.com/package/better-sqlite3 [1] https://github.com/computing-den/unforget/blob/master/src/server/db.ts https://github.com/computing-den/unforget/blob/master/src/se...
- j_walter 2y agoI'm always looking for a good note taking app that is self-hosted but still looks great on mobile AND desktop. Any chance you plan to release a docker container at some point?
- seansh 2y agoThanks, sure, I wouldn't mind releasing a docker container if it'll make it easier to deploy.
- m3kw9 2y agoWhy not use Apple notes
- jazzyjackson 2y agoIf you sync, apple notes are stored plain text in icloud BTW anytime a notes app comes up I feel the need to let people know that there is an option to bulk download your apple notes at privacy.apple.com
- drio0 2y agoWow thanks for the link. I have not thought of it and I have been trying to export my notes out without success (I don’t have a mac)
- seansh 2y agoI think these are missing from Apple notes: - everything end-to-end encrypted by default - public APIs, create your own client (still with e2e encryption) - self host - markdown support - import from google keep - open source
- deleted 2y ago[deleted]
- m3kw9 2y agoWhat’s also missing is the near zero chance they close up notes.
- tonynator 2y agoNot wanting to support Apple and their anti-consumer decisions. Don't know if Apple Notes is even good and I will never know.
- iLoveOncall 2y agoOnce again a note taking app that should have been an Obsidian plugin.
- seansh 2y agoThere's only so much one can do through plugins. We can't write a plugin to make an app simpler, more lightweight, open source, and without electron.js.
- iLoveOncall 2y ago> and without electron.js. Ah yes, you only need... an entire browser to access it, so much better! Obsidian is also extremely simple and only offers options to expand its features, without ever mandating them. I'll also add that simple is not always better, especially (like this "app") when it's simplistic rather than simple. It also, you know, works when you don't have internet?
- qntmfred 2y ago> Ah yes, you only need... an entire browser to access it, so much better! electron is basically a browser wrapper in this case so yeah this is just skipping an unnecessary dependency. not everybody uses obsidian. everybody has a browser.
- iLoveOncall 2y ago> electron is basically a browser wrapper in this case so yeah this is just skipping an unnecessary dependency. No, it's a very stripped down browser. Firefox with 0 browser extensions and only opened on that note taking website consumes 450MB of RAM, while my Obsidian installation only consumes 136MB. Even just looking at that specific tab (on Chrome because Firefox doesn't show it), it consumes 86MB of RAM on the demo. I'll happily spare 50 extra MB for all the features of Obsidian.
- tonynator 2y agoYou can't sync Obsidian without paying. This syncs for free right?
- mverv 2y agoNice work! It might be helpful to explain what "offline first" means (i.e. the data is stored in your local machine), especially for lay users.
- seansh 2y agoThanks. Yeah I agree, outside of HN some terms in the intro should be explained better :)
- qntmfred 2y ago/about "Techinal details" fyi
- satvikpendem 2y agoWhat are you using for syncing? I was looking into multiple CRDT solutions and wasn't sure what to use. In your package.json I couldn't find any specific CRDT or syncing library so I'm presuming you're syncing manually, how are you doing that and handling conflicts?
- seansh 2y agoNo it's not CRDT. I opted for something far simpler: if (a.modification_time > b.modification_time) ... that's all. Like some other features I originally planned to implement CRDT but then realized I don't miss it. Since this is not a collaborative editor with multiple users editing the same note, CRDT is not that useful. I think the only situation in which you'd want CRDT for a private note taking app is if you're editing the same note from multiple devices while all are offline.
- satvikpendem 2y agoAh I see, you are using the LWW (last write wins) strategy. That's useful for some scenarios although not all. How did you implement that portion as well?
- seansh 2y agoTake a look at the Sync and Merge section of the readme [1]. I tried to explain it in details. [1] https://github.com/computing-den/unforget?tab=readme-ov-file#sync-and-merge https://github.com/computing-den/unforget?tab=readme-ov-file...
- submain 2y agoThis is great! How does it compare to silverbullet (https://silverbullet.md/ https://silverbullet.md/)?
- sameerds 2y agoHow do I manage my account once created? I don't see any link to change my password, etc.
- seansh 2y agosorry, changing password is not yet implemented. Besides that, there really isn't much of a profile. You only have a username and a password. There's no email or anything else.
- imranhou 2y agoAny plans on integrating something like this? - https://simplemde.com/ https://simplemde.com/ when the notes get heavy, I prefer a simpler wysiwyg editor than to keep up with markdown syntax, especially if my notes contain tables etc.
- seansh 2y agoI'd love to have a wysiwyg editor. It's just that in my initial tests I couldn't find one that worked well on all platforms. I'll try this one too. Thanks!
- imranhou 2y agoWhat problems did you encounter with something like https://ui.toast.com/tui-editor https://ui.toast.com/tui-editor? Which is much more featureful than simplemde.
- stronglikedan 2y agoI think it would make more sense to ask them if they tried that at all, before asking what problems they encountered.
- jowdones 2y agoWow, the kids discovered Notepad!
- izoow 2y agoBeing similarly frustrated with note taking apps lately (Android), I finally discovered one that's pretty amazing, so I'd like to mention it. It's called Zettel Notes [1]. It's all offline, with support for many syncing options, and the notes are simple markdown files stored in a directory. [1] https://play.google.com/store/apps/details?id=org.eu.thedoc.zettelnotes https://play.google.com/store/apps/details?id=org.eu.thedoc....
- cenamus 2y agoCan also vouch for Zettel notes, git integration with sourcehut was a bit fiddly but once set up it's great. Even supports most the the Org I use
- gloosx 2y agoThe security of this is somewhat questionable. On client device the notes are stored in plain text, so even another user from the same machine can read them. For syncing it also sends a `username+password+salt` SHA-256 hash to the server, together with the username which makes password easily pickable. Giving we know the username AND that the salt is always 32261572990560219427182644435912532, it is really a hash crackable in minutes on a somewhat decent hardware with a simple hashcat mask attack.
- rakoo 2y ago> The security of this is somewhat questionable. On client device the notes are stored in plain text, so even another user from the same machine can read them Depending on the threat model this might not be an issue. For my particular case where the notes must be kept away from ultra-capitalist companies it's more than enough > Giving we know the username AND that the salt is always 32261572990560219427182644435912532, it is really a hash crackable in minutes This is way way more worrying
- seansh 2y agoHi there. I'm happy to see people are looking at the code to verify the security. You are right about the notes being in plaintext on the client. Otherwise, you'd have to enter a password every time you open the app. The issue I was trying to solve wasn't really trusting my own system but trusting the server and the middlemen. About the encryption, adding the username+salt prevents the use of rainbow tables by hackers but hashcat mask attack can be prevented by a strong password to make it infeasible. But yeah, if you pick an all lowercase 8 letter password, it can be cracked pretty quickly. Also please note that, the server doesn't store the hash but hashes it again with yet another salt and stores the double hash. When logging in, the server issues a long token for the client so that the client doesn't have to store the password or its hash anywhere. Additionally, neither hashes are used for encryption and decryption and each note's encryption is salted differently. edit: I'd love to hear suggestions on how to improve the situation even for shorter passwords.
- gloosx 2y agoEven with a strong password – my laptop today can do 1100 MH/s which makes it quite feasible. One of the potential attack vectors can look like this: a malicious actor takes this and reskins the UI, then hosts and does the marketing, his server stores the NGINX logs with /login requests for some time, preserving the password_hash and username params silently. Then after a while he spends few weeks cracking the passwords for every account and syncs their notes, then parsing them for passwords/sensitive info. As for suggestions, this could be enforced by making use of a system-level keychain, but I don't know if it is possible within a sandboxed environment like PWA. Some stronger derivation method would help too, like the industry standard is pbkdf2 with at least 600000 iterations for SHA256. Lastly, end-to-end encryption usually implies some kind of protection against man-in-the-middle attack, like a certificate pinning mechanism
- voidUpdate 2y agoI enjoy the use of interactable checkboxes on the homepage so I can turn off your features :P
- seansh 2y agoahah careful that might actually turn them off :P
- anonymous344 2y agoI made this similiar FROM Simplenote's older version. Just blocked it's internet access. very good result :D Only thing I don't like is not able to reorder the notes
- swyx 2y agodoes it support images (as in inserting images in my notes)? can it?
- rubinlinux 2y agoThe thing this and MANY similar approaches take that rule them out for my use is they dont do drawings. I draw in my notes somewhat infrequently but when i need to I need to. I've been stuck with onenote for that reason.
- ASalazarMX 2y agoI'm always on a quest for a better structured knowledge storage, and while I usually stay away from electron apps / desktop JS, I see that the most experimentation comes from them. Since it's a JS application, have you considered supporting Mermaid diagrams? While heavy, Joplin is my goto for notes these days because Mermaid syntax has been a game changer compared to simple markdown. https://mermaid.js.org/ https://mermaid.js.org/
- e12e 2y agoNice! I will have to give this a try as an alternative to Diary: https://f-droid.org/en/packages/org.billthefarmer.diary/ https://f-droid.org/en/packages/org.billthefarmer.diary/ https://billthefarmer.github.io/diary/ https://billthefarmer.github.io/diary/ https://github.com/billthefarmer/diary https://github.com/billthefarmer/diary
- account42 2y ago> Your browser does not support service workers. Please use another browser. I'd rather use a different website (or rather a native program).