I'd love to see "sync with git" become a standard app feature.
Too many app developers realize they need some kind of shared state "in the cloud" and end up with a database and a backend server. Many of them would be better off if they had a reliable way to push the state management to a user-controlled space, like a git repo or Dropbox
1. Decent desktop apps to sync the data, not everyone is comfortable hacking a Cron script. I've started with that - https://GitHub.com/GitJournal/git-auto-sync - but it's in the early stages.
2. For mobile apps, a way to drastically reduce the overhead. Cross compiling libgit2 + deps + NDK is a major pain, and jGit uses more modern java features so you need to target a higher version of Android. (This was in early 2019, when I first started GitJournal)
3. There is no competing with a simple http call vs the complexity of git. Plus the entire onboarding process.
4. Many many apps do write to Dropbox or Google Drive, but for me that's not a win as you aren't in control of your data.
5. While hosting your own git server is arguably easier than self hosting anything else, the majority of users in GitJournal (more than 80% use GitHub, this was about a year ago.) There is also a bias as people who self host are more likely to switch off the analytics. I don't send any message when analytics are switched off, so I don't know.
6. We need end-to-end encryption in Git, like keybase was providing, but open source and hostable in any git repo. I started a proof of concept of a custom remote where I just write all the git objects to another git repo, but haven't gotten very far.
Hi Vishesh, I installed the app on ios just now and tried to connect my repo on GitHub. It failed with the error - MissingPluginException (No implementation found for method gitClone on channel gitjournal.io/git)
I’ve requested a refund. But please don’t take that as discouragement. I want this workflow (editing markdown notes synced to git) very much. I’ve tried various ways to hack it, like connecting 1Writer (editor) to Working Copy (git client). Although both apps are very slick, the integration is not.
Editor apps are also reluctant to provide git integration for the reasons you listed, plus it will reduce future revenue from a hosted solution they could offer. I’m not too optimistic that there will be many apps in this space. That’s good news for you!
My apologies, I introduced a bug and didn't expect this to get posted on HNs. The fix is pending review on iOS, so hopefully you should receive it soon. (Version 1.85.1 has the fix)
Regardless, I'd love it if you could reach out to me (vhanda at gitjournal.io) and explain your workflows, additionally, I'll be happy to provide you some coupon codes so you can try the basic version of GitJournal without paying. Especially considering your horrid experience.
Even when 80% use one platform, the fact that you can very easily switch between platforms (commercial or self-hosted) is of significant value—vendor lock-in is completely eliminated.
Syncthing works well when devices can find each other (usually over mDNS) and are online simultaneously. After dealing with an entangled mess of introducers and devices, I decided to setup an old phone running Syncthing-Fork as root (otherwise mDNS doesn't work on Android), use it as a central introducer and always-online file host, and put my shared files there. It works pretty well, but I still run into cases sometimes where one client learns of the existence of files from another device, but the other device is offline and my central server doesn't have copies of them.
For locally shared documents, I sync them with Syncthing and edit them on Android in Markor, and it works pretty well.
I got different markdown editors on different devices and didn't want to use a public / cloud hosted git repo for my notes.
It works fine, as long you don't get in contact with iOS.
I got many devices and often let it sync my phone when I'm at home, because I'm struggling already enough with battery lifetime.
I also got it running on one of my dedicated servers, so I got an offsite backup, with systemd you can set it on autostart after an internet connection was established, so I don't really have to manage it anymore and I only see it basically in the logs of the packages that I update.
That's awesome. I use it pretty much the same, only I sync the root of my phone data too. So I can take a photo on my phone and have it pop up on my computer, ready to use.
My only small tip for readers here is be careful treating any node as a safe backup.
A device that accidentally deletes everything in a folder will propagate out if you don't notice it happened.
But TBH in practice (as a very heavy user for my usecase) it's very rare, and a traditional backup system will cover you perfectly.
These are great points:
I also feel that one other big problem with notes is organizing them properly as number of notes increase. Since git has history for all your changes you can easily delete anything that is not important right now.
I am building a side project exactally to solve this problem. It has auto sync also. The plan is to add search functionality that can search accorss the history of all the notes.
https://upnotes.io
Also in upnotes we are using your local git command and I am planning to add encryption with your public key for few subfolders.
Create a note by pressing plus, select share and click OK. Now you got two notes in the app that are copies.
The first few minutes are the most important for an application. It should not fail and do as advertised. So far, this feels not fully tested or even UI tested. This would not lead to an easy upgrade to 'Pro'.
Note: removed statement about not intuitive of Git syncing. This is hidden in the hamburger menu instead of being part of the initial view and options.
The Git model is to version everything together. This means that a conflict blocks the entire repo until it's fixed.
In many situations, it's better to version separate pages/items/notes separately, and have a conflict to a single note leave the rest of your repo working and syncing.
sync to git isn't perfect. I use Google Keep, which, like docs, I can have the same document open on multiple machines, start editing on one, finished editing on the other, no "commit/push/fetch/rebase/merge" cycle required.
The typical scenario for me is start typing something in and then get interrupted (notification, time based appointment, someone needing my attention), when I get back to entering I might be at a different machine (like started on my phone, got interrupted, then sitting at my computer and remember to finish).
Git stores the entire history of text files. Very few apps need the history feature. Leaving the feature in place may take much disk space, and actually removing files no longer needed is a pain in git, git is not designed for that use case.
I do agree that a standardized sync protocol and file format that could be pointed at any arbitrary server would be terrific. I just disagree that git is that format for many use cases.
To be honest I'd rather love to see "select folder for storage" become a standard app feature. Then I could just use whatever app I want to synchronize the files (in my case probably Syncthing). Integration of $APP_FEATURES and $SYNC_BACKENDS in apps is a major waste of developer resources and it also means that, as a user, I can never freely choose the app based upon its intrinsic features but also always have to keep synchronization in mind.
The iOS editor Runestone takes this approach. I’ve installed Möbius Sync on the device, with both apps pointing at the same folder to create a syncthing conduit with my Mac.
I wish we just had save to textual flat file as a more common standard app feature (which is simple/easy) and a plethora of separate apps that did the syncing from that (hard - conflicts/authentication, but only needs to be done once for all apps).
I have the git syncing tools but most apps dont save to flat file and the ones that do tend to require hitting export -> backup.
That’s a great idea. Although key management might be a problem. Also, you might have conflicts if you try to push from one device after having previously pushed from another device.
Conflicts aren't specific to git. Git offers a history of those conflict resolutions though, which lets you correct them if they were not done right.
I used to store my DayOne journal in git, and boy, their cloud sync conflict resolution was sometimes quite destructive. Having the git history showed me that, and allowed me to correct it.
Hello people of HN. I'm the author, and didn't expect this to get posted here as I introduced a bug in the iOS version where cloning a repo might fail if it doesn't have a single note.
Sorry about that. A bugfix version will hopefully be soon available.
Hi I am interested in how the git functionality works. How do you let the users deal with potential merge conflicts? How often do you commit and push? With every character that is typed or after the document is closed? Are branches used at all or do you stay on one main branch?
- I just use the local version always and don't deal with any of the conflicts. It is however in the top 10 issues to fix.
Since the history is still preserved, no data is lost.
- I commit and pull + push each time a note is modified / created / deleted. And whenever you pull to refresh or tap the sync button. Optionally, this can be disabled, and it will only pull+push when you press the button.
- I only stay on the main branch, the user has an option to switch branches. I have no plans and no requests / use-cases for doing anything more with branches.
There have been bugs (still unresolved) about restoring purchases, in each case, the users have written to me, and I've immediately provided them coupons or a workaround.
Regarding stability, there sadly are some crashes on ios which I haven't managed to figure out at all. I'm planning a big move next week where I bump the version of libgit2, since I'm lagging behind by almost 1.5 years now, and I want to make it a regular occurrence. I'm hoping that will help with the stability.
My initial (and even now) aim with GitJournal was to satisfy 2 of my needs - A good journalling app where I have control of my data. I used to use Journey [0], but they kept adding more and more cruft, and having to export my data + relying on Google wasn't something I liked. The other is Google Keep. I still have a long way to go to get their level of usability though. Things just feel so much nicer in Google Keep.
Now, since I've been using Obsidian more, I'm starting to incorporate more features from it. So UI is a mix of all 3.
I just noticed that the screenshot carousel in the website is broken.
Obsidian on desktop and GitJournal on mobile (android then iOS) has been a winning combination for me!
Thank you for developing this app and for being so responsive to support requests Vishesh!
One small discrepancy between the 2 products is that GitJournal handles the file’s title as both the filename and an h1 inside it, while Obsidian doesn’t sync both by default IIRC. I’m using an obsidian plugin to keep them in sync (i.e. overwrite one when the other changes). I think GitJournal has the correct default behavior but with how popular obsidian is, a setting to behave like obsidian might be useful. My 2 cents.
Obsidian, despite not being open source, has been my favorite cross-platform, organizable Markdown editor. It's easily synchronized with git, which gives it so much potential.
The next biggest wish I have is for inclusion and management of binary files. Photos, videos, etc. It'd be nice for them to not be in the git repo, but to still be distributed, addressable, annotatable, and with some kind of cross-platform UI (Linux, Windows, Mobile, Web).
Even better if it's easy to automate workflows to publish to a public personal wiki / blog / website.
I wonder if it would be reasonable to use git LFS for these kinds of binary files. Would that work with GitJournal? I've heard stories that git LFS is 'bad' somehow, but I'm not familiar with why and I wonder how applicable those issues would be to this kind of use-case.
GitJournal doesn't yet support LFS, and since neither libgit2 or go-git supports it, it's unlikely that I'll implement it. (last I checked it wasn't supported, maybe things have changed).
I do, however, want to support partial clones and easier tools to cleanup the history and reduce the repo size.
libgit2 already supports filters and that’s all you need to build lfs support (actually, you don’t even really need to use them if you don’t want to). Lfs itself is not a feature of git. It’s a specification that defines a protocol for replacing large files with pointers (via the use of the smudge and clean filters) and uploading said large files to another location.
Source: I am the cofounder and former CTO of forestry.io, a git backed content management system, and I implemented lfs support in conjunction with libgit2 in that product about 4 years ago.
I see an old issue about LFS [1] that seems to indicate code exists to support it, but it's supported as an extension not a built-in feature; I guess that means a separately loading a shared library and setting function pointers in libgit2 structs (not even sure how that would work on mobile platforms).
I'm not super familiar with LFS beyond its name and stated intentions, but after a cursory review it seems to be extremely manual/tedious, so much that it makes git itself look like a paragon of automated magic and user-friendliness. Maybe that's an unfair assessment, or maybe it could be made automatic, but I'm less sure that its the solution I'd want.
The use case I'm interested in is similar to the comment above "binary files. Photos, videos, etc", What I was hoping for with LFS would be like a thin clone of all my personal files where some files are only present in name with their contents downloaded on-demand on some devices. So I'm not sure if history pruning would help my use-case much.
What I'm pushing for is open formats + git for sync. That way, you can easily combine different tools. GitJournal is never going to do everything, the note taking app world is way too complex.
Instead, my plan was for GitJournal to be one other tool in your workflow.
I'm a fairly happy user of Joplin - it's great if you want a synchronised cross-device markdown editor!
I write "fairly happy", because there is a longstanding issue with the Android app where notes that have more than 10 lines start to experience crazy lag when editing. So I mainly use the desktop version for writing.
I bought this for iOS a couple years ago and was happily using it until some of the features got moved behind a pay wall. To have an app that I paid money for suddenly start charging for features that I already bought was super annoying. Hopefully they have rethought that move by now but it was enough to turn me off of it.
Thanks for the response. Maybe I’m remembering the features being moved incorrectly. Regardless, I did feel cheated because I had just paid money for the app and now it was asking me to pay more money for what I thought I had just bought.
I didn’t realize this was open source (maybe it wasn’t 2 years ago?). Also, it was 2 years ago. There’s no way to get a refund from apple.
I’ll be honest, I just wanted to caution people so that they knew it had to be paid for twice. However, I see that it is now free from the App Store with an in app pay to upgrade. That’s definitely better than the experience that I had. So good job changing that.
Edit: it isn’t free on the apple app store. I failed to realize that I t shows as free for me because I already purchased it of course.
Maybe it's cause I had earlier experimented with a subscription instead of paying once for the new features.
Shoot me an email please, I'll provide you with some coupon codes so you can get the pro features without paying, just in case you want to try it out again.
I read your 'About me' section, and how you are a privacy enthusiast.
How does this hold up with storing notes in Git (which usually means syncing to github etc.)? I mean of course you can self-host to keep your notes privately, but does this support encrypted notes?
I imagine git history works poorly if notes are encrypted.
Both are extremely useful secrets oriented git tools with support for things like PGP encryption. Both will encrypt with multiple keys too, making sharing relatively easy. The android pass app even manages SSH keys for pushing and pulling. There may be good inspiration in those repos, or even code you can borrow.
Also, thanks so much for making this: it is elegant and lovely. Keep it up!
I started going down this route [0], but I very quickly realised the additional overhead of the tooling was not very user friendly. In the end, I'm trying to write a custom git remote which will encrypt everything, similar to how keybase works.
Internally, the idea is to just encrypt all the git objects, one per file, and store those in a git repo. It could also be stored in S3, as storing it in a repo doesn't help, but Git Repos have the least vendor lock-in.
You can basically call `git-auto-sync daemon add`, and it will register itself as a systemd user process (on Linux, other OSs are also supported), and monitor that folder for changes + poll every x minutes.
It's still in the early stages, but I'd love to get your feedback.
Edit: Or you can just call `git-auto-sync sync` to commit + pull / rebase + push.
The github sync functionality of this app excited me, because my current workflow is:
1. Open MGit and pull changes from origin main
2. Open Markor and make changes
3. Switch back to MGit and commit and push changes
Unfortunately this app doesn't hold a candle to Markor when it comes to editing and navigating.
- Navigating links between files is a pro feature
- There is no markdown syntax highlighting while editing
- There is no way to favorite or bookmark files to easily navigate to them
As someone who uses GitHub and Markdown as a personal wiki this app doesn't have the features required to be usable for me.
Looks like MGit will continue to be an unfortunate part of my life.
Not parent but i feel i share some of his concerns: an even better markdown editor would be nice.
The current one is better than a lot of others but would love if it eventually supported more markdown concepts.
Personally i have these things that bother me:
* an option for a fixed width font in markdown editor (i like the look of the raw editor but i like the convenience of the markdown one)
* code syntax highlighting
* creating/changing tables with less effort
* very aggressive quoted text styling in light mode
Are the gitjournal files compatible with Github/Gitlab wiki repos?
I have always used the builtin wiki from Github/Gitlab to achieve similar note taking. But attachments and links (to and between folders) are a pain to get right ;) So I'd be interested in an app that helps there.
I love GitJournal, used it to plan and organize two month-long trips in the recent past. It was very nice to edit on my laptop, use my standard git workflow to push and sync, then have it on my phone - and then make quick edits which were easy to get back on my laptop.
Would love if https://github.com/GitJournal/GitJournal/issues/352 were prioritized, though. Making adding new repos easier would be a big deal for my workflow, as I have multiple customers that all need their own repos, sometimes more than one.
If you're only on Apple devices, Bear notes is an extremely consistent, scalable, and stable alternative.
In terms of polish, it's comparable to Craft, but with only the feature-set of Markdown.
A few things are missing such as tables and backlinks.
It uses an SQL database for performance reasons, but export to Obsidian is possible within minutes.
Indeed, while other file-based alternatives such as NotePlan fail to deal with my 5000+ notes, including images and attachments, Bear is still as smooth as on day one.
Just don't expect new features any time soon. The Bear team has been working on the next version for years, with no end in sight.
Scary obligatory warning: Panda is alpha software (and probably not something that you should trust with your notes). The table support in Panda is nice though.
I've been looking for an app like this so I could mark quotes in a book I'm reading, save all the quotes under the book's url and then have these quotes highlighted when I open that url again. The second part needs an extension, but the first part can be done via the browser's "share" button in the context menu, but currently it forgets the url when creating the note.
This is so close to my idea for the ideal note-taking app (that I never tried to make). I discovered it a couple of months ago and used it to plan a trip around Europe: research and write up on desktop, refer and make quick changes on phone.
The monetisation options are incredibly user-respecting too. Although I don't need the Pro features, I'm on the monthly subscription just to support the project.
I was going to ask about vimwiki compatibility but based on a read through of the github it looks like it should basically work. It also looks like the author is aware https://github.com/GitJournal/GitJournal/issues/436
According to Reuters, up to 1,500 businesses were affected by ransomware attacks last year. Another report by the Institute for Security + Technology found that the total amount paid by ransomware victims increased by 311% in 2020, reaching nearly $350 million worth of cryptocurrency. It therefore begs the question – what happens when organizations are hit by a ransomware attack? Is paying ransom a good idea? What happens if companies pay ransom to restore data? How can companies prepare to safeguard from ransomware attacks?
I've been using this on my Android device, but have been thinking of making a simple web front end. Having to manually work with git on the desktop adds a lot of friction.
~9-11 months ago moved my confluence content to git repo and install on my mobile devices gitnex (gitea mobile app) and since that i use that for notes and wiki.
I tried experimenting with running a background async job every 'x' minutes, but encountered problems with Flutter + background tasks so I put it on hold.
I haven't yet integrated a third party payment mechanism, so I can't really add it to the official FDroid Repos. Till then, I maintain my own repo - https://gitjournal.io/fdroid_how_to/
The updates are auto-synced with the Android updates, so you'll always get them at the same time or sooner.
This looks great! Free software under the AGPL, too!
For my own notes, I've mostly been using Markdown, which doesn't have fenced code blocks, but I've been thinking I might upgrade to a different language like CommonMark or GitLab-Flavored Markdown that does support them. One of the main reasons is the possibility of embedding non-text things in my notes; for example, the other day I was messing around with exact pole-zero cancellation in DSP in https://nbviewer.org/url/canonical.org/~kragen/sw/dev3/pole-..., which involved a lot of TeX equations and data plots of algorithmically generated output. Jupyter notebooks can do those things, but they have a number of extremely serious drawbacks for this sort of thing, such as irreproducibility, aggressively backwards-incompatible file formats, lack of interactivity (despite ipywidgets), unacceptably large "source code" file size, and spurious merge conflicts in Git.
An interesting approach to solving this problem is Mermaid (https://docs.gitlab.com/ee/user/markdown.html#diagrams-and-f...), which lets you include a ```mermaid fenced code block in your Markdown source and replaces it with a rendered image of a boxes-and-arrows diagram in the HTML output. This is sort of backwards-compatible with regular GLFM because things that don't support Mermaid just show the diagram's source code. Mermaid's "flowchart" diagram type is vaguely similar to Graphviz, but I think Graphviz has better syntax and nicer output, so I'd rather use Graphviz for this; Mermaid also has Gantt charts, UML diagrams, sequence diagrams, and entity-relationship diagrams.
GitLab also supports language-tagged fenced code blocks for "math" (KaTeX's subset of LaTeX), "plantuml" (disabled by default, does UML diagrams), and Kroki (also disabled by default, supports Graphviz, Ditaa (warning, domain stolen by SEOs) for flowcharts, Wavedrom for digital timing diagrams, Vega-Lite for data plotting with interactive exploration from JSON, Svgbob for a fairly comprehensive set of ASCII-art line drawings, Burntsushi's Erd for entity-relationship diagrams, bytefield-svg, Pikchr for PIC-like things, several different ASCII-to-UML things, and another dozen or so other similar things).
Pikchr, from the Fossil/SQLite folks, is also designed for embedding in GFML and similar Markdown-derived languages, even without Kroki.
But most of these are just data formats, rather than rich data models or executable code like I'd need for the DSP algorithms I mentioned above. The closest thing I've found for that is Yihui Xie's R Notebooks: https://bookdown.org/yihui/rmarkdown/notebook.html where you can put fenced R code blocks into your Markdown and display the output inline both in the RStudio IDE and in the final rendered document. This still has Jupyter's problem with reproducibility, but solves the problems with massive source files, file-format backwards compatibility, and spurious merge conflicts.
However, R Notebooks require you to write your code in R, which isn't ideal for all purposes, and as far as I know the rendered results don't have a way to do Vega-style or ObservableHQ-style interactive exploration. Also, pretty often I find it easier to sketch a diagram with a pencil than to write code to produce it.
And, for things like analog circuit schematics or 3-D models, while a compact textual representation is achievable, it often isn't the ideal user interface for editing. Mermaid Live, OpenSCAD, and dot -Tx11 filename.gv are three approaches where the text-to-picture flow is one-way, and while they're pretty great, you still spend a fair bit of time hunting through source code for the thing you want to edit and trying to diagnose syntax errors.
So I'd like to have a note-taking system that supports Git and Commonmark, reproducibility so that I don't need to check in giant binary files representing render outputs, plug-in visualizers for different kinds of quasi-textual content, and plug-in editors for editing things like 3-D models, circuit schematics, and 2-D sketches. And I'd like to be able to do things like run a SPICE simulation of a circuit schematic, a FEM simulation of a 3-D model, or a numerical integration of a Modelica model.
Is there anything like that out there? What are the alternative approaches to this kind of algorithmic exploration such as ObservableHQ?
The DSP notebook I mentioned above also includes an input audio sample and several processed versions of it, which you can't hear in the online Jupyter notebook viewer but you can hear if you run it locally. The input audio sample would pretty much have to be an external file, same as a photo, but ideally the processed versions could be recomputed reproducibly rather than stored in Git and copied around all over the net.
There is basic support because of another open source org mode app - Orgro (https://orgro.org), - the author was even gracious enough to relicense his code away from GPL, so that I could use it. since GitJournal is shipped on the iOS store and GPL would not be compatible.
However, GitJournal internally expects everything to be markdown + yaml. So anything else are hacks I've done on top. At some point, I want to refactor and remove this hard dependency on Markdown.
Edit: I mistakenly thought the app was Orgzy. I've updated the comment. Sorry.
GPL seems to be incompatible with the iOS store as that places some extra restrictions on it. [0] [1]. Some GPL apps such as KDE Connect have a special exception in their license for the ios App Store. [2]
Too many app developers realize they need some kind of shared state "in the cloud" and end up with a database and a backend server. Many of them would be better off if they had a reliable way to push the state management to a user-controlled space, like a git repo or Dropbox