{"id":13581698,"url":"https://github.com/juruen/rmapi","last_synced_at":"2025-04-06T10:32:50.926Z","repository":{"id":29063007,"uuid":"119293980","full_name":"juruen/rmapi","owner":"juruen","description":"Go app that allows you to access your reMarkable tablet files through the Cloud API","archived":true,"fork":false,"pushed_at":"2023-12-23T10:55:38.000Z","size":6873,"stargazers_count":989,"open_issues_count":80,"forks_count":110,"subscribers_count":27,"default_branch":"master","last_synced_at":"2025-03-17T06:48:42.236Z","etag":null,"topics":["remarkable-tablet"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juruen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-01-28T20:15:34.000Z","updated_at":"2025-03-13T20:21:38.000Z","dependencies_parsed_at":"2023-12-23T12:13:10.070Z","dependency_job_id":"c2c445a8-3b1b-4b4a-a946-d4df6374130d","html_url":"https://github.com/juruen/rmapi","commit_stats":{"total_commits":344,"total_committers":35,"mean_commits":9.82857142857143,"dds":0.5755813953488372,"last_synced_commit":"18a9fb803f6afef2067d9491fddcb0f03cba2ee0"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juruen%2Frmapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juruen%2Frmapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juruen%2Frmapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juruen%2Frmapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juruen","download_url":"https://codeload.github.com/juruen/rmapi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247470463,"owners_count":20944146,"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":["remarkable-tablet"],"created_at":"2024-08-01T15:02:11.260Z","updated_at":"2025-04-06T10:32:45.904Z","avatar_url":"https://github.com/juruen.png","language":"Go","funding_links":[],"categories":["Go","APIs","Installation"],"sub_categories":["Cloud API"],"readme":"# rMAPI\n\n*Note: rMAPI is effectiviely unmaintaied at this point, and this repo will be archived in the next few weeks. Please see [this discussion for more info](https://github.com/juruen/rmapi/discussions/313).*\n\n[![Actions Status](https://github.com/juruen/rmapi/workflows/Go/badge.svg)](https://github.com/juruen/rmapi/actions)\n\n\n\nrMAPI is a Go app that allows you to access the ReMarkable Cloud API programmatically.\n\nYou can interact with the different API end-points through a shell. However, you can also\nrun commands non-interactively. This may come in handy to script certain workflows such as\ntaking automatic backups or uploading documents programmatically.\n\n\n![Console Capture](docs/console.gif)\n\n# Some examples of use\n\n[Tutorial on how to directly print to your reMarkable on Mac with rMAPI](docs/tutorial-print-macosx.md)\n\n# Warning: experimental support for the new sync protocol\n\nIf `rmapi` stopped working for you in a such way that `gets` were working fine but `puts` didn't seem to work, this\nis relevant for you.\n\nA few months ago, the `Remarkable` folks introduced a new sync protocol. This new protocol is being rolling out \nincrementally. Some users are being forced to use it, and some other users are still using the old protocol that\n`rmapi` has supported well for a few years now.\n\nUnfortunately, the `rmapi` contributors are still on the old protocol and this makes it more difficult to test\nthe new protocol's implementation. However, as we know that there are many users who would like to use\n`rmapi` with the new protocol, we have added experimental support for it. The always awesome @ddvk did all the work\nhere!\n\nAlthough `rmapi` will warn you if it needs to use the new protocol, we'd like to take this opportunity again to reiterate that the\nsupport for the new protocol is experimental, and you should make sure you have a back-up of your files in case something goes wrong.\n\n\n# Install\n\n## From sources\n\nInstall and build the project:\n\n```\ngit clone https://github.com/juruen/rmapi\ncd rmapi\ngo install\n```\n\n## Binary\n\nYou can download an already built version for either Linux or OSX from [releases](https://github.com/juruen/rmapi/releases).\n\n## Docker\n\nFirst clone this repository, then build a local container like\n\n```\ndocker build -t rmapi .\n```\n\ncreate the .config/rmapi config folder\n\n```\nmkdir -p $HOME/.config/rmapi\n``` \n\nand run by mounting the .config/rmapi folder\n\n```\ndocker run -v $HOME/.config/rmapi/:/home/app/.config/rmapi/ -it rmapi\n```\n\nIssue non-interactive commands by appending to the `docker run` command:\n\n```\ndocker run -v $HOME/.config/rmapi/:/home/app/.config/rmapi/ rmapi help\n```\n\n# API support\n\n- [x] list files and directories\n- [x] move around directories\n- [x] download a specific file\n- [x] download a directory and all its files and subdiretores recursively\n- [x] create a directory\n- [x] delete a file or a directory\n- [x] move/rename a file or a directory\n- [x] upload a specific file\n- [ ] live syncs\n\n# Annotations\n\n- Initial support to generate a PDF with annotations.\n\n# Shell ergonomics\n\n- [x] autocomplete\n- [ ] globbing\n- [x] upload a directory and all its files and subdirectories recursively\n\n# Commands\n\nStart the shell by running `rmapi`\n\n## List current directory\n\nUse `ls` to list the contents of the current directory. Entries are listed with `[d]` if they\nare directories, and `[f]` if they are files.\n\n## Change current directory\n\nUse `cd` to change the current directory to any other directory in the hierarchy.\n\n## Find a file\n\nThe command  `find` takes one or two arguments.\n\nIf only the first argument is passed, all entries from that point are printed recursively.\n\nWhen the second argument is also passed, a regexp is expected, and only those entries that match the regexp are printed.\n\nGolang standard regexps are used. For instance, to make the regexp case insensitve you can do:\n\n```\nfind . (?i)foo\n```\n\n## Upload a file\n\nUse `put path_to_local_file` to upload a file  to the current directory.\n\nYou can also specify the destination directory:\n\n```\nput book.pdf /books\n```\n\n## Recursively upload directories and files\n\nUse `mput path_to_dir` to recursively upload all the local files to that directory.\n\nE.g: upload all the files\n\n```\nmput /Papers\n```\n\n![Console Capture](docs/mput-console.png)\n\n## Download a file\n\nUse `get path_to_file` to download a file from the cloud to your local computer.\n\n## Recursively download directories and files\n\nUse `mget path_to_dir` to recursively download all the files in that directory.\n\nE.g: download all the files\n\n```\nmget .\n```\n\n## Download a file and generate a PDF with its annoations\n\nUse `geta` to download a file and generate a PDF document\nwith its annotations.\n\nPlease note that its support is very basic for now and only supports one type of pen for now, but\nthere's work in progress to improve it.\n\n## Create a directoy\n\nUse `mkdir path_to_new_dir` to create a new directory\n\n## Remove a directory or a file\n\nUse `rm directory_or_file` to remove. If it's directory, it needs to be empty in order to be deleted.\n\nYou can remove multiple entries at the same time.\n\n## Move/rename a directory or a file\n\nUse `mv source destination` to move or rename a file or directory.\n\n## Stat a directory or file\n\nUse `stat entry` to dump its metadata as reported by the Cloud API.\n\n# Run command non-interactively\n\nAdd the commands you want to execute to the arguments of the binary.\n\nE.g: simple script to download all files from the cloud to your local machine\n\n```bash\n$ rmapi mget .\n```\n\nrMAPI will set the exit code to `0` if the command succeedes, or `1` if it fails.\n\n# Environment variables\n\n- `RMAPI_CONFIG`: filepath used to store authentication tokens. When not set, rmapi uses the file `.rmapi` in the home directory of the current user.\n- `RMAPI_TRACE=1`: enable trace logging.\n- `RMAPI_USE_HIDDEN_FILES=1`: use and traverse hidden files/directories (they are ignored by default).\n- `RMAPI_THUMBNAILS`: generate a thumbnail of the first page of a pdf document\n- `RMAPI_AUTH`: override the default authorization url\n- `RMAPI_DOC`: override the default document storage url\n- `RMAPI_HOST`: override all urls \n- `RMAPI_CONCURRENT`: sync15: maximum number of goroutines/http requests to use (default: 20)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuruen%2Frmapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuruen%2Frmapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuruen%2Frmapi/lists"}