Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Unforget, the note-taking app I always wanted: offline first, encrypted (computing-den.com)
274 points by seansh 7 months ago | hide | past | favorite | 138 comments
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

[2] https://computing-den.com




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


There's definitely a lot of fiddlyness when it comes to the web stack.

Having said that, indexeddb has been very reliable. There are some annoying limitations though. For example, if you want to create an index on a store using multiple keys, you can't specify which key should be ascending or descending.

If you add the PWA to your home page, i.e. install it, then the browser must not clear indexeddb on an update or something. And as far as I can tell, browsers do respect that.

My overall experience building PWA has been mixed. I think it really depends on what app you're making. For a note taking app, where the data can be backed up to the cloud encrypted and synced, I really think a PWA is the best option. But if you want tighter integration with the platform e.g. accessing the file system, then I would stay away from PWA.

Another issue is ios safari which is missing a lot of features for PWAs and I think unlikely to support them in the future. E.g. background sync, offline push notifications, etc.

Are you considering PWA for any particular app?


I'm just writing little stuff in Java, and use that as my x-platform environment, but even it has its challenges.

So, I was considering a PWA. I don't need tight local integration per se. I do have a conceptual problem not being able to save a file or read a file, even if it's just chosen by the user. I THINK I can do that. I THINK you can pop a file chooser to read a file, but not necessarily just open any file you want. If you can read/write a file as directed by a user, that would be fine. I can see the rest being stored in the IndexDB. And that gives the option of an export/backup if it becomes necessary for peace of mind.

Then there's the whole x-browser game, I'm not really looking at mobile, just desktop, but I'd like to support FF/Chrome/Safari/Edge.

It's not rocket science stuff by any means. But I don't want a user to call up and talking about how their data suddenly vanished because they went to get the latest, and I did something innocent/ignorant (or not), or THEY did something (deleted their PWA icon, copied it, moved it, etc.), or the browser did something.

I have no experience with it, so for now, I'm not comfortable because I don't have my "hands" on the data.

If I can export it, then the comfort level goes way up. Inform the user to back up "just in case", especially early on when we're all still bumping in the dark.

To be clear, I don't want a server side, I have no interest in standing up a service component. I have less interest in maintaining a service component. I'd like the code to be local and "standalone" as practical.

But I also want something a touch more than "git clone app; cd app; ./build".


If you only care about desktop and don't want to maintain a server, I do suggest taking a look at webview [1]. It uses the platform's own web browser engine (WebKitGTK on linux, WebKit on mac, WebView2 on win) which you can use to run your app using the web stack. Essentially, it gives you something like electron.js but without the excessive bloat. And you get access to the file system and everything else on the desktop.

I believe there are other libraries/frameworks on github with a similar approach you might want to have a look at.

[1] https://github.com/webview/webview


There's also Tauri which takes a similar approach but uses Rust. I've had good luck with it so far.

https://tauri.app/


You mention in the sample page that Safari on desktop "cannot install". But in recent versions of macos, it has "save to dock" in the "Share" menu.

This creates Unforget.app in ~/Applications which appears to work. I've also successfully used this with Tana in the past. Did you run into trouble with that or have you not tested it?


Oh yeah you're right. I'll update the instructions. Thanks!


firefox on android is also capable


I've been pondering similar regarding data persistence. One half-assed idea I have is simply to prompt the user to save the data regularly. A reminder with a button/link which triggers data serialisation from storage and then triggers the save dialogue. The serialisation/save could be triggered manually any time. A reciprocal import would also be needed of course.

Another similarity half-baked plan is for a PWA to regularly post (encrypted?) data to a service I'd host that simply forwards the data to the user's choice of cloud storage. It would require initial setup and probably regularly refreshing token, but should be workable.


The self-hosted app Actual Budget [1] sort of takes the second approach, where each client maintains their own SQLite database in local storage. However, instead of just hosting a single file database, the server maintains a list of migrations and is able to resolve conflicts between multiple clients. Clients push/pull the migrations when syncing to keep their database up-to-date. E2EE is also supported. The original creator, James Long, has done talks about the architecture if you want to learn more [2, 3].

[1] https://actualbudget.org/

[2] https://www.youtube.com/watch?v=2dh_gtndayY

[3] https://www.localfirst.fm/7


Ive got a PWA forth coming, i expect to make a electron or other companion app to make.it self hostable via webrtc.


> The idea of it potentially just up and vanishing with a browser update.

Anyone writing applications in the browser should be very cautious to note that many browsers will jettison some types of their website storage if disk space is low.

This is frustrating at the best of times, but if there's no server-side backup then frustration would be an understatement.

I am not sure if this caveat applies to localStorage but from experience it does to IndexedDB — seemingly even in Electron applications (??).


> from experience it does to IndexedDB — seemingly even in Electron applications (??).

oh fun! I haven't run into that. But if you're using electron or any platform's local webkit wrapper, then it makes a lot more sense to forgo the browser's storage and directly use sqlite + server-side backup if possible.


I think the safest offline storage is to use the browser file system (https://developer.mozilla.org/en-US/docs/Web/API/File_System...) so the data is out of the browser's hands.

It works pretty well with the only downside being the user needs to re-select the file/directory to use each time they use the app and there is no way to force the file picker to start in a specific directory other than the "well known directories".


Now, you only need to select the directory once, and the browser will retain permissions

https://developer.chrome.com/blog/persistent-permissions-for...


Thanks for the heads up!


!The data not being in a "~/.app/app.dat" file, etc.

It is possible to do this now in chromium based browsers. Refer https://developer.chrome.com/docs/capabilities/web-apis/file...


It 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

[1] https://github.com/computing-den/unforget/blob/master/src/se...


Yes that's the database on the server for storing encrypted notes and syncing. My experience with SQLite has been very positive. It really is rock solid.

Also, wanted to mention that Unforget doesn't use browser's localStorage. LocalStorage has a low limit and the browser can nuke it when it wants. Instead we use IndexedDB which has much higher limits and persistent.


I’ve been using Omnivore (a “read it later” app), which I otherwise love, but even though it’s an iOS app, offline support is one of its biggest weaknesses.

As far as I know, it’s using some caching library at the HTTP level (as opposed to handling its own persistence at the application layer), and in falls apart every time I have a poor connection, remaining broken (even after fully going offline) until I’m back online.


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


If you have a.desktop app, zetup a webrtc connection and you can create a teathered.webapp in PWA.


SidewaysData needs to be able to work offline. It also needs access to serial/USB ports. Also, I prefer Java to TS etc anyway.


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


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


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


You're right. The order is chronological with the pinned notes at the top. User can toggle showing of pinned notes. There's also archived notes which you can find in the main menu (top-left corner).

In the beginning, I intended to add dragging of notes to change the order and organizing notes in folders. But, honestly, after using it for a while I realized that I don't really miss those features at all even though I have thousands of notes. As long as the search is fast I can always find what I need quickly.

Again, thank you. I'll add this info to the demo note.


Ah got it - pinned notes float to the top

FWIW agree with your call on not building too many organisational tools in

Thanks again for sharing; look forward to trying it out


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


Thanks 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?


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


I 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

After refreshing, it properly displayed the JS code for the SW.


Privacy featurss in pwa odte. Preveny pwa


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


Its likrly the.privacy options that prevent storage.


And another small typo: GitHub falvored -> GitHub flavored


fixed, thanks!


Any plans on integrating something like this? - 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.


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


What problems did you encounter with something like https://ui.toast.com/tui-editor? Which is much more featureful than simplemde.


I think it would make more sense to ask them if they tried that at all, before asking what problems they encountered.


Neat 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?


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


I'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/


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


Can 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


I'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?


Thanks, sure, I wouldn't mind releasing a docker container if it'll make it easier to deploy.


Great work! Can you share more about the native apps? I’m looking for something native, lean and quick – similar to apple notes.


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


thanks for explaining that part


Tell others!

Webapps are the thing.

If Apple lets them be - or is forced to.


I still prefer native apps for performance but that's just me


What 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?


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


Ah 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?


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


I enjoy the use of interactable checkboxes on the homepage so I can turn off your features :P


ahah careful that might actually turn them off :P


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


I always assume the stack people choose is based on what they know. Given that we’ve seen a huge number of people learn web tech over that last decade or so, it’s sort of unsurprising to see so many people go that direction. I’d assume a secondary factor is portability, although given that you can achieve portability with other stacks too, I generally think it’s tech familiarity that drives it more than anything else.


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


QT is not as approachable as web stack.

With all downsides of the web stack I still would rather go with it than QT.


Having worked with both, I strongly disagree.


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


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


> I've never touched mobile.

That's important.


* It's cross-platform

* It's (probably) sandboxed

* It's easy to distribute

* It's easier to make an app with a decent (but non-native) UI, compared to other cross-platform toolkits


I developed desktop applications a long time ago, but I do webdev now, including Electron apps. Modern web stack is just a much better developer experience. Sure, if you just want to build a simple app with 5 controls and two screens, you can remember good old days of VB6 or Delphi fondly. But for a modern complex application with localisation, reactive design for mobile and desktop screens, a lot of user content and complicated state that is changed asynchronously both from the user input and from remote events, modern web stack is actually great.

Typescript is about the best mainstream (not Haskell) programming language I've ever worked with, modern web frameworks (React, Svelte and others) use functional programming concepts in the right places without requiring knowledge of type theory, it's easily debuggable at runtime and modern css/html is actually a pretty good way to do layout of complex user interfaces.


Interesting. I've done both desktop app dev and web dev professionally, in both cases complex applications that required localization etc. I still found the traditional C++ desktop app a better developer experience. It's significantly more straightforward, and I could be more productive of the simpler mental model of "OS runs application, calls out to thin GUI abstraction layer which calls out to either Cocoa or win32" vs "backend runs on service fabric in one of three different data centers, calls out to x different DBs and y different microservices, user connects to it via frontend after auth (another can of worms) via roughly a dozen different common configurations, but we're only going to test with Chrome on Windows, using TypeScript and an unholy combo of three different frameworks because the frontend team keeps chasing the new hotness"

Web dev just feels insane to me. The amount of logistics and infrastructure and tooling you need[0] is beyond the pale.

[0] "need" is maybe strong, but in an enterprise setting like I was that's what you have


If you don't have to deal with backend in the former scenario it seems that you're really comparing apples to oranges here.


Bad news, I was "full stack". That makes it a real apples-to-apples comparison, as I was also full stack on desktop. Except the stack was shorter. Which was my point.


I always wonder what people mean by "complex applications" when they associate them with mobile design and then contrast them with "simple applications" created with Delphi.

Guess that complexity is the same as number of spinners.


I have had interesting interactions with web devs in which I describe the architectural CAD application I used to work on, which they call "a simple desktop app". They then talk at length about their overengineered CRUD app.


Personally, my experience was developing IDEs and other developer tools.


I'm a web dev so naturally, I'd pick something I know well to implement UIs. Second, distribution is a big one. With native mobile, you have to go through lot of hoops to get your code onto the device easily, usually it means dealing with certificate, licenses etc.



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.

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.


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


Even 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


Actually I'm using pbkdf2 with 100000 iterations of sha256 for the encryption, but not for hashing the pass. That will certainly add a few orders of magnitude to the infeasibility of cracking the password hash when the server itself is not to be trusted. I'll implement that and thanks for bringing it to my attention.

But I don't think a strong password can be cracked that quickly. Let's say you use a 12 character long lowercase, uppercase, digits and some specials chars. That should give you at least 60^12 possibilities. At 1BH/s, that would take 70k years. Is my calculation wrong?


If its.local first, hash the username about 50000 times.


> 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


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


yeah notesnook is really cool with lots of features but the client does seem to be electron based.


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


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


Honestly no, it's not really about the native APIs at all. People just like having an app that doesn't feel like a website at all, and you can't quite get rid of that feeling with a PWA. We started trying to push PWA, and uptake wasn't great. Then we wrapped our web app in Electron and Capacitor and people loved it, even though we hadn't actually integrated with really any of the platform APIs.


It’s likely because people have a hard time switching between browser tabs and would rather switch between applications.


This looks awesome... Love the google Keep integration. Any plans for this to be able to install into firefox?


I'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-progress...


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


I 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


This looks great. I'm excited to try this later! Great work!


Thanks, I'm glad you like it.


This is great! How does it compare to silverbullet (https://silverbullet.md/)?


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


Thanks. Yeah I agree, outside of HN some terms in the intro should be explained better :)


Clicking the checkmark button from the editing view causes the header to expand until it covers almost the entire window. Using Firefox 127, macOS.


Looks clean, but how are you organizing the "thousands of notes I had on Google Keep"? It looks like a single page of notes.


Yes 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?


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


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


Fair enough on the CSS, and I didn't realize autosave is already done, thanks!

I did see the '---' collapsible and that helps but only if you have one section you want to collapse. I'm perhaps more visually-oriented than most, and being able to hide extraneous material helps me focus.


Makes sense. Perhaps there could be an option in the menu to set the default expansion level:

- level 1: collapse all H1 sections

- level 2: collapse all H2 sections

- ...

Basically like org-mode's cycle feature with the tab key. And then clicking on a headline will expand it.


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


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


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


How do I manage my account once created? I don't see any link to change my password, etc.


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


> Your browser does not support service workers. Please use another browser.

I'd rather use a different website (or rather a native program).


Priavcy first!


fixed!


Wow, the kids discovered Notepad!


does it support images (as in inserting images in my notes)? can it?


/about

"Techinal details"

fyi


Why not use Apple notes


I 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


What’s also missing is the near zero chance they close up notes.


If 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


Wow 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)


Not wanting to support Apple and their anti-consumer decisions. Don't know if Apple Notes is even good and I will never know.


Once again a note taking app that should have been an Obsidian plugin.


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


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


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


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


You can't sync Obsidian without paying. This syncs for free right?


You definitely can, there are many ways to do so. Obsidian projects are basically just markdown files, so any file sync works.

Wrote a post of different ways you can sync a Obsidian vault/project: https://bryanhogan.com/blog/how-to-sync-obsidian


There are many ways to sync Obsidian for free. The official site lists several at https://help.obsidian.md/Getting+started/Sync+your+notes+acr..., or try https://github.com/denolehov/obsidian-git - and there are more.


iCloud works fine, and there are many alternatives as well, as mentioned in this thread.


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


ok so to answer more thoroughly, sign up is required for the sync feature to work. I'm not gonna say there's no way around having a server for sync, but none is simple or even possible to implement for all platforms including the web (see the Nat Traversal problem [1]).

You can self host of course in which case you only sign up to your own server. Instructions for self hosting can be found on the github page [2].

As for verifying the privacy of your data, this is a little more complicated. First, since it's a web app, you can open the dev console of your browser and in the network tab you'll see all the data that gets passes around. You will see that the content of your notes and passwords are all "gibberish" because they are encrypted or hashed. Of course that doesn't necessarily mean they are encrypted or encrypted well. To verify that, you really have to take a look at the code at least the client examples [3] which is provided in both typescript and python. They will show you how encryption and decryption work which allows you to verify that the "gibberish" data you see in the network tab of the website really is properly encrypted notes.

I hope that addresses your concerns. Let me know if you have any more questions.

[1] https://en.wikipedia.org/wiki/NAT_traversal

[2] https://github.com/computing-den/unforget

[3] https://github.com/computing-den/unforget/tree/master/exampl...


Not OP but thanks for the detailed explanations


Hi there. I'll answer more thoroughly in a few minutes but please check out the github page [1] for more details about the internals.

[1] https://github.com/computing-den/unforget


It 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


Did 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


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




Consider applying for YC's Spring batch! Applications are open till Feb 11.

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

Search: