{"id":31618484,"url":"https://github.com/chrisgrieser/obsidian-proofreader","last_synced_at":"2026-04-02T21:31:26.154Z","repository":{"id":284397047,"uuid":"954701817","full_name":"chrisgrieser/obsidian-proofreader","owner":"chrisgrieser","description":"AI-based proofreading and stylistic improvements for your writing. Changes are inserted as suggestions directly in the editor, similar to suggested changes in word processing apps.","archived":false,"fork":false,"pushed_at":"2026-02-06T13:23:34.000Z","size":295,"stargazers_count":32,"open_issues_count":0,"forks_count":7,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-09T22:24:49.260Z","etag":null,"topics":["obsidian-plugin","proofreading","writing-tool"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/chrisgrieser.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"chrisgrieser"}},"created_at":"2025-03-25T13:40:56.000Z","updated_at":"2026-02-06T13:23:38.000Z","dependencies_parsed_at":"2025-03-25T17:48:37.591Z","dependency_job_id":"cb15460e-09b0-4b9a-9efc-34334c639cc9","html_url":"https://github.com/chrisgrieser/obsidian-proofreader","commit_stats":null,"previous_names":["chrisgrieser/obsidian-proofreader"],"tags_count":45,"template":false,"template_full_name":"chrisgrieser/pseudometa-obsidian-plugin-template","purl":"pkg:github/chrisgrieser/obsidian-proofreader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisgrieser%2Fobsidian-proofreader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisgrieser%2Fobsidian-proofreader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisgrieser%2Fobsidian-proofreader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisgrieser%2Fobsidian-proofreader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chrisgrieser","download_url":"https://codeload.github.com/chrisgrieser/obsidian-proofreader/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisgrieser%2Fobsidian-proofreader/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29680147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T11:29:27.227Z","status":"ssl_error","status_checked_at":"2026-02-21T11:29:20.292Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["obsidian-plugin","proofreading","writing-tool"],"created_at":"2025-10-06T14:00:59.741Z","updated_at":"2026-04-02T21:31:26.145Z","avatar_url":"https://github.com/chrisgrieser.png","language":"TypeScript","funding_links":["https://github.com/sponsors/chrisgrieser","https://github.com/sponsors/chrisgrieser?frequency=one-time"],"categories":[],"sub_categories":[],"readme":"# Proofreader for Obsidian\n![GitHub download count](https://img.shields.io/github/downloads/chrisgrieser/obsidian-proofreader/total?label=GitHub%20Downloads\u0026style=plastic)\n![Obsidian downloads](https://img.shields.io/badge/dynamic/json?logo=obsidian\u0026color=%23483699\u0026label=downloads\u0026query=%24%5B%22proofreader%22%5D.downloads\u0026url=https%3A%2F%2Fraw.githubusercontent.com%2Fobsidianmd%2Fobsidian-releases%2Fmaster%2Fcommunity-plugin-stats.json\u0026style=plastic)\n![Last release](https://img.shields.io/github/v/release/chrisgrieser/obsidian-proofreader?label=Latest%20Release\u0026style=plastic)\n\nAI-based proofreading and stylistic improvements for your writing. Changes are\ninserted as suggestions directly in the editor, similar to the suggested changes\nfeature in word processing apps.\n\n\u003cimg alt=\"Showcase\" width=70% src=\"https://github.com/user-attachments/assets/fa77eb97-61b9-4102-b8b2-e7c385868363\"\u003e\n\n## Table of contents\n\n\u003c!-- toc --\u003e\n\n- [Features](#features)\n- [Installation \u0026 setup](#installation--setup)\n    - [Plugin installation](#plugin-installation)\n    - [Get an API key](#get-an-api-key)\n- [Usage](#usage)\n- [Visual appearance of the changes](#visual-appearance-of-the-changes)\n- [Testimonials](#testimonials)\n- [Plugin development](#plugin-development)\n    - [General](#general)\n    - [Adding support for new LLMs](#adding-support-for-new-llms)\n- [About the developer](#about-the-developer)\n\n\u003c!-- tocstop --\u003e\n\n## Features\n- Suggested changes are inserted directly into the text: Additions as\n  `==highlights==` and removals as `~~strikethroughs~~`.\n- Accept or reject changes with just one hotkey.\n- Easy to use: No complicated plugin settings and AI parameters to configure.\n\n|                                       | Professional proofreading service               | Proofreader plugin                                                           |\n| ------------------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------- |\n| Cost for English text of 10,000 words | ~ $400, depending on the service                | ~ \\$0.01 – $0.06[^1]                                                         |\n| Completion duration                   | up to 3 work days                               | about 5 minutes                                                              |\n| Input format                          | usually Microsoft Word (`.docx`)                | Markdown file in Obsidian                                                    |\n| Method of incorporating changes       | mostly mouse clicks                             | keyboard shortcuts                                                           |\n| Additional benefits                   | Editor makes general comments on writing style. | Plugin can also be used to quickly proofread single sentences or paragraphs. |\n\n[^1]: Estimated pricing for the [GPT 4.1 nano\n    model](https://platform.openai.com/docs/models/) in April 2025. The plugin\n    developer is not responsible if the actual costs differ. You can track your\n    usage costs [on this page](https://platform.openai.com/usage).\n\n\u003e [!NOTE]\n\u003e This plugin requires an API key from one of the supported providers\n\u003e (OpenAI, Google, Mistral, or OpenRouter) and incurs costs based on usage.\n\u003e Network requests are made when running the proofreading command. (PRs\n\u003e [adding support for other LLMs](#adding-support-for-new-llms) are welcome.)\n\n## Installation \u0026 setup\n\n### Plugin installation\n[Install in Obsidian](https://obsidian.md/plugins?id=proofreader)\n\n### Get an API key\n\n**OpenAI**\n1. [Create an OpenAI account](https://auth.openai.com/create-account).\n2. Go to [this site](https://platform.openai.com/api-keys), and click `Create\n   new secret key`.\n3. Copy the API key.\n4. In Obsidian, go to `Settings → Proofreader → OpenAI` and paste your\n   API key there.\n\n\u003e [!TIP]\n\u003e The usage costs should not be very high, nonetheless you can track them\n\u003e [on this page](https://platform.openai.com/usage).\n\n**Google**\n1. [Create a Google account](https://accounts.google.com/signup) if you\n   don't have one.\n2. Go to [Google AI Studio](https://aistudio.google.com/app/apikey) and\n   click `Create API key`.\n3. Copy the API key.\n4. In Obsidian, go to `Settings → Proofreader → Google` and paste your\n   API key there.\n\n**Mistral**\n1. [Create a Mistral account](https://console.mistral.ai/).\n2. Go to [API keys](https://console.mistral.ai/api-keys) and click\n   `Create new key`.\n3. Copy the API key.\n4. In Obsidian, go to `Settings → Proofreader → Mistral` and paste your\n   API key there.\n\n**OpenRouter**\n1. [Create an OpenRouter account](https://openrouter.ai/).\n2. Go to [API keys](https://openrouter.ai/settings/keys) and click\n   `Create key`.\n3. Copy the API key.\n4. In Obsidian, go to `Settings → Proofreader → OpenRouter` and paste\n   your API key there.\n\n## Usage\n1. Use the command `Proofread selection/paragraph` to check the selected\n   text. If there is no selection, the command will check the current paragraph.\n   Alternatively, you can also check the whole document with `Proofread full\n   document`. However, note that the quality of AI suggestions tends to decrease\n   when proofreading too much text at once.\n2. The changes are automatically inserted.\n3. Accept/reject changes with `Accept suggestions in selection/paragraph` and\n   `Reject suggestions in selection/paragraph`. Same as the proofreading\n   command, the `accept` and `reject` commands affect the current paragraph if\n   there is no selection. Alternatively, you can also only accept/reject the\n   next suggestion after your cursor via `Accept next suggestion` and `Reject\n   next suggestion`.\n\n## Visual appearance of the changes\nYou can add the following CSS snippet to make highlights and strikethroughs\nappear like suggested changes, similar to the screenshot further above.\n([Manual: How to add CSS snippets.](https://help.obsidian.md/snippets))\n\n```css\n.cm-strikethrough {\n\ttext-decoration-color: var(--color-red);\n}\n\n.cm-s-obsidian span.cm-highlight {\n\tbackground-color: rgba(var(--color-green-rgb), 35%);\n}\n```\n\n## Testimonials\n\n\u003e I was paying $29 a month for `type.ai` until today, your plugin made me cancel\n\u003e the subscription, because the only feature I wanted from there was this inline\n\u003e granular diffing which no other app offered, until Proofreader.\n\u003e [@samwega](https://github.com/chrisgrieser/obsidian-proofreader/discussions/1#discussioncomment-12972780)\n\n## Plugin development\n\n### General\n\n```bash\njust init   # run once after cloning\n\njust format # run all formatters\njust build  # builds the plugin\njust check  # runs the pre-commit hook (without committing)\n```\n\n\u003e [!NOTE]\n\u003e This repo uses a pre-commit hook, which prevents commits that do not build or\n\u003e do not pass the checks.\n\n### Adding support for new LLMs\n1. Create a new adapter for the LLM in\n   [./src/providers/](./src/providers/). This should take ~50 lines of code.\n2. In [./src/providers/model-info.ts](./src/providers/model-info.ts), add the\n   adapter function to `PROVIDER_REQUEST_MAP`, and add models for the new\n   provider to `MODEL_SPECS`.\n3. In [./src/settings.ts](./src/settings.ts), add a setting for the API key to\n   `ProofreaderSettingsMenu` and add a field to `DEFAULT_SETTINGS`.\n\n## About the developer\nIn my day job, I am a sociologist studying the social mechanisms underlying the\ndigital economy. For my PhD project, I investigate the governance of the app\neconomy and how software ecosystems manage the tension between innovation and\ncompatibility. If you are interested in this subject, feel free to get in touch.\n\n- [Website](https://chris-grieser.de/)\n- [ResearchGate](https://www.researchgate.net/profile/Christopher-Grieser)\n- [Mastodon](https://pkm.social/@pseudometa)\n- [LinkedIn](https://www.linkedin.com/in/christopher-grieser-ba693b17a/)\n\nIf you find this project helpful, you can support me via [🩷 GitHub\nSponsors](https://github.com/sponsors/chrisgrieser?frequency=one-time).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisgrieser%2Fobsidian-proofreader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchrisgrieser%2Fobsidian-proofreader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisgrieser%2Fobsidian-proofreader/lists"}