{"id":15048742,"url":"https://github.com/rhysd/notes-cli","last_synced_at":"2025-04-06T16:14:42.566Z","repository":{"id":41476644,"uuid":"155016857","full_name":"rhysd/notes-cli","owner":"rhysd","description":"Small markdown note taking CLI app playing nicely with your favorite editor and other CLI tools","archived":false,"fork":false,"pushed_at":"2022-09-11T03:36:26.000Z","size":234,"stargazers_count":233,"open_issues_count":9,"forks_count":27,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-30T15:09:01.436Z","etag":null,"topics":["command-line-tool","markdown","memo","note-taking","notes"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rhysd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-27T22:54:00.000Z","updated_at":"2025-03-13T18:09:11.000Z","dependencies_parsed_at":"2022-08-25T10:40:41.885Z","dependency_job_id":null,"html_url":"https://github.com/rhysd/notes-cli","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhysd%2Fnotes-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhysd%2Fnotes-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhysd%2Fnotes-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhysd%2Fnotes-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rhysd","download_url":"https://codeload.github.com/rhysd/notes-cli/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247509237,"owners_count":20950232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line-tool","markdown","memo","note-taking","notes"],"created_at":"2024-09-24T21:15:53.651Z","updated_at":"2025-04-06T16:14:42.547Z","avatar_url":"https://github.com/rhysd.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"A small CLI note taking tool with your favorite editor\n======================================================\n[![CI][github-actions-badge]][github-actions]\n[![Coverage Report][codecov-badge]][codecov]\n[![Documentation][doc-badge]][doc]\n\nThis is a small CLI tool for note taking in terminal with your favorite editor.\nYou can manage (create/open/list) notes via this tool on terminal.\nThis tool also optionally can save your notes thanks to Git to avoid losing your notes.\n\nThis tool is intended to be used nicely with other commands such as `grep` (or [ag][], [rg][]),\n`rm`, filtering tools such as [fzf][] or [peco][] and editors which can be started from command line.\n\n![demo screencast](https://github.com/rhysd/ss/blob/master/notes-cli/demo.gif?raw=true)\n\n\n\n## Table of Contents\n\n* [Installation](#installation)\n* [Basic Usage](#basic-usage)\n* [Usage](#usage)\n* [FAQ](#faq)\n* [License](#license)\n\n\n\n## Installation\n\nDownload an archive for your OS from [release page](https://github.com/rhysd/notes-cli/releases).\nIt contains an executable. Please unzip the archive and put the executable in a directory in `$PATH`.\n\nOr you can install by building from source directly as follows. Go toolchain 1.16 or later is necessary.\n\n```\n$ go install github.com/rhysd/notes-cli/cmd/notes\n```\n\nBefore starting to use, you can try it with examples.\n\n```sh\n$ git clone https://github.com/rhysd/notes-cli.git\n$ cd notes-cli/\n$ export NOTES_CLI_HOME=\"$(pwd)/example/notes-cli\"\n$ export NOTES_CLI_EDITOR=vim # Set your favorite editor\n$ notes list --full\n$ notes new test my-local-trial\n$ git status # Check what file was created in home\n```\n\nTo uninstall:\n\n```sh\n$ rm -rf \"$(notes config home)\" # Remove all notes\n$ rm \"$(which notes)\" # Remove an executable\n```\n\n\n\n## Basic Usage\n\n`notes` provides some subcommands to manage your markdown notes.\n\n- Create a new note with `notes new \u003ccategory\u003e \u003cfilename\u003e [\u003ctags\u003e]`. Every note must have one category\n  and it can have zero or more tags.\n- Open existing note by `notes ls -e` and your favorite editor. `$NOTES_CLI_EDITOR` (or `EDITOR` as fallback) must be set.\n- Check existing notes on terminal with `notes ls -o` (`-o` means showing one line information for\n  each note).\n\nDirectories structure under notes-cli home is something like:\n\n```\n\u003cHOME\u003e\n├── category1\n│   ├── nested-category\n│   │   └── note3.md\n│   ├── note1.md\n│   └── note2.md\n├── category2\n│   ├── note4.md\n│   └── note5.md\n└── category3\n    └── note6.md\n```\n\nwhere `\u003cHOME\u003e` is [XDG Data directory][xdg-dirs] (on macOS, `~/.local/share/notes-cli`) by default\nand can be specified by `$NOTES_CLI_HOME` environment variable. \n\nYou can see more practical example home directory at [example directory](./example/notes-cli).\n\n\n\n## Usage\n\nThis section describes detailed usages for each operation.\n\n* [Create a new note](#create-a-new-note)\n* [Flexibly open notes you created](#flexibly-open-notes-you-created)\n* [Check notes you created as list](#check-notes-you-created-as-list)\n* [Note Templates](#note-templates)\n* [Save notes to Git repository](#save-notes-to-git-repository)\n* [Configure behavior with environment variables](#configure-behavior-with-environment-variables)\n* [Extend `notes` command by adding new subcommands](#extend-notes-command-by-adding-new-subcommands)\n* [Shell Completions](#shell-completions)\n* [Setup `man` manual](#setup-man-manual)\n* [Update itself](#update-itself)\n* [Use from Go program](#use-from-go-program)\n\n\n### Create a new note\n\nFor example,\n\n```\n$ notes new blog how-to-handle-files golang,file\n```\n\ncreates a note file at `\u003cHOME\u003e/notes-cli/blog/how-to-handle-files.md`. The home directory is automatically\ncreated.\n\nCategory is `blog`. Every note must belong to one category. Category can be nested with `/`. For example,\nif have multiple blogs Blog A and Blog B, you may want to categorize blog posts with categories like\n`blog/A`, `blog/B`.\n\nTags are `golang` and `file`. Tags are labels to organize notes and to make search notes easier.\nTags can be omitted.\n\nCategory and file name cannot start with `.` not to make hidden files/directories.\n\nIf you set your favorite editor to `$NOTES_CLI_EDITOR` environment variable, it opens the newly\ncreated note file with it. You can seamlessly edit the file. (If it is not set, `$EDITOR` is also\nreferred.)\n\n```markdown\nhow-to-handle-files\n===================\n- Category: blog\n- Tags: golang, file\n- Created: 2018-10-28T07:19:27+09:00\n\n```\n\nPlease do not remove `- Category: ...`, `- Tags: ...` and `- Created: ...` lines and title.\nThey are used by `notes` command (modifying them is OK).\nDefault title is file name. You can edit the title and body of note as follows:\n\n```markdown\nHow to handle files in Go\n=========================\n- Category: blog\n- Tags: golang, file\n- Created: 2018-10-28T07:19:27+09:00\n\nPlease read documentation.\nGoDoc explains everything.\n```\n\nNote that every note is under the category directory of the note. When you change a category of note,\nyou also need to adjust directory structure manually (move the note file to new category directory).\n\nFor more details, please check `notes new --help`.\n\n\n###  Flexibly open notes you created\n\nLet's say to open some notes you created.\n\nYou can show the list of note paths with:\n\n```\n$ notes list # or `notes ls`\n```\n\nFor example, now there is only one note so it shows one path\n\n```\n/Users/me/.local/share/notes-cli/blog/how-to-handle-files.md\n```\n\nNote that `/Users/\u003cNAME\u003e/.local/share` is a default XDG data directory on macOS or Linux and you can\nchange it by setting `$NOTES_CLI_HOME` environment variable.\n\nTo open the listed notes with your editor, `--edit` (or `-e`) is a quickest way.\n\n```\n$ notes list --edit\n$ notes ls -e\n```\n\nWhen there are multiple notes, note is output per line. So you can easily retrieve some notes from\nthem by filtering the list with `grep`, `head`, `peco`, `fzf`, ...\n\n```\n$ notes ls | grep -l file | xargs -o vim\n```\n\nOr following also works.\n\n```\nvim $(notes ls | xargs grep file)\n```\n\nAnd searching notes is also easy by using `grep`, `rg`, `ag`, ...\n\n```\n$ notes ls | xargs ag documentation\n```\n\nWhen you want to search and open it with Vim, it's also easy.\n\n```\n$ notes ls | xargs ag -l documentation | xargs -o vim\n```\n\n`notes ls` accepts `--sort` option and changes the order of list. By default, the order is created\ndate time of note in descending order. By ordering with modified time of note, you can instantly\nopen last-modified note as follows since first line is a path to the note most recently modified.\n\n```\n$ note ls --sort modified | head -1 | xargs -o vim\n```\n\nFor more details, please check `notes list --help`.\n\n\n### Check notes you created as list\n\n`notes list` also can show brief of notes to terminal.\n\nYou can also show the full information of notes on terminal with `--full` (or `-f`) option.\n\n```\n$ notes list --full\n```\n\nFor example,\n\n```\n/Users/me/.local/share/notes-cli/blog/how-to-handle-files.md\n- Category: blog\n- Tags: golang, file\n- Created: 2018-10-28T07:19:27+09:00\n\nHow to handle files in Go\n=========================\n\nPlease read documentation.\nGoDoc explains everything.\n\n```\n\nIt shows\n\n- Full path to the note file\n- Metadata `Category`, `Tags` and `Created`\n- Title of note\n- Body of note (up to 10 lines)\n\nwith colors.\n\nWhen output is larger and whole output cannot be shown in screen at once, `list` does paging for the\noutput using `less` command (if available). This behavior can be customized by `$NOTES_CLI_PAGER`.\n\nWhen there are many notes, it outputs many lines. In the case, a pager tool like `less` is useful\nYou can also use `less` with pipe explicitly to see the output per page. `-A` global option is short\nof `--always-color`.\n\n```\n$ notes -A ls --full | less -R\n```\n\nWhen you want to see the all notes quickly, `--oneline` (or `-o`) may be more useful than `--full`.\n`notes ls --oneline` shows one brief of note per line.\n\nFor example,\n\n```\nblog/how-to-handle-files.md golang,file How to handle files in Go\n```\n\n- 1st field indicates a relative path of note file from home directory with different colors.\n  The first part of the path is the category in green, and the second part is the file name in yellow.\n- 2nd field indicates comma-separated tags of the note. When note has no tag, it leaves as blank.\n- 3rd field is the title of note\n\nThis is useful for checking many notes at a glance. When output is larger, `less` is used for paging\nthe output if available.\n\nFor more details, please see `notes list --help`.\n\n\n### Note Templates\n\nYou can create a template of note at each category directory or at root. When `.template.md` file\nis put in a category directory or home, it is automatically inserted on `notes new`.\n\nFor example, when `HOME/minutes/.template.md` is created with following content:\n\n```markdown\n---\n\n- Agenda: \n- Attendee: \n\n\n```\n\nExecuting `notes new minutes weekly-meeting-2018-11-07` will create a new note with inserting the\ntemplate like:\n\n```markdown\nweekly-meeting-2018-11-07\n=========================\n- Category: minutes\n- Tags:\n- Created: 2018-11-07T14:19:27+09:00\n\n---\n\n- Agenda: \n- Attendee: \n```\n\nTemplate file at category directory is prioritized. For example, when `notes new minutes weekly-meeting-2018-11-07`\nis run in following situation,\n\n```\nHOME\n├── .template.md\n└── minutes\n    └── .template.md\n```\n\n`HOME/minutes/.template.md` is used rather than `HOME/.template.md`.\n\n\n### Save notes to Git repository\n\nFinally you can save your notes as revision of Git repository.\n\n```\n$ notes save\n```\n\nIt saves all your notes under your `notes-cli` directory as Git repository.\nIt adds all changes in notes and automatically creates commit.\n\nBy default, it only adds and commits your notes to the repository. But if you set `origin` remote to\nthe repository, it automatically pushes the notes to the remote.\n\nFor more details, please see `notes save --help`.\n\n\n### Configure behavior with environment variables\n\nAs described above, some behavior can be configurable with environment variables. Here is a table of\nall environment variables affecting behavior of `notes`. Variables starting with `$NOTES_` are dedicated\nfor `notes` command. Others are general environment variables affecting `notes` behavior.\nWhen you want to disable integration of Git, an editor or a pager, please set empty string to the\ncorresponding environment variable like `export NOTES_CLI_PAGER=`.\n\n| Name                | Default                                    | Description                                                                |\n|---------------------|--------------------------------------------|----------------------------------------------------------------------------|\n| `$NOTES_CLI_HOME`   | `notes-cli` under [XDG data dir][xdg-dirs] | Home directory of `notes`. All notes are stored in sub directories         |\n| `$NOTES_CLI_EDITOR` | None                                       | Your favorite editor command. It can contain options like `\"vim -g\"`       |\n| `$NOTES_CLI_GIT`    | `\"git\"`                                    | Git command path. It is used for saving notes as Git repository            |\n| `$NOTES_CLI_PAGER`  | `\"less -R -F -X\"`                          | Pager command for paging long output from `notes list`                     |\n| `$XDG_DATA_HOME`    | None                                       | When `$NOTES_CLI_HOME` is not set, it is used for home                     |\n| `$APPLOCALDATA`     | None                                       | Even if `$XDG_DATA_HOME` is not set, it is used for home on Windows        |\n| `$EDITOR`           | None                                       | When `$NOTES_CLI_EDITOR` is not set, it is referred to pick editor command |\n| `$PAGER`            | None                                       | When `$NOTES_CLI_PAGER` is not set, it is referred to pick pager command   |\n\nYou can see the configurations by `notes config` command.\n\n\n### Extend `notes` command by adding new subcommands\n\nYes. Like [Git](https://git-scm.com/), `notes` command tries to run external subcommands when user\nspecifies unknown subcommand. For example, when entering `notes foo`, `notes` command notices that\nit is not a built-in subcommand. Then it attempts to execute `notes-foo` with the same arguments.\n\nFollowing arguments are passed to underlying external subcommand:\n\n```\n{full path to notes} {global options...} {subcommand} {local options...}\n```\n\nFor example, let's say following script is put in your `$PATH` as `notes-hello`.\n\n```sh\n#!/bin/sh\necho \"Hello! $*\"\n```\n\nAnd hit `notes hello`. It outputs `Hello! /path/to/bin/notes hello` since given argument `hello` is\nsimply passed to executed underlying subcommand with full path of `notes`.\nSo, when hit `notes --no-color hello --foo`, it outputs `Hello! /path/to/bin/notes --no-color hello --foo`.\nBy forwarding all arguments, subcommand can refer global options specified before subcommand.\n\nThis external subcommand support is useful when you want to extend `notes` functionality to fit your\nusage. For example:\n\n- You can create your own command to upload your blog notes to your blog services.\n- You can create your own alias command like `ls -o -s modified` -\u003e `lsmod`.\n\n\n### Shell Completions\n\n- For zsh:\n\nPlease put `_notes` completion script to your completion directory.\n\n```\n$ git clone https://github.com/rhysd/notes-cli.git\n$ cp nodes-cli/completions/zsh/_notes /path/to/completion/dir/\n```\n\nThe completion directory must be listed in `$fpath`.\n\n```\nfpath=(/path/to/completion/dir $fpath)\n```\n\n- For bash:\n\nPlease add following line to your `.bashrc`.\n\n```\n$ eval \"$(notes --completion-script-bash)\"\n```\n\n- For fish:\n\nPlease add the completion script under `completions/fish/` to your completions directory.\n\n```\n$ git clone https://github.com/rhysd/notes-cli.git\n$ cp nodes-cli/completions/fish/notes.fish ~/.config/fish/completions/\n```\n\n\n### Setup `man` manual\n\n`notes` command can generate `man` manual file.\n\n```\n$ notes --help-man \u003e /usr/local/share/man/man1/notes.1\n```\n\n\n### Update itself\n\n`notes` has the ability to update the executable by itself.\n\n```\n$ notes selfupdate\n```\n\nBefore updating, you can only check if the latest version is available by `--dry` option.\n\n\n### Use from Go program\n\nThis command can be used from Go program as a library. Please read [API documentation][doc] to know\nthe interfaces.\n\n\n\n## FAQ\n\n### Can I specify `/path/to/dir` as home?\n\nPlease set it to environment variable.\n\n```sh\nexport NOTES_CLI_HOME=/path/to/dir\n```\n\n\n### How can I grep notes?\n\nPlease combine grep tools with `notes list` on your command line. For example,\n\n```sh\n$ grep -E some word $(notes list)\n$ ag some word $(notes list)\n```\n\nIf you want to filter with categories or tags, please use `-c` and/or `-t` of `list` command.\n\n\n### How can I filter notes interactively and open it with my editor?\n\nPlease pipe the list of paths from `notes list`. Following is an example with `peco` and Vim.\n\n```sh\n$ notes list | peco | xargs -o vim --not-a-term\n```\n\n\n### Can I open the latest note without selecting it from list?\n\nOutput of `notes list` is sorted by created date time by default. By using `head` command, you can\nchoose the latest note in the list.\n\n```sh\n$ vim \"$(notes list | head -1)\"\n```\n\nIf you want to access to the last modified note, sorting by `modified` and taking first item by `head`\nshould work.\n\n```sh\n$ vim \"$(notes list --sort modified | head -1)\"\n```\n\nBy giving `--sort` (or `-s`) option to `notes list`, you can change how to sort. Please see\n`notes list --help` for more details.\n\n\n### How can I remove some notes?\n\nPlease use `rm` and `notes list`. Following is an example that all notes of specific category `foo`\nare removed.\n\n```sh\n$ rm $(notes list -c foo)\n```\n\nThanks to Git repository, this does not remove your notes completely until you run `notes save`\nnext time.\n\n\n### I don't want to show the metadata in note. Can I hide them?\n\nMetadata can be commented out as follows:\n\n```markdown\nsome title\n==========\n\u003c!--\n- Category: cat\n- Tags:\n- Created: 2018-11-09T02:14:27+09:00\n--\u003e\n\nBody\n```\n\nThe closing comment `--\u003e` is not included in note body. Commented metadata are not rendered and read\nonly by `notes` command.\n\n\n### Can I hide metadata by default?\n\nYes. When `.template.md` starts with `--\u003e` (closing comment), `notes` automatically consider that you\nexpect to hide metadata and insert `\u003c!--` proper position.\n\nFor example, if you have `category1/.template.md`,\n\n```markdown\n--\u003e\n\n```\n\n`notes new` will create a new note as follows:\n\n```markdown\nsome-title\n==========\n\u003c!--\n- Category: category1\n- Tags:\n- Created: 2018-11-15T23:14:27+09:00\n--\u003e\n\n```\n\n\n### How image resources are managed?\n\nI recommend to create a directory for resources under home.\n\nAll non-markdown resources (are ignored by `notes` command. So you can freely put your `.png` or `.jpg`\nfiles in the same directory as note markdown files.\n\nOr you can use a separate directory dedicated for images like `HOME/images/` or `HOME/category1/images`.\nThis option may be better than mixing many pictures and note files in the same directory when you use\n`grep`.\n\nIf you want to differentiate images directory from other category directories, please give `.` prefix\nlike `HOME/.images` since category directories cannot have `.` prefix as their names.\n\n\n### Is it possible to use `--color-always` by default?\n\nPlease use shell's alias feature as follows:\n\n```sh\nalias notes='notes --color-always'\n```\n\n\n### How can I migrate from [memolist.vim](https://github.com/glidenote/memolist.vim)?\n\nPlease try [migration script](./scripts/migrate-from-memolist.rb).\n\n```\n$ git clone https://github.com/rhysd/notes-cli.git\n$ cd ./notes-cli\n$ ruby ./scripts/migrate-from-memolist.rb /path/to/memolist/dir /path/to/note-cli/home\n```\n\n\n### How can I integrate with Vim?\n\nYou can try [Vim plugin for notes-cli](https://github.com/rhysd/vim-notes-cli)\n\nIf you feel the plugin is too much, you can also try following configuration. Please write following\ncode in your `.vimrc`.\n\n```vim\nfunction! s:notes_grep(args) abort\n    let idx = match(a:args, '\\s\\+\\ze/[^/]\\+/')\n    if idx \u003c= 0\n        \" When :NotesGrep /pat/\n        let paths = join(split(system('notes list'), '\\n'), ' ')\n        execute 'vimgrep' a:args paths\n        return\n    endif\n\n    \" When :NotesGrep {args} /pat/\n    let paths = join(split(system('notes list ' . a:args[:idx]), '\\n'), ' ')\n    if paths ==# ''\n        echohl ErrorMsg | echo 'No file found' | echohl None\n        return\n    endif\n    let pat = a:args[idx:]\n    execute 'vimgrep' pat paths\nendfunction\ncommand! -nargs=+ NotesGrep call \u003cSID\u003enotes_grep(\u003cq-args\u003e)\n\nfunction! s:notes_new(...) abort\n    if has_key(a:, 1)\n        let cat = a:1\n    else\n        let cat = input('category?: ')\n    endif\n    if has_key(a:, 2)\n        let name = a:2\n    else\n        let name = input('filename?: ')\n    endif\n    let tags = get(a:, 3, '')\n    let cmd = printf('notes new --no-inline-input %s %s %s', cat, name, tags)\n    let out = system(cmd)\n    if v:shell_error\n        echohl ErrorMsg | echomsg string(cmd) . ' failed: ' . out | echohl None\n        return\n    endif\n    let path = split(out)[-1]\n    execute 'edit!' path\n    normal! Go\nendfunction\ncommand! -nargs=* NotesNew call \u003cSID\u003enotes_new(\u003cf-args\u003e)\n\nfunction s:notes_last_mod(args) abort\n    let out = system('notes list --sort modified ' . a:args)\n    if v:shell_error\n        echohl ErrorMsg | echomsg string(cmd) . ' failed: ' . out | echohl None\n        return\n    endif\n    let last = split(out)[0]\n    execute 'edit!' last\nendfunction\ncommand! -nargs=* NotesLastMod call \u003cSID\u003enotes_last_mod(\u003cq-args\u003e)\n```\n\n- `:NotesGrep [args] /pat/`: It searches notes by `:vimgrep` with given `/pat/`. Thanks to `:vimgrep`,\n  the search result is stored to a quickfix list. You can easily check matches and open the file from\n  the list by open quickfix window with `:copen`.\n- `:NotesNew [args]`: It creates a new note and opens it with a new buffer. `args` is the same as\n  `notes new` but category and file name can be empty. In the case, Vim ask you to input them after\n  starting the command.\n- `:NotesLastMod [args]`: It opens the last modified note in new buffer. When `args` is given, it\n  is passed to underlying `notes list` command execution so you can filter result by categories\n  and/or tags with `-c` or `-t`.\n\n\n\n## License\n\n[MIT License](LICENSE.txt)\n\n\n\n\n[ag]: https://github.com/ggreer/the_silver_searcher\n[rg]: https://github.com/BurntSushi/ripgrep\n[fzf]: https://github.com/junegunn/fzf\n[peco]: https://github.com/peco/peco\n[xdg-dirs]: https://wiki.archlinux.org/index.php/XDG_Base_Directory\n[codecov-badge]: https://codecov.io/gh/rhysd/notes-cli/branch/master/graph/badge.svg\n[codecov]: https://codecov.io/gh/rhysd/notes-cli\n[doc-badge]: https://godoc.org/github.com/rhysd/notes-cli?status.svg\n[doc]: http://godoc.org/github.com/rhysd/notes-cli\n[github-actions-badge]: https://github.com/rhysd/notes-cli/workflows/CI/badge.svg?branch=master\u0026event=push\n[github-actions]: https://github.com/rhysd/notes-cli/actions?query=workflow%3ACI\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhysd%2Fnotes-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frhysd%2Fnotes-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhysd%2Fnotes-cli/lists"}