This is really impressive. I've always wanted a decent Journaling app that also mapped well to hierarchies and how I think about things. It looks incredibly fleshed out, and that a lot of thought and effort was put into this project.
I'm curious about whether there's synchronization between the local desktop application and the hosted web version. Also about how responsive the web version is, and how well it works on a phone.
Hosted web version actually serves a dual purpose - it is a full online app (for both desktop and mobile) and also acts as a central sync server for desktop clients.
There's a fully featured web version which is tailored for desktop and isn't responsive. There's a separate frontend for touch based devices which doesn't have a complete feature set, but scales nicely for both smartphone and tablet layouts. But this is a brand new feature released just days ago so it has probably rough edges.
Nvm, when i disconnected out of the VPN to my workplace, the images loaded fine.
Tried connecting to VPN again to test if the images would load this time, it didn't. Weird... It could be something specific with my VPN.
You should check out your workplace's firewall rules. About a week ago, my works' firewall suddenly started blocking the domain where Github's CSS/JS files were hosted and all formatting and images were gone. Not sure if Github switched hosting servers or our firewall whitelist was updated incorrectly.
This looks awesome! Clearly you have put in a lot of hard work and thought into this.
Ive been itching for a scriptable personal knowledge base where I can store arbitrary datastructures and executable code in addition to the typical richtext note taking. Will be diving into the code asap. Cheers!
> Ive been itching for a scriptable personal knowledge base where I can store arbitrary datastructures and executable code in addition to the typical richtext note taking.
Wow, this is actually exactly what Trilium Notes is. Perfect match!
Yes, as the other commenters answered. Just a word of warning - there's not many ENEX files floating on the net available for testing so I kind of expect some bugs to appear here.
I use CKEditor 5 which is very very nice, but still a bit immature in its plugin ecosystem.
LaTex support is definitely something I've been thinking about, but I'm still not sure about how to approach it.
This might be also one of the showcases for the scripting support. User can load e.g. KaTex as a script, bind it to the "code note" which it will render into a view e.g. above the code editor. But that's not very user friendly for sure.
Want to add on that TeX support is pretty much the only thing holding me back from this. I feel like KaTeX is not only easy to integrate but also full featured.
I'd be incredibly impressed if you could render full LaTeX though - e.g. via a renderer switch and a PDF viewer like PDF.js.
Two popular note taking apps which do this are Dropbox Paper and Notion.so, but they only support inline math. A niche app that does both is Gitbook but they’re a newer company and I’m not sure about personal plans.
Edit: I should add neither of these support code execution. I would really love if someone could point to a Wikipedia / knowledge base composed of Jupyter notebooks but have the functionality inverted — primarily focused on note taking and secondarily on code execution.
hackmd.io has a pretty nice latex supported. I find it much better for math notation than dropbox paper. It also has docker image available incase the service happens to shutdown.
This is very interesting. It's self-hosted and therefore not reliant on someone's brittle/invasive business model. I'd consider switching over to this in a heartbeat if it could handle attaching arbitrary files to notes (e.g. office docs, pdfs, etc.) that would also get sync'd.
I haven't looked at the code, but can anyone say something informed about the sync server auth and transport security? Is it running over TLS?
I can't really recommend this. Trilium Notes stores its data in an SQLite database and syncing it as a single file would mean any kind of edit conflict would have to throw out all changes from one side of edit conflict.
Native solution has an advantage of being able to resolve edit conflicts on a very granular level (individual notes, attributes etc.)
I'm not sure if you mean on a user level or possibly on a sync level?
Trilium Notes automatically versions notes by kind of taking a snapshot every few minutes. It allows you to browse those "revisions", but there isn't a diff built in yet. It is one of those features which I thought I might implement some day but there's always something more important.
For the edit conflict resolution - no diff is being used. Newer change just overwrite the old one. But since you have historical revisions from both sides of edit conflicts, there's a good chance you didn't lose the data completely. And in practical terms this happens quite rarely if you sync often (i.e. - are online) since the sync is granular enough.
Trilium Notes has a concept of "file notes" which are just notes placed into the tree which can contain binary files. They fill the role of attachments. As any other kind of note, they are synced to the sync server and all clients.
Sync auth is done through HMAC of a timestamp with shared secret. Sync uses HTTP so if sync server is properly configured with TLS, then it is used of course.
For the export there's a TAR archive which contains a directory structure of HTML/Markdown files (you can choose the format) representing the notes in the tree structure. Extra metadata are stored in a single JSON file (in the same tar). Same tar archive can also be imported without losing anything in the process.
Besides that there's an OPML file export which contains a tree structure with plain text. Its import seems to be supported widely among outliners.
So, say I export my note as a markdown document, what I'm seeing is that all the images that I had pasted into my note are still referenced as a link. I was thinking the image itself would be copied into an images directory and referenced relative to the note, locally. Is it possible to do that?
Also, it might be a good idea to store notes as an XML document. Then when they're imported into Trilium, they can be loaded into a sqlite instance, this makes storing and sharing notes as a file easier.
Thank you for the hoisting! For me this is a crucial feature missing on most outliners. I got spoiled by one that had it in the mid 80s (one of the first, can't remember the name). That one went away and ever since hoisting has been my screening test. The fact that hoisting is hard to find 30 years later is evidence of technical regression and the oncoming collapse of civilization. So Trilium gives me hope.
Emacs/Org-mode have had this feature for years. You can narrow-to-subtree, or even subtree-to-indirect-buffer, presenting a subtree as its own buffer, like having files within files.
The_Colonel, could handwritten notes fit into Trilium? It's technically possible, with PointerEvents to get pressure, but I'm wondering about whether it would fit with your goals for the project.
I'm guessing it would need to be another type of note, separate from the CKEditor ones, or maybe some kind of drawing area plugin making space within a rich text note.
Yes, some kind of drawing is planned, but nothing concrete yet. Ideally I'd use some library because it's probably not feasible for me to implement it all by myself.
I wish somebody would write a good comparative review of all the note-taking, information organization and outlining apps... I'm in constant search of the one that would actually suit my preferences. Perhaps this is the one (but chances are it's not). Let's take a look...
I'm always thinking about doing so yet the perfect one I imagine is actually too complex for me to make - I hardly am too much of a frontend developer so far.
Thank you for the question but it feels I can't write a comprehensive answer quickly enough and it's time to go to bed now (in Europe) but my head is already working on systematizing the idea. I'll probobably write later.
Here is an approximate description of my image of the perfect information management tool:
Free and open source preferably but if it has to be paid (I don't mind paying if somebody builds a perfect tool for me, I'll donate if it's free) - it is to be single-time payment, not any kind of subscription.
100%-internet-independent. An option to synchronize data over the internet is a nice thing to have but it must be E2E-encrypted (I feel like a manually-set private key symmetric encryption is ok) and support P2P-synchronization via local network.
It should better work on all the platforms but desktop Linux is the most important and minimally-sufficient.
It is to store the data in a format easy to read and modify programmatically. E.g. SQLite (seems the best choice, also does great storing attached files as BLOBs within the DB), XML, JSON or whatever with sane scheme.
A node can be folder/document, a document section with a heading (including subsections), a paragraph (with support for marking particular spans as non-breakable and inserting manual line breaks), a picture (svg, png or jpg), a numbered or bulleted list (of whatever a depth) or its element, a video, an audio, a table, a formula, a piece of code, an attached file (stored within or alongside the database), a link to a node or to an external URL. Something else too perhaps.
It should be possible to attach tags and custom properties to the nodes. Every node should have a UUID. The tagging system should support implications (e.g. if I tag something with "python" tag "programming" tag is applied implicitly). It should be possible to rename tags and merge tags into one.
Full text search (and replace) by content, tag, property etc.
Drag&Drop nodes migration and reordering.
Export a node with all its subnodes into a file, execute a command line with its name substituted and import it back. I am going to use this feature mostly to author documents (markdown, latex, epub etc) and blog posts via Python scripts.
What I want to use it for:
Writing down random ideas and notes, mindmapping, organizing reasonably small files and scanned stuff, writing lecture notes, papers, blog posts and books and all these with all their hierarchy elements (to the sane depth, treating every word as an node or looking inside attached files would be too much) should be 1-st class nodes displayed in the tree and available for the operations.
Let me join the conversation, since it's a good opportunity to think about it. For me it would be:
* Open-source, self-hosted
* Storing the data in some very plain format, as long as it doens't conflict with other features. In fact, I'd wish for it to be plain markdown in individual files on the disk, but (aside from performance problems) I don't imagine it being fully possible. So I'm not sure where the right balance should be, but the point is it is something to strive for, since personal notes is something that should be easily editable/recoverable within minutes in any situation.
* Clients for Android, web, preferrably simple enough API to be able to write plugins for vim/atom/whatever.
* The main document format (let's call it .note further): ok, maybe not really markdown, but something intentionally simple still. The only not-markdown feature I can remember right now that is really necessary is text coloring. Must support block-quotes and tables well. Otherwise, it shouldn't be possible to make any html document you want in the editor.
* Editor UI: pretty much one of the Evernote. Embed images by drag'n'drop (automatically copying them to the server), preserve simple formatting when copying HTML markup from somewhere (like Google Docs do).
* Even though only .note files must be editable, pretty much anything should be easily attachable as a first-class note: picture, audio-file, PDF, etc. Even if the only thing app can do with the file is to upload/download, this still should be considered as much a note as a .note file.
* Auth, obviously. I doubt it's a viable feature to build, but if I'm writing it myself, I'd eventually configure it to log-in the proper user using SSL user-certificate.
* Primary purpose of notetaking app is, actually, reading the notes, not writing them, so this should be simple. The default UI for any saved note should be read-only, w/o unnecessary buttons taking up the space on the screen (especially critical when using the phone).
* Tags attachable to every note (of any format). Search using tags. Tags can be non-ASCII. Tags must be easily searchable and editable in bulk.
* Full-text search.
* Some tags can be marked as "labels", and the label should be the only possible way to organize data: treat them approx. as Gmail does, don't clutter the app with both tree-style navigation and tags. To satisfy the user who really likes trees, treat some symbol in the label (- / |) as the separator, so that "university/biology" and "university/math" would form a tree in the UI.
* Pretty much everything else I can imagine right now is anti-feature. Simple is gold. Well, maybe some sort of versioning is actually useful, but if it's implemented it should not only "just work", but also be obvious for the user to see how it works.
* Treat conflicting changes well (for example, if you lose internet connection on a mobile). Maybe something similar to how git does it: let the use choose?
* Oh, yeah, about lost connections: caching on the clients. All cached data should always be encrypted on the disk (hm, I guess it would conflict with auth by SSL?).
One feature I’m sorely missing in pretty much all note taking apps is proper citation/reference handling. As in, working with actual bibliography indexes.
I imagine it being implementable by simply using anchor-based links as in vanilla markdown, no? So every reference can be written manually, and in order to make it convenient you only need some button in the editor, that performs quite a simple macro: add a superscript index with a link, and insert a little piece of text in the bottom of the document (or on a separate page) + an anchor.
But, it reminds me, there also must be a way to easily link one note to the other you wrote. Which isn't always available.
Bear looks amazing (maybe the best although not perfect) but has 2 serious turn-offs: Apple lock-in (a single-platform app in 2019, seriously?) and subscription (whatever humble it is, I hate subscriptions as compared to reasonable price once-and-forever payments).
Which IMHO is the reason why no software for personal managment of stuff will ever be good enough.
We all want the perfect tailor-made suit to work with, but we don't wanna go to the tailor and pay for it. And even worst, we grow, we change, so custom-made solution today might not do it tomorrow.
I think for that reason applications with a programatic approach are the real solution for organization like notes or tasks. Something scriptable is a good start for this.
You can indeed use plain markdown and get all the features you are thinking of. You can color with html, since you could add that to markdown and support it reasonably well. Performance takes some thinking but is not a major issue. This also simplifies versioning, since you could e.g. just use git. I've been working on a notes app that does these things -- not ready yet, but these are all doable. Comments like these remind me its worthwhile (beyond my personal use).
One of the nice things about writing your own note-taking application is that it doesn't have to either good or fully-featured. It just has to do the job better than any existing solution.
You can actually write your own spreadsheet nowadays and I'm not even sure this is going to be harder than to write a good outliner. I advice using HDF5 for the file format.
Thanks but this list doesn't seem relevant to me as it doesn't even contain any of the most interesting notetaking apps I've seen so far like TreeSheets, Bear (I wish it wasn't Apple-only), The Brain, Notable or Frame. Evernote-like stuff is not what I'm looking for.
There are already too many of these "collect universal notes" kind of apps. New ones pop up all the time with a slightly different twist, but basically same shit, new wrpping
Yeah I tried but I can’t share the results because I’ve misplaced the notes and they didn’t sync between my devices plus the format was proprietary and got corrupted...
I have made something like that [1] for my note-taking app. It doesn't currently include Trillium though, and it may be skewed towards the features I'm personally interested in, but if somebody would like to help make it better I'm all ears.
It's a good start but since it's meant to compare your own note taking app to others it's indeed a bit biased. Maybe make it easier for others to contribute to the table, and add a few missing features (for instance web clipper is not in the list). Also the negative categories like "no bloat", "no wysiwyg" being marked a positive for your app is a bit weird. Many users will not see a web clipper or wysiwyg as bloat.
You raised some good points. Some things are kind of biased by definition, as I also mention in a paragraph below the table what I consider bloat can be considered as useful features by somebody else, and the UI part is somewhat subjective as well.
I think contributing to it should be easy enough, one just has to edit this [1] HTML file. It was a plain Markdown/ASCII table earlier, but since it's quite wide it wasn't looking too good.
Looks really nice... I do wish it could use Dropbox/Google-Drive/MS-OneDrive etc as a storage engine though... or local FS in the appropriate directories. I'm also not sure about security on the server, may give it a try on a dokku server to see how it goes.
The only reason I still use Evernote (and I fervently want off) is its excellent page scraper. If there were a non-web (i.e. local storage) alternative for macos&ios I'd switch in a heartbeat. But so far, no luck.
I've been using Typora to make todo lists, and keep notes.
It also has markdown, and I can do checkboxes with it quite easily, and add large titles, and horizontal lines. I just save all related todo's and notes into a folder. When I open a single note, it lists in the left pane all the other notes in that folder. So for example, I have a todo folder. And a file for each day of the week. If I open Monday, it lists all the other days in the left pane.
I love using it. Very similar concept to this program.
I'll have to try out trillium.
What I need most is guaranteed and easily accessible backups. I think, for me, that's automatic commits to a git repo in some format and structure that isn't bound to the app.
I compare everything with emacs editing text files with git for synching. (Encryption is through a VM with encrypted Ubuntu which I use for note taking and everything else.)
Sort of related. Does anyone know of any note apps that will let you select and area of web page, and drag it into the note. I just want easily make a scrap book of relevant info from web pages I visit. The solution I know of, Screen shot, saving, loading, and so on has too many steps. I just want something that will let me select and drag into the note. And that will look exactly like I see on the webpage.
Bonus, if it lets me drag not only rectangular boxes, but actually adjust the box so its not cutting off lines, or other content. Sort of like pinterest, but not for just images, but text also. Hyperlinked to the actual source page would be nice too.
You can use the TagSpaces Web Clipper browser extension, which saves parts or whole webpages in simple html files. It is available for Chrome and Firefox from https://www.tagspaces.org/downloads/
Not sure about your OS, but on Ubuntu and many Linux distributions you can press Ctrl+Shift+PrtScrn to select a region of your screen to screenshot and copy it to your clipboard. I commonly use a workflow of Ctrl+Shift+PrntScrn, select a region, then Ctrl+V to paste the screenshot where I need it - really low friction, and surprisingly many websites support pasting images.
(I suppose other OS's have similar shortcuts as well, so if you use something else, this might be worth Googling for.)
Otherwise, I think Pocket might be exactly scrapbook-collector-type thing you're looking for?
128 comments
[ 3.0 ms ] story [ 212 ms ] threadI'm curious about whether there's synchronization between the local desktop application and the hosted web version. Also about how responsive the web version is, and how well it works on a phone.
Hosted web version actually serves a dual purpose - it is a full online app (for both desktop and mobile) and also acts as a central sync server for desktop clients.
There's a fully featured web version which is tailored for desktop and isn't responsive. There's a separate frontend for touch based devices which doesn't have a complete feature set, but scales nicely for both smartphone and tablet layouts. But this is a brand new feature released just days ago so it has probably rough edges.
https://github.com/zadam/trilium/wiki/Screenshot-tour
Ive been itching for a scriptable personal knowledge base where I can store arbitrary datastructures and executable code in addition to the typical richtext note taking. Will be diving into the code asap. Cheers!
Wow, this is actually exactly what Trilium Notes is. Perfect match!
I see there may be relevant CKEditor plugins. Could these be used?
I use CKEditor 5 which is very very nice, but still a bit immature in its plugin ecosystem.
LaTex support is definitely something I've been thinking about, but I'm still not sure about how to approach it.
This might be also one of the showcases for the scripting support. User can load e.g. KaTex as a script, bind it to the "code note" which it will render into a view e.g. above the code editor. But that's not very user friendly for sure.
I'd be incredibly impressed if you could render full LaTeX though - e.g. via a renderer switch and a PDF viewer like PDF.js.
Edit: I should add neither of these support code execution. I would really love if someone could point to a Wikipedia / knowledge base composed of Jupyter notebooks but have the functionality inverted — primarily focused on note taking and secondarily on code execution.
I'm using it extensively myself :)
It seems pretty great, but there's no code available as far as I can tell.
https://hackmd.io/
I haven't looked at the code, but can anyone say something informed about the sync server auth and transport security? Is it running over TLS?
Native solution has an advantage of being able to resolve edit conflicts on a very granular level (individual notes, attributes etc.)
Trilium Notes automatically versions notes by kind of taking a snapshot every few minutes. It allows you to browse those "revisions", but there isn't a diff built in yet. It is one of those features which I thought I might implement some day but there's always something more important.
For the edit conflict resolution - no diff is being used. Newer change just overwrite the old one. But since you have historical revisions from both sides of edit conflicts, there's a good chance you didn't lose the data completely. And in practical terms this happens quite rarely if you sync often (i.e. - are online) since the sync is granular enough.
Sync auth is done through HMAC of a timestamp with shared secret. Sync uses HTTP so if sync server is properly configured with TLS, then it is used of course.
Besides that there's an OPML file export which contains a tree structure with plain text. Its import seems to be supported widely among outliners.
But you're right that the exported note doesn't rewrite the link to correctly point to the local exported image.
I'm guessing it would need to be another type of note, separate from the CKEditor ones, or maybe some kind of drawing area plugin making space within a rich text note.
Free and open source preferably but if it has to be paid (I don't mind paying if somebody builds a perfect tool for me, I'll donate if it's free) - it is to be single-time payment, not any kind of subscription.
100%-internet-independent. An option to synchronize data over the internet is a nice thing to have but it must be E2E-encrypted (I feel like a manually-set private key symmetric encryption is ok) and support P2P-synchronization via local network.
It should better work on all the platforms but desktop Linux is the most important and minimally-sufficient.
It is to store the data in a format easy to read and modify programmatically. E.g. SQLite (seems the best choice, also does great storing attached files as BLOBs within the DB), XML, JSON or whatever with sane scheme.
A node can be folder/document, a document section with a heading (including subsections), a paragraph (with support for marking particular spans as non-breakable and inserting manual line breaks), a picture (svg, png or jpg), a numbered or bulleted list (of whatever a depth) or its element, a video, an audio, a table, a formula, a piece of code, an attached file (stored within or alongside the database), a link to a node or to an external URL. Something else too perhaps.
It should be possible to attach tags and custom properties to the nodes. Every node should have a UUID. The tagging system should support implications (e.g. if I tag something with "python" tag "programming" tag is applied implicitly). It should be possible to rename tags and merge tags into one.
Full text search (and replace) by content, tag, property etc.
Drag&Drop nodes migration and reordering.
Export a node with all its subnodes into a file, execute a command line with its name substituted and import it back. I am going to use this feature mostly to author documents (markdown, latex, epub etc) and blog posts via Python scripts.
What I want to use it for:
Writing down random ideas and notes, mindmapping, organizing reasonably small files and scanned stuff, writing lecture notes, papers, blog posts and books and all these with all their hierarchy elements (to the sane depth, treating every word as an node or looking inside attached files would be too much) should be 1-st class nodes displayed in the tree and available for the operations.
* Open-source, self-hosted
* Storing the data in some very plain format, as long as it doens't conflict with other features. In fact, I'd wish for it to be plain markdown in individual files on the disk, but (aside from performance problems) I don't imagine it being fully possible. So I'm not sure where the right balance should be, but the point is it is something to strive for, since personal notes is something that should be easily editable/recoverable within minutes in any situation.
* Clients for Android, web, preferrably simple enough API to be able to write plugins for vim/atom/whatever.
* The main document format (let's call it .note further): ok, maybe not really markdown, but something intentionally simple still. The only not-markdown feature I can remember right now that is really necessary is text coloring. Must support block-quotes and tables well. Otherwise, it shouldn't be possible to make any html document you want in the editor.
* Editor UI: pretty much one of the Evernote. Embed images by drag'n'drop (automatically copying them to the server), preserve simple formatting when copying HTML markup from somewhere (like Google Docs do).
* Even though only .note files must be editable, pretty much anything should be easily attachable as a first-class note: picture, audio-file, PDF, etc. Even if the only thing app can do with the file is to upload/download, this still should be considered as much a note as a .note file.
* Auth, obviously. I doubt it's a viable feature to build, but if I'm writing it myself, I'd eventually configure it to log-in the proper user using SSL user-certificate.
* Primary purpose of notetaking app is, actually, reading the notes, not writing them, so this should be simple. The default UI for any saved note should be read-only, w/o unnecessary buttons taking up the space on the screen (especially critical when using the phone).
* Tags attachable to every note (of any format). Search using tags. Tags can be non-ASCII. Tags must be easily searchable and editable in bulk.
* Full-text search.
* Some tags can be marked as "labels", and the label should be the only possible way to organize data: treat them approx. as Gmail does, don't clutter the app with both tree-style navigation and tags. To satisfy the user who really likes trees, treat some symbol in the label (- / |) as the separator, so that "university/biology" and "university/math" would form a tree in the UI.
* Pretty much everything else I can imagine right now is anti-feature. Simple is gold. Well, maybe some sort of versioning is actually useful, but if it's implemented it should not only "just work", but also be obvious for the user to see how it works.
* Treat conflicting changes well (for example, if you lose internet connection on a mobile). Maybe something similar to how git does it: let the use choose?
* Oh, yeah, about lost connections: caching on the clients. All cached data should always be encrypted on the disk (hm, I guess it would conflict with auth by SSL?).
But, it reminds me, there also must be a way to easily link one note to the other you wrote. Which isn't always available.
Which IMHO is the reason why no software for personal managment of stuff will ever be good enough. We all want the perfect tailor-made suit to work with, but we don't wanna go to the tailor and pay for it. And even worst, we grow, we change, so custom-made solution today might not do it tomorrow.
I think for that reason applications with a programatic approach are the real solution for organization like notes or tasks. Something scriptable is a good start for this.
[1] https://github.com/fabiospampinato/notable#comparison
I think contributing to it should be easy enough, one just has to edit this [1] HTML file. It was a plain Markdown/ASCII table earlier, but since it's quite wide it wasn't looking too good.
[1] https://github.com/fabiospampinato/notable/blob/master/resou...
It's iOS specific but the features might let you filter by features you need;
http://brettterpstra.com/ios-text-editors/
But this does work with mobile which is key...
That if you mean something like this: http://notes.sciter.com/wp-content/uploads/2019/01/notes-dra...
Works with any browser, no plugins required.
https://standardnotes.org/extensions
(I suppose other OS's have similar shortcuts as well, so if you use something else, this might be worth Googling for.)
Otherwise, I think Pocket might be exactly scrapbook-collector-type thing you're looking for?