Mobile first Note Taking integrated with Git

Overview


Mobile first Markdown Notes integrated with Git

Get it on Google Play Download on the App Store

Build Status License: AGPL v3
Donate Paypal Sponsor via GitHub

This project receives generous infrastructure support from

Summary

GitJournal is a note taking app focused on privacy and data portability. It stores all its notes in a standardized Markdown + YAML header format (optional). The notes are stored in a Git Repo of your choice - GitHub / Gitlab / Custom-provider. This means you can easily self host or host your notes in one of the many Git providers.

Features -

  • Can be used with any Git Repository
  • Allows categorizing Notes based on Folders
  • No Account Required
  • Open source

Community

Screenshots

Migrating from Existing Apps

Contributing

Please feel free to open an issue for any bug or feature request. Additionally, you can vote on existing Issues by reacting with a ' 👍 '.

License

Most of GitJournal code is licensed under AGPL, however the documentation (including this file) and translations are under a Creative Commons Attribution 4.0 International License.

Comments
  • Improve Git Merge mechanism

    Improve Git Merge mechanism

    With either auto sync or manual sync, the app will overwrite changes pushed from the desktop.

    Expected behavior:

    The app should either lock the notes until the sync has finished in the case of auto-sync, or simply duplicate the file, one copy for desktop changes, one for mobile. Or even attempt to merge.

    Current behavior:

    See title.

    Steps to reproduce

    Enable auto sync in GitJournal.
    From the app, press the back button to exit to home screen.

    My desktop is synced to the same git repo.
    Add text to some files from the desktop text editor. One of the files is named 'test.md'.
    Save, commit, push.

    After some time, open GitJournal and edit test.md without waiting for the sync icon to finish.
    Press 'back' to close the note and stay on the note list screen.
    Git Journal will do a merge that overwrites the changes done on the desktop.

    Manual sync case

    Disable auto sync in GitJournal.
    Create a test file named "text.txt" on the desktop.

    Enter the contents:

    Desktop test 1.
    Desktop test 2.
    

    Git add, commit, push.

    Sync GitJournal so we have the file there.

    From the desktop add a line between the existing 2.

    Desktop test 1.
    Desktop test 1.1.
    Desktop test 2.
    

    Git add, commit, push.

    From GitJournal add a line between the existing 2, without sync.

    Desktop test 1.
    Journal test 1.1.
    Desktop test 2.
    

    Sync GitJournal by swiping down.

    Result: The line "Desktop test 1.1." will have been replaced by "Journal test 1.1."

    This simulates editing a note when no cell signal is available, in a subway, in the countryside etc.


    Please vote on this issue with a 👍 reaction. It's one of the primary mechanisms used to prioritize issues. Please also subscribe to the issue if you're interested, as that way I can discuss possible implementations and share mockups.

    opened by ovichiro 41
  • Sync after inital clone doesn't work

    Sync after inital clone doesn't work

    Environment

    App version:
    Device information:

    • OS name and version: Android 10
    • Manufacturer: Nokia
    • Model: 7 plus

    Description

    Expected behavior: Changes in notes are pushed/fetched to git repo

    Current behavior: After initial synch, no longer pushes or fetches with the repo.

    Steps to reproduce

    Version 1

    1. Follow automatic git setup of gitjournal
    2. Choose existing repo
    3. Successfully first sync/clone
    4. Add document/change document and automatically let sync happen / manually trigger sync
    5. Check git repo for changes

    Version 2

    Same as Version 1, with the exception of manually creating deploy key with write rights.

    Version 3

    Same as Version 1, with the exception of manually creating a general key with write rights on all repos.

    Logs
    09:27:05 Got Exception Exception: Current Branch null #0 GitNoteRepository.merge (package:gitjournal/core/git_repo.dart:190) <asynchronous suspension> #1 Repository.syncNotes (package:gitjournal/repository.dart:188) <asynchronous suspension> 
    

    Full logs:

    {"t":1607622700301,"l":"i","msg":"--------------------------------"}
    {"t":1607622700301,"l":"i","msg":"--------------------------------"}
    {"t":1607622700301,"l":"i","msg":"--------------------------------"}
    {"t":1607622700301,"l":"i","msg":"--------- App Launched ---------"}
    {"t":1607622700301,"l":"i","msg":"--------------------------------"}
    {"t":1607622700301,"l":"i","msg":"--------------------------------"}
    {"t":1607622700301,"l":"i","msg":"--------------------------------"}
    {"t":1607622700301,"l":"i","msg":"AppSetting {onBoardingCompleted: true, collectUsageStatistics: true, collectCrashReports: true, version: 0, proMode: true, proExpirationDate: 2021-01-07T00:10:34.148Z, pseudoId: aaa9520a-847f-480d-8a2a-117636b95740, debugLogLevel: v, experimentalFs: false, experimentalMarkdownToolbar: false, experimentalGraphView: false, experimentalZeroConf: false}"}
    {"t":1607622700308,"l":"d","msg":"Analytics Collection: true"}
    {"t":1607622700312,"l":"d","msg":"Event.Settings"}
    {"t":1607622700312,"l":"i","msg":"Setting {noteFileNameFormat: FromTitle, journalNoteFileNameFormat: FromTitle, yamlModifiedKey: modified, yamlCreatedKey: created, yamlTagsKey: tags, customMetaData: , yamlHeaderEnabled: true, journalEditordefaultNewNoteFolderSpec: , journalEditorSingleNote: false, defaultEditor: Markdown, defaultView: Standard, sortingField: Modified, sortingOrder: desc, remoteSyncFrequency: automatic, showNoteSummary: true, folderViewHeaderType: TitleGenerated, version: 2, markdownDefaultView: Last Used, markdownLastUsedView: Edit, homeScreen: all_notes, imageLocationSpec: ., zenMode: false, saveTitleInH1: true, swipeToDelete: true, inlineTagPrefixes: #, emojiParser: true, folderName: journal, bottomMenuBar: true, storeInternally: true, storageLocation: , sshPublicKey: true}"}
    {"t":1607622700326,"l":"d","msg":"Event.RepoSynced"}
    {"t":1607622700328,"l":"i","msg":"Checking if ProMode should be enabled. Exp: 2021-01-07T00:10:34.148Z"}
    {"t":1607622700328,"l":"i","msg":"Not checking PurchaseInfo as exp = 2021-01-07T00:10:34.148Z and cur = 2020-12-10T17:51:40.328094Z"}
    {"t":1607622700364,"l":"i","msg":"Finished loading the notes cache"}
    {"t":1607622700369,"l":"v","msg":"Ignoring file","p":{"path":"/data/user/0/io.gitjournal.gitjournal/app_flutter/journal/.dendron.version","reason":"IgnoreReason.HiddenFile"}}
    {"t":1607622700369,"l":"v","msg":"Ignoring file","p":{"path":"/data/user/0/io.gitjournal.gitjournal/app_flutter/journal/.gitignore","reason":"IgnoreReason.HiddenFile"}}
    {"t":1607622700610,"l":"d","msg":"Received Share with App (text): null"}
    {"t":1607622700907,"l":"d","msg":"Saving the NotesCache"}
    {"t":1607622700939,"l":"i","msg":"Finished loading all the notes"}
    {"t":1607622701828,"l":"e","msg":"Got Exception","ex":"Exception: Current Branch null","stack":"#0      GitNoteRepository.merge (package:gitjournal/core/git_repo.dart:190) <asynchronous suspension> #1      Repository.syncNotes (package:gitjournal/repository.dart:188) <asynchronous suspension> "}
    {"t":1607622701831,"l":"v","msg":"Ignoring file","p":{"path":"/data/user/0/io.gitjournal.gitjournal/app_flutter/journal/.dendron.version","reason":"IgnoreReason.HiddenFile"}}
    {"t":1607622701831,"l":"v","msg":"Ignoring file","p":{"path":"/data/user/0/io.gitjournal.gitjournal/app_flutter/journal/.gitignore","reason":"IgnoreReason.HiddenFile"}}
    {"t":1607622701859,"l":"d","msg":"Synced!"}
    {"t":1607622701866,"l":"d","msg":"Saving the NotesCache"}
    {"t":1607622706572,"l":"d","msg":"Event.DrawerSettings"}
    {"t":1607622710924,"l":"i","msg":"No log file for 2020-12-09 18:51:50.924100"}
    
    critical 
    opened by mebu83 33
  • [WIP] Project Sustainability

    [WIP] Project Sustainability

    Sustaining an Open Source Project can be challenging in the long term. The idea with GitJournal is to be a 100% Open Source Project - No Open Core model. Here are my current ideas on how to sustain this in the long term -

    1. Paid Pro Version - Some Advanced features could require payment. The source code for these features would still be available here, and users are free to install a version with all the features unlocked - but the versions on Google Play Store and iOS would require payment.

    2. Encrypted Git Hosting - Another idea was to provide paid end-to-end encrypted Git Hosting which could be used to store the notes. This way GitJournal could compete with Standard Notes.

    This issue is for other suggestions on how to sustain this project in the long term.

    opened by vHanda 25
  • remote changes to notes not being picked up until app is restarted

    remote changes to notes not being picked up until app is restarted

    I've been testing out remote editing of notes. The app seems to pick up the addition of new notes created remotely without problem. However, it seems to fail to pick up edits to existing notes until the app has been restarted. So it seems that it picks up the git updates, but that what's displayed is a cache of the note contents from when the app was first opened. If I close the app, and then reopen, then the remote edits are visible.

    opened by jrollins 20
  • Add option to move the application from internal memory to sdcard

    Add option to move the application from internal memory to sdcard

    Or we have an option for this on the app ?

    Another possibility is move the files from git (repository) to sdcard.


    Please vote on this issue with a 👍reaction. It's one of the primary mechanisms used to prioritize issues.

    blocked android 
    opened by ataliba 18
  • Unable to store the repository externally

    Unable to store the repository externally

    Environment

    App version: 1.74.1+2278 (play store) Device information:

    • OS name and version: Lineage OS 17.1 (Android 10)
    • Manufacturer: Xiaomi
    • Model: Mi 9T

    Description

    Expected behavior:

    The repository stored on Internal Storage, Notes folder (use existing notes).

    Current behavior:

    The app asks for permissions to the selected location (Internal Storage/Notes). Then it changes the location from private "journal" folder to public "journal" folder in /storage/emulater/0/Android/data/io.gitjournal.gitjournal/files/GitJournal/journal, but not to the selected location on Internal Storage (/storage/emulated/0/Notes).

    Steps to reproduce

    1. Go to Settings
    2. Turn on Store Repo Externally
    3. Select [Internal Storage]/Notes, for example
    4. allow access
    5. observe the Repo Location setting

    Others

    Logs
    16:38:52 Moving repo to /storage/emulated/0/Android/data/io.gitjournal.gitjournal/files
    16:38:52 FilePicker: Got /storage/emulated/0/sync/notes/org but it is not writable
    16:38:52 ExtStorage: Got /storage/emulated/0 but it is not writable
    

    Based on the log, it seems that the app never tried to change the location to the selected one, but instead just requested/got the Shared Storage permission. The required request is probably this.

    References:

    • https://developer.android.com/training/data-storage
    • https://developer.android.com/training/data-storage/shared/documents-files
    • https://developer.android.com/training/data-storage/shared/documents-files#grant-access-directory
    • https://developer.android.com/reference/android/content/Intent#ACTION_OPEN_DOCUMENT_TREE
    • Example: https://android-er.blogspot.com/2015/09/example-of-using-intentactionopendocume.html
    • https://stackoverflow.com/questions/54322030/storage-permission-in-flutter
    • https://github.com/flutter/flutter/issues/63282
    • https://stackoverflow.com/questions/50561737/getting-permission-to-the-external-storage-file-provider-plugin
    duplicate 
    opened by alensiljak 16
  • The changes aren't reflected in my repo.

    The changes aren't reflected in my repo.

    As I had this issue https://github.com/GitJournal/GitJournal/issues/363, I made a fresh repo with only one branch. The app was able to detect the folder and cloned it as well. But, when I made changes in the files, it shows synced - shows the pull and push as well. I see nothing in my Github Repo. Not one push. Also, changes I made from my PC into git aren'r reflected in the app.

    opened by dummifiedme 16
  • sorting by last modified not working

    sorting by last modified not working

    sorting by last modified seems not working, the actual order is changing every time i open the app or click one note then back to the all notes view. lots of my notes have the same modified time in yaml header (manually edited when i first import from another app), maybe it's related to this issue.

    opened by feng1st 15
  • Manually provided keys don't always work [generated via OSX]

    Manually provided keys don't always work [generated via OSX]

    Just spotted this:

    if (!val.startsWith("-----END RSA PRIVATE KEY-----")) {
    

    https://github.com/GitJournal/GitJournal/blob/master/lib/setup/key_editors.dart#L35

    It actively prevents me from even trying GitJournal.

    duplicate 
    opened by tzvetkoff 15
  • Enabling

    Enabling "Store Repo Externally" does not work correctly (the selected directory is not used)

    Environment

    App version: 1.73.2+2064 Device information:

    • OS name and version: Android 10
    • Manufacturer: Lenovo/Motorola
    • Model: Moto G 5G Plus

    Description

    Expected behavior: The app opens normally, or at least shows an error message.

    Current behavior: The app shows the loading screen (GitJournal logo on white background) and never goes forward.

    Steps to reproduce

    1. Open a fresh install of the app
    2. Enable "Store Repo Externally" in the settings
    3. Close and re-open the app

    Others

    I'm running the Google Play version, so I don't have logs, sorry.

    The only way to successfully open the app again is to delete all app data (not just cache).

    I'm not sure if "external" refers to an SD card or not. I don't have an SD card in my phone, but as far as I know, /storage/emulated/0 should point to internal storage (where I have my downloads folder, etc.). And in any case, the app should be able to recover from this.

    opened by kankaristo 14
  • Fatal error in setup

    Fatal error in setup

    For some reason the app became unresponsive so I did a data wipe and went to reinstall the app.

    Both manual and automatic setup fail with the following:

    Failed

    Not a Git Repository: /data/user/0/io.gitjournal.gitjournal/app_flutter/journal

    Any idea what's happening? Am I doing something wrong?

    duplicate 
    opened by edbock 13
  • [feature request] Consider only one folder in a git repository (eg.

    [feature request] Consider only one folder in a git repository (eg. "docs" folder, standard mkdocs structure)

    Hello, I would love GitJournal to support setting a subfolder as the base directory, considering all the links relative to that folder and excluding files outsides that folder.

    In my setup, I am using mkdocs and all my notes are in the "docs" subfolder (standard structure). This is not compatible with gitjournal because I define all the links relatively to that subfolder, eg "docs/folder/note.md" becomes "folder/note.md". There are also other files in the repository but they should be excluded from gitjournal (it is not a problem if they are downloaded).

    opened by paolobasso99 0
  • Note is cleared on app load

    Note is cleared on app load

    Hi,

    I've seen this symptom twice now, where when I open the app, the first note (whatever it happens to be) is completely cleared and replaced with empty content (no title, no file body). This results in an empty note at the top of the note list where I know the most recent note should be. The behavior is non-deterministic but happens maybe one out of every 20 to 50 (or maybe 100) opens of the app based on my usage and the time frame in which it occurred.

    If I immediately close the app and uninstall/reinstall, and reload the repository, things are fine and my data is restored. But I didn't realize this the first time and tried to sync the app, and it created a commit where it wiped the contents of the file and pushed that up to the Git repository. I'm pretty sure I tried killing the app in the Android task manager first and that didn't help, whatever state the app was tracking was already corrupted at that point. I had to go into the Git repo and manually push a revert commit to get it back. (For the record, I just went back in my Git history to check, and the file was not deleted, but replaced with an empty, zero-byte file.) I have the Git foo to do this, but other users might not, so while it's good that GitJournal always has a safety fallback (no data is ever truly gone), it would be better to avoid this in the first place.

    I'm on Android with app version 1.85.2+3617. The first time I saw this behavior was on December 7, 2022, but I also saw it just a week ago or so. Happy to provide any other context that's required.

    Thanks for GitJournal!

    opened by elliottslaughter 0
  • Can't write to external storage

    Can't write to external storage

    Hi! I'm testing GitJournal and I found an issue. It's not possible to save notes on external storage.

    From the logs:

    {"t":1671147853022,"l":"d","msg":"Analytics Storage: /data/user/0/io.gitjournal.gitjournal/files/analytics"}
    {"t":1671147853042,"l":"d","msg":"Received MediaFile Share with App (media): []"}
    {"t":1671147853043,"l":"i","msg":"App Version: 1.85.2"}
    {"t":1671147853043,"l":"i","msg":"App Build Number: 3617"}
    {"t":1671147853043,"l":"d","msg":"Event.AppUpdate","p":{"version":"1.85.2","previous_app_version":"","app_name":"GitJournal","package_name":"io.gitjournal.gitjournal","build_number":"3617"}}
    {"t":1671147853071,"l":"d","msg":"Event.AppFirstOpen","p":{"version":"1.85.2","app_name":"GitJournal","package_name":"io.gitjournal.gitjournal","build_number":"3617"}}
    {"t":1671147853092,"l":"i","msg":"Built Git Time Cache - 0:00:00.004405"}
    {"t":1671147853092,"l":"d","msg":"Saving MTimeCache: 0 items"}
    {"t":1671147853092,"l":"d","msg":"Saving CTimeCache: 0 items"}
    {"t":1671147853104,"l":"i","msg":"Finished loading all the notes - 0:00:00.097336"}
    {"t":1671147868039,"l":"d","msg":"Event.DrawerSettings"}
    {"t":1671147990314,"l":"e","msg":"FilePicker: Got /storage/emulated/0/Notes but it is not writable"}
    {"t":1671147990338,"l":"e","msg":"ExtStorage: Got /storage/emulated/0 but it is not writable"}
    {"t":1671147990341,"l":"i","msg":"Moving repo to /storage/emulated/0/Android/data/io.gitjournal.gitjournal/files"}
    {"t":1671147990343,"l":"i","msg":"Old Path: /data/user/0/io.gitjournal.gitjournal/app_flutter/journal/"}
    {"t":1671147990343,"l":"i","msg":"New Path: /storage/emulated/0/Android/data/io.gitjournal.gitjournal/files/journal/"}
    {"t":1671147990382,"l":"d","msg":"Event.StorageConfig","p":{"folderName":"default","storeInternally":"false","storageLocation":"/storage/emulated/0/Android/data/io.gitjournal.gitjournal/files","id":"0"}}
    

    I tried installing from PlayStore and from the F-Droid repository. And tried to create the folder from GitJournal panel or to use a previously created folder. No luck.

    On settings, the repo location is being reported as /storage/emulated/0/Android/data/io.gitjournal.gitjournal/files/journal. However, I can't find the files on this location.

    Running Android 12 on a Moto G71 5G.

    Thank you!

    opened by robsonsobral 0
  • Custom filenames

    Custom filenames

    Connection with issue(s)

    Resolve issue #56

    This + related issues were closed and converted to "discussions", although there was no resolution. Since I don't know the reason @vHanda closed them, I won't open a new issue.

    EDIT: This incidentally solves issue #885. See comments in changed files.

    Testing and Review Notes

    ~~So far, this PR only contains the template engine code + unit tests.~~

    ~~Hopefully someone who can successfully get a build running locally will be able to handle the UI/Flutter parts.~~

    Well, I figured it out :P

    Now, note creation with filename templates needs to be tested for normal + journal note types.

    To Do

    • [x] get a successful build with these changes
    • [x] UI: add "template" option in settings
    opened by justinsilvestre 1
  • [feature request] Rough timeline for supporting markdown Definition lists ?

    [feature request] Rough timeline for supporting markdown Definition lists ?

    First I want to say GitJournal looks awesome.

    Nicely done!

    I wanted to inquire about the liklihood of support for definition lists.

    I'm open to alternative mechanisms, but FutureMe™ has found it pretty handy to have the ability to curate, and interlink to a gaggle of links at the bottom of a document I wrote some time ago.. and has asked CurrentMe™ to continue this habit.

    If this is a thing that y'all are planning on implementing (at some point in time) that's fine.... I just wanted to make sure that there wasn't something that's PREVENTING them from being implemented whenever the desire becomes sufficient to merit the effort.

    opened by wolfspyre 0
Releases(v1.80.0)
Owner
GitJournal
Mobile First Note Taking built on top of Git
GitJournal
A simple Flutter Note Taking app with local database.

Flutter Simple & Lightweight Note App Flutter Simple & Lightweight Note App UI/UX Credit: https://dribbble.com/shots/11875872-A-simple-and-lightweight

Ahmad Amin 63 Nov 10, 2022
A clean and modern note taking app built with Flutter.

Notes App A clean, simple and modern note taking app built with Flutter. Be sure to leave a star ?? Features Create notes: Create notes that store loc

Carlton Aikins 111 Dec 31, 2022
Notefy is a note-taking web app built with ReactJS and Django, with a subtle yet attractive UI and great functionality!

Notefy Notefy is a note-taking web app built with ReactJS and Django, with a subtle yet attractive UI and great functionality! Demo Here is the websit

Servatom 23 Nov 20, 2022
A simple note-taking app with a markdown editor, built with Flutter and Firebase

Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this is your first Flutter project:

Dev-Salem 150 Dec 25, 2022
Integrated Docker with Mobile App using python API and Can perform almost all functionality of Docker

tech_app A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this

Keshav Sharma 0 Oct 29, 2021
Microsoft Teams Clone is a Video conference application with a rich integrated chat experience, to connect with friends,family & colleagues. Developed as a redesign of Microsoft Teams during my menteeship at Microsoft Engage 2021

Microsoft Teams Clone by Karanjot Singh About Microsoft Teams Clone is a Video conference application with a rich integrated chat experience, to conne

Karanjot Singh 60 Dec 28, 2022
This design has been created for educational purposes. Also this project has integrated push notifications with firebase and my own server in python.

Ui Clone of the Nequi application This design has been created for educational purposes. Also this project has integrated push notifications with fire

Juan Suarez 3 Nov 17, 2022
A API integrated 5 day weather forecast and prediction application created using flutter framework and Dart language.

A API integrated 5 day weather forecast and prediction application created using flutter framework and Dart language. This API used here is OPEN WEATHER API, which specializes in predicting the weather of any city in this world.

Nitin Verma 0 Dec 26, 2021
Dio desafio chatonline flutter firebase - Developing an Online Chat Application Integrated with Firebase

Desenvolvendo um aplicativo de Chat Online integrado ao Firebase Descrição Neste

Yian Zaratin 1 Jan 4, 2022
Petit httpd - This is a simple HTTP file server integrated with Let's Encrypt, gzip and CORS

Petit httpd - This is a simple HTTP file server integrated with Let's Encrypt, gzip and CORS

Graciliano Monteiro Passos 4 Nov 24, 2022
A Flutter app integrated with Firebase🔥 to manage warehouse's 🏬 stock

Warehouse Management ?? An application to manage the inventory in multiple warehouses of a business. The products will be stored in groups and user ca

Hevesh Lakhwani 21 Nov 7, 2022
Flutter Presence App integrated with geolocation (GPS) that can help your company or you as a developer to build a presence app

Flutter Presence App integrated with geolocation (GPS) that can help your company or you as a developer to build a presence app. beauty user interface and have a multi user ( admin and employee ). You can also change the appearance of this application easily or add new features. Using Getx and Firebase.

Muhammad Rezky Sulihin 96 Dec 25, 2022
An app made with fluttter for taking notes

notetaker A new Flutter project. Using this app one can - 1.Create Notes 2.View Notes 3.Add content to previous notes 4.Scroll through notes 5.Delete

null 2 Apr 21, 2022
Server that provide API to simple note application

note-app-api-mobile end-to-end note application API Golang for the web application MongoDB for the database PostMan requests Collection Flutter simple

Kareem ahmad 6 Oct 4, 2022
'Efficacy' is a an Android app that keeps users updated on all events and happenings in and around the NITS campus. Note that the one in this repo is a slightly altered version of the original.

Efficacy : The proposed Android app for all clubs, events and happenings at NIT Silchar Get the release APK Some interesting features of this app incl

Gaurav Bhattacharjee 2 Aug 29, 2021
DoneIt is a sample note app 📝 Flutter application 📱 built to demonstrate use of Clean Architecture tools. Dedicated to all Flutter Developers with ❤️.

DoneIt ?? DoneIt is a sample note app ?? Flutter application ?? built to demonstrate use of Clean Architecture tools. Dedicated to all Flutter Develop

Shubham Chhimpa 175 Dec 24, 2022
With ML Kit's face detection API, you can detect faces in an camera or image, Note that the API detects faces, it does not recognize people

Face Detection This project is a starting point for a Flutter application. Getting Started For help getting started with Flutter, view our online docu

Nashwan Abdullah 21 Dec 29, 2022
ghiNote is a quick note application with a good-looking interface and simple operation.

ghi_note ghiNote is a quick note application with a good-looking interface and simple operation. Getting Started This project is a starting point for

Ngo Thanh Son 0 Dec 15, 2021