Is Writer safe?
We analyzed Writer version 2.15.2's actual code and gave it a 62/100 trust score. Writer is purpose-aligned but has broad page access and sends sensitive…
Bottom line
Writer is purpose-aligned but has broad page access and sends sensitive writing data to its service and analytics providers.
What it can access
It can read and modify writing areas across nearly every site and use Writer login cookies, exposing sensitive text beyond the browser.[Q1][Q3][Q4]
Security weaknesses
Broad page integration and messaging bridges may let ordinary page code interact with privileged writing features, while large compiled bundles limit review.[Q10][Q21]
Signs of misuse
It sends document text and browsing-domain information to Writer and shares account-related telemetry with several outside services, though this supports its advertised features.[Q6][Q12][Q13]
Code findings
What access does this extension ask for, and does that access make sense for what it claims to do?
It requests tabs, cookies, storage, scripting, side-panel and nearly all HTTP/HTTPS site access. That breadth is consistent with writing assistance across websites, but it gives the extension substantial authority over sensitive page content.
Declares tabs, cookies, storage, scripting and sidePanel permissions plus HTTP and HTTPS host access. — manifest.json:8-18
Runs content and iframe scripts across all URLs, with a small explicit exclusion list and additional Google Docs integration. — manifest.json:34-107
Which websites can it run on, and can it read or change what appears on those pages?
On allowed sites it reads editable document text, selections and changes, displays suggestions and can replace text. This is the advertised writing-assistant function, with global, per-site and organization controls.
Maintains documentContent state and incremental document synchronization for page editors. — static/content.js:531-532
Integrates editable fields and page-world editor bridges, receives editor changes and applies content operations. — static/content.js:5373-5386
Calls the Writer domain-status API and exposes document-content, delta and suggestion operations. — static/background.js:427
Can it see sensitive information you type, such as passwords, payment details, messages, or form entries?
Editable documents can contain confidential or personal text. The active path sends document text and surrounding context to Writer for checking.
Context checking sends text with preContextText and postContextText to Writer's API. — static/background.js:427
The default content-script configuration sets ignoreInputs true while supporting richer editors and site-specific integrations. — static/content.js:5373
Can it access private browser data such as cookies, signed-in sessions, browsing history, bookmarks, or downloads?
It reads, sets and removes qToken and userLoginDetected cookies on Writer's domain for authentication and login state. No path was found that reads arbitrary website cookies, browsing history, bookmarks or download history.
Requests cookies permission and broad host access, but not history, bookmarks or downloads permission. — manifest.json:8-18
Cookie helpers get, set and remove qToken and userLoginDetected only after applying the Writer-host domain predicate. — static/background.js:418
Can it access anything else on your device, such as files, location, camera, microphone, clipboard, or installed applications?
It can copy generated or selected content and uses clipboard paste simulation when applying text in some editors. Clipboard reads appear in explicit copy/paste workflows; no camera, microphone, location, screen, arbitrary-file or native-app access was found.
Uses clipboard write and copy/paste helpers in side-panel actions and editor replacement workflows. — static/sidePanel.js:539,5890
Declares no geolocation, camera, microphone, desktop capture, file-system or native-messaging permission. — manifest.json:8-18
Does it send information outside your browser? If so, what information is sent, where does it go, and why?
Full document content, deltas, selected text, prompts and surrounding context go to app.writer.com for grammar and AI features. Writer account identifiers and operational events also reach Writer analytics, Statsig, LaunchDarkly and Sentry.
Configures app.writer.com and implements content, delta, context-check, rewrite and AI request paths. — static/background.js:418,427
Bundles Statsig and LaunchDarkly endpoints for feature evaluation and event delivery. — static/background.js:2,538
Configures Sentry error reporting and Writer analytics with account and organization context. — static/background.js:406-418
Does it download or run code, settings, or instructions supplied by a remote server?
Writer and feature-flag services supply suggestions, generated text, organization policy and feature settings that the extension applies. These are active data and instruction paths, but no remotely supplied JavaScript was shown reaching a code-execution primitive.
Receives Writer suggestion and AI responses plus Statsig, LaunchDarkly and organization extension configuration. — static/background.js:427,538
The Lottie expression engine contains eval, but the observed animation is initialized from packaged animationData rather than a fetched script. — static/content.js:312,5320
Can it take actions without a clear user request, such as opening pages, redirecting searches, downloading files, or sending requests?
After login, allowed editable pages are checked continuously without a click for each change. That is the advertised real-time feature.
Tracks document content and changes to drive automatic suggestions and autocorrect behavior. — static/content.js:531-532,5080
Checks extension domain status and applies organization and user enablement settings. — static/background.js:427,5079
Can it change important browser settings, including your proxy, search engine, homepage, privacy settings, or other extensions?
No evidence of this behavior was found in the reviewed package.
Requests no search, homepage, proxy, privacy or browser-settings permission. — manifest.json:8-18
Is any important behavior difficult to inspect because the code is hidden, heavily obfuscated, dynamically generated, or supplied by third parties?
The package contains roughly 28 MB of compiled application JavaScript and many third-party libraries. Major services and flows remain readable, but the size and minification prevent a complete manual proof of every branch and increase supply-chain review difficulty.
Records multi-megabyte content, side-panel, onboarding, button, background and PDF-worker bundles. — inventory.json:1
Combines application logic, editor integrations, telemetry SDKs, animation support and third-party libraries in compiled bundles. — static/content.js:1-5386
Does it use eval(), new Function(), or string-based timers to turn text into executable code?
No evidence of this behavior was found in the reviewed package.
Lottie's expression engine builds an expression function with eval. — static/content.js:312
The visible Lottie initialization passes a packaged animationData object. — static/content.js:5320
Other new Function occurrences are a developer breakpoint path and a PDF.js capability test, not demonstrated remote payload execution. — static/content.js:375,5349
Does it track the websites, pages, searches, or links you visit?
All-site scripts and tabs access reveal the active page and domain. The domain is used for enablement checks and product analytics.
Grants tabs and all-site content access, allowing the current page and domain to be observed. — manifest.json:8-18,34-86
Sends the active domain through Writer's extension domain-status and analytics logic. — static/background.js:427,5079
Does it create a persistent ID or browser fingerprint to recognize you?
Telemetry and feature evaluation are linked to Writer user, organization and team identifiers, subscription traits and a Statsig stable identifier. This supports account analytics and feature rollout, not an anonymous browsing profile in the reviewed code.
Initializes account-aware Writer analytics, Statsig and LaunchDarkly clients and persists feature-evaluation identifiers. — static/background.js:2,418,538
Does it send cookies, session details, authentication data, or page contents elsewhere?
Editable page and document content is sent to Writer for checking and AI features. Writer's qToken is sent to Writer as ordinary authentication.
Reads Writer's qToken for authenticated Writer API requests that carry document content, deltas and context. — static/background.js:418,427
Collects documentContent and incremental changes from supported editors. — static/content.js:531-532
Does it record typing, form entries, clipboard contents, or screenshots?
It observes live editable text, selections, cursor context and document changes, then can apply accepted suggestions or autocorrections. Clipboard operations support explicit copy and editor replacement.
Maintains document text and selection state across native and bridged editors and applies text operations. — static/content.js:531-532,5373-5386
Uses clipboard copy, write and paste helpers in user-facing writing workflows. — static/sidePanel.js:539,5890
Can a website or remote server send commands that make the extension take actions?
Writer's server returns suggestions, generated text, rewrite results, domain policy and feature configuration that affect page overlays and replacement options. Text changes normally follow user acceptance, while suggestions and permitted autocorrect behavior can appear automatically.
Receives context-check, rewrite, AI generation, domain-status and configuration responses from Writer. — static/background.js:427,5079
Renders server-derived suggestions and applies accepted replacement or configured autocorrect operations in page editors. — static/content.js:5080,5349
Does it alter links, referral codes, advertisements, shopping carts, or search results?
No evidence of this behavior was found in the reviewed package.
Page modifications are writing-assistance UI, highlights and text replacement rather than commerce or link redirection. — static/content.js:5080-5386
Does it redirect or modify web traffic, request headers, downloads, or proxy settings?
No evidence of this behavior was found in the reviewed package.
Declares no proxy, webRequest, declarativeNetRequest or downloads permission. — manifest.json:8-18
Can it communicate with software on the computer or services running on localhost?
No evidence of this behavior was found in the reviewed package.
Requests no nativeMessaging permission and defines no native host integration. — manifest.json:8-18
Does it decode, decrypt, or unpack hidden data and then execute or inject it?
No evidence of this behavior was found in the reviewed package.
Although Lottie supports expressions, the observed animation source is a packaged data object rather than concealed downloaded code. — static/content.js:312,5320
Lists packaged scripts and assets exposed for editor integrations and document handling. — manifest.json:109-132
Can ordinary websites access privileged extension features through messaging or exposed files?
Packaged scripts bridge Google Docs, CodeMirror, TinyMCE and other page-world editors through window messages. This is needed for editor access, but ordinary page code shares that boundary.
Exposes editor integration scripts and related assets to all URLs. — manifest.json:109-132
Uses window message listeners and postMessage bridges for page-world editor content and changes. — static/content.js:5350,5373-5386
A packaged page-world bridge observes CodeMirror content, selection and change events for the content script. — static/codemirror5Script.js:1-2
Does suspicious behavior activate only for certain users, websites, dates, or remote settings?
No evidence of this behavior was found in the reviewed package.
Uses remote feature-evaluation services and Writer's extension domain-status and organization configuration. — static/background.js:2,427,538
Does it perform hidden resource-intensive work, such as cryptocurrency mining?
No evidence of this behavior was found in the reviewed package.
Large bundles are attributable to editor integrations, AI writing UI, telemetry SDKs, PDF support and packaged assets rather than mining code. — inventory.json:1
Does it change form fields or where a form sends its information?
It changes editable-field and document text when a user accepts a suggestion and may apply configured autocorrections. This is its advertised purpose.
Implements replacement and autocorrect operations for supported page editors. — static/content.js:5080,5349,5373-5386
The default configuration ignores ordinary input elements; site integrations focus on writing surfaces. — static/content.js:5373