Is Knowt: Quizlet Import, AI Notes & Flashcards safe?
We analyzed Knowt: Quizlet Import, AI Notes & Flashcards version 4.4.9's actual code and gave it a 42/100 trust score. This study extension has broad page…
Bottom line
This study extension has broad page access, handles sensitive study and document data, tracks visited URLs, and exposes a serious message-handling weakness.
What it can access
The extension requests access to every website and active-tab injection, and can read or change page contents for its features. [Q1] It can also inspect Google Docs writing history and record user-approved microphone audio. [Q2] [Q3] [Q5]
Security weaknesses
Knowt and localhost webpages can send messages that replace stored login state or trigger extension actions without finer sender checks. [Q21] The package also attempts to load remote calculator code, although the browser’s default policy appears to block it. [Q7]
Signs of misuse
The extension sends study page and document context to its services and sends recordings to storage after user confirmation. [Q6] It also sends full page addresses and persistent usage identifiers to analytics services, including when do-not-track is enabled. [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 access to all URLs plus tabs, scripting, storage, sidePanel, and audio. Always-on page access are limited to supported study sites, but the side panel can inject code into any active page.
Declares <all_urls>, tabs, scripting, storage, sidePanel, and audio. — manifest.json:host_permissions and permissions
Uses chrome.scripting.executeScript against the current active tab for multiple extraction and editing features. — assets/index.html-COXwSH79.js.map:src/hooks/useExecuteScript.tsx
Which websites can it run on, and can it read or change what appears on those pages?
It can read arbitrary active pages, inject study nudges on supported sites, and directly edit Google Docs through scripted keyboard, mouse, paste, and comment operations.
Clones the active page DOM or reads up to 50,000 characters of body text. — assets/index.html-COXwSH79.js.map:src/screens/ScanWebPage/hooks/useExtractTextFromDOM.tsx and src/screens/Chat/utils/pageContent.ts
Injects scripts that add comments, tables, and highlight formatting to an active Google Doc. — assets/index.html-COXwSH79.js.map:src/screens/WritingFeedback and InspectWriting utilities
Can it see sensitive information you type, such as passwords, payment details, messages, or form entries?
It can collect complete article text, Google Doc prose and revision events, video transcripts, flashcards, quiz questions/answers, PDFs, uploaded files, chat messages, and account details for its study features.
Adds active-page content to AI requests and sends cleaned page HTML through chunked AI generation. — assets/index.html-COXwSH79.js.map:src/screens/Chat/Chat.tsx and ScanWebPage/ScanWebPage.tsx
Fetches an open Google Doc with session cookies, reconstructs its text, and reads its edit changelog. — assets/index.html-COXwSH79.js.map:src/screens/WritingFeedback/utils/getGDocText.ts and InspectWriting/utils/gdocMutations.ts
Can it access private browser data such as cookies, signed-in sessions, browsing history, bookmarks, or downloads?
It stores a Knowt ID token, Cognito/account data, persistent analytics client ID, chat-to-URL mappings, feature preferences, and cached application state in extension local storage. It can read the active tab but has no direct cookies or history permission.
Stores an externally supplied idToken in chrome.storage.local. — assets/background.ts-DR8RY6J-.js.map:src/scripts/background.ts externalMessageListener
Uses local storage as the application cache and stores a persistent random analytics clientId. — assets/index.html-COXwSH79.js.map:src/utils/configureSyncing.ts and src/utils/analytics.ts
Can it access anything else on your device, such as files, location, camera, microphone, clipboard, or installed applications?
It records microphone audio for AI chat after a user action and uploads confirmed recordings. Its permission check itself opens a microphone stream and fails to stop it, leaving an unnecessary live stream before the real recorder starts.
Calls getUserMedia({audio:true}) and discards the successful stream without stopping its tracks. — assets/index.html-COXwSH79.js.map:src/screens/Chat/utils/microphonePermission.ts
Records microphone audio on a button click and uploads the confirmed recording to an S3 user-attachments bucket. — assets/index.html-COXwSH79.js.map:src/screens/Chat/components/ChatInput.tsx
Does it send information outside your browser? If so, what information is sent, where does it go, and why?
It sends account and generated-content data to Knowt's AWS services, uploads media to S3, sends page/document context to AI services, reports errors to Sentry, and sends URLs and usage telemetry to Google Analytics and Mixpanel.
Uses Knowt's AppSync/Cognito backend and sends extracted page HTML through chunked AI generation. — assets/index.html-COXwSH79.js.map:src/utils/aws.ts and src/screens/ScanWebPage/ScanWebPage.tsx
Posts event and page-view payloads to Google Analytics and tracks events through Mixpanel. — assets/index.html-COXwSH79.js.map:src/utils/analytics.ts
Sends captured exceptions and attached diagnostic input to Knowt's Sentry project. — assets/logging-CX-jTI9h.js.map:src/utils/logging.ts
Does it download or run code, settings, or instructions supplied by a remote server?
A bundled editor component creates a script tag for Desmos JavaScript hosted at desmos.com. This is a real remote-code loading attempt, although Chrome's default Manifest V3 extension CSP should block it because the manifest does not relax script-src.
Creates an async script whose src is https://www.desmos.com/api/v1.10.1/calculator.js with an API key and appends it to document.head. — assets/index.html-COXwSH79.js.map:packages/editor/extensions/desmos/utils/loadDesmosScript.ts
No custom extension CSP is declared, so Manifest V3's default self-only script policy applies. — manifest.json:content_security_policy
Can it take actions without a clear user request, such as opening pages, redirecting searches, downloading files, or sending requests?
page access poll supported sites every second and may inject Knowt prompts without a click. Opening the side panel also auto-detects and parses supported content and sends page-view telemetry; uploads and AI generation follow visible feature choices.
Polls supported-page state and inserts promotional import/teacher-feature UI unless dismissed or disabled. — assets/nudge.ts-Co6cN8tq.js.map:src/scripts/nudge.ts
Routes automatically based on the active tab and reports each screen with the active URL. — assets/index.html-COXwSH79.js.map:src/screens/Screens.tsx and src/components/ReportExtensionScreen.tsx
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.
No proxy, search, settings, privacy, or management permission is requested. — manifest.json:permissions
Is any important behavior difficult to inspect because the code is hidden, heavily obfuscated, dynamically generated, or supplied by third parties?
No evidence of this behavior was found in the reviewed package.
Ships 1,508 mapped source files with embedded source content, including the extension application. — assets/index.html-COXwSH79.js.map:sources and sourcesContent
Includes the complete original service-worker source. — assets/background.ts-DR8RY6J-.js.map:sourcesContent
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.
Calls eval on a function string containing the animation expression value. — assets/index.es-Ct0TtDOX.js:Lottie expression engine near expression_function
Contain Function-constructor calls for binding, intrinsic discovery, and global-object detection. — assets/PaywallPopup-C3luiye-.js and assets/index-CY1rGhtS.js:compatibility/library initialization
No string-valued Lottie expression field was found in the packaged animations. — animations/*.json:expression-field review
Does it track the websites, pages, searches, or links you visit?
It sends the active tab's full URL to Google Analytics and Mixpanel for page views and many feature events. While the side panel is open it follows active-tab changes, so sensitive paths and query strings can become telemetry even when page contents are not uploaded.
Calls reportPageView with tab.url, userId, and the current extension screen. — assets/index.html-COXwSH79.js.map:src/components/ReportExtensionScreen.tsx
Sends the supplied URL to Google Analytics and Mixpanel and includes extension-page query parameters, referrer, platform, and screen size. — assets/index.html-COXwSH79.js.map:src/utils/analytics.ts
Does it create a persistent ID or browser fingerprint to recognize you?
It creates a persistent random analytics client ID, sends the signed-in user ID, and reports platform and screen dimensions. Mixpanel is initialized with ignore_dnt enabled.
Creates crypto.randomUUID clientId, attaches userId/session ID, device platform, screen dimensions, referrer, and initializes Mixpanel with ignore_dnt=true. — assets/index.html-COXwSH79.js.map:src/utils/analytics.ts
Does it send cookies, session details, authentication data, or page contents elsewhere?
Knowt login tokens and Cognito session/account state are stored locally and used with Knowt's AWS services. The package does not read unrelated website passwords or cookies, but permitted Knowt/localhost pages can replace the stored ID token.
Accepts an idToken from externally connectable origins and stores it in chrome.storage.local. — assets/background.ts-DR8RY6J-.js.map:src/scripts/background.ts externalMessageListener
Configures Cognito/AppSync authentication and stores syncing state locally. — assets/index.html-COXwSH79.js.map:src/utils/aws.ts and configureSyncing.ts
Does it record typing, form entries, clipboard contents, or screenshots?
It does not install a general keylogger, but its Inspect Writing feature retrieves the Google Doc's full mutation log and analyzes timestamps and inserted strings to estimate typing time, paste count, pasted words, and writing naturalness.
Fetches Google Docs revisions using the user's session and extracts each inserted string with its timestamp. — assets/index.html-COXwSH79.js.map:src/screens/InspectWriting/utils/gdocMutations.ts
Classifies large insertions as pastes and computes active writing time, paste percentage, and typing naturalness. — assets/index.html-COXwSH79.js.map:src/screens/InspectWriting/utils/typingDetection.ts
Can a website or remote server send commands that make the extension take actions?
No evidence of this behavior was found in the reviewed package.
Remote structured data drives application content and user-selected document/output operations through defined GraphQL and AI flows. — assets/index.html-COXwSH79.js.map:Knowt syncing, AI, guided-event, and application sources
Does it alter links, referral codes, advertisements, shopping carts, or search results?
It automatically injects Knowt promotional nudges and a Google Docs feedback button into supported websites. These promote the extension's own features rather than third-party ads, affiliate links, or shopping manipulation.
Creates fixed-position import/AI-study prompts and a Create feedback button on Quizlet, Cram, Wayground, Kahoot, YouTube, and Google Docs pages. — assets/nudge.ts-Co6cN8tq.js.map:src/scripts/nudge.ts
Does it redirect or modify web traffic, request headers, downloads, or proxy settings?
No evidence of this behavior was found in the reviewed package.
No webRequest, declarativeNetRequest, proxy, debugger, or downloads permission is requested. — manifest.json:permissions
Can it communicate with software on the computer or services running on localhost?
Localhost pages are allowed to communicate with the extension for development authentication, but there is no native messaging, executable launch, local-service discovery, or desktop-program control.
Allows *://localhost/* and *://*.knowt.com/* to send external runtime messages. — manifest.json:externally_connectable
nativeMessaging is not requested. — manifest.json:permissions
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.
Uses JSON/GraphQL responses as account, content, AI, and application data rather than decoding hidden executable payloads. — assets/background.ts-DR8RY6J-.js.map and assets/index.html-COXwSH79.js.map:first-party response handling
Can ordinary websites access privileged extension features through messaging or exposed files?
Knowt and localhost webpages can send external messages that set the extension's stored ID token, request an installation confirmation, signal subscription changes, or trigger logout. The handler relies on the manifest's broad Knowt-subdomain allowlist and performs no finer sender check.
Allows every localhost page and every *.knowt.com origin. — manifest.json:externally_connectable
Stores session.idToken, responds to install/subscription messages, and calls logout for any other external message. — assets/background.ts-DR8RY6J-.js.map:src/scripts/background.ts externalMessageListener
Does suspicious behavior activate only for certain users, websites, dates, or remote settings?
No evidence of this behavior was found in the reviewed package.
Routes and feature gates correspond to supported sites, teacher/student roles, account limits, and user selections. — assets/index.html-COXwSH79.js.map:src/screens/Screens.tsx and feature components
Does it perform hidden resource-intensive work, such as cryptocurrency mining?
No evidence of this behavior was found in the reviewed package.
Heavy work is attributable to bundled editors, AI/chat UI, media processing, imports, and document analysis. — assets/*.js.map:first-party compute and network review
Does it change form fields or where a form sends its information?
No evidence of this behavior was found in the reviewed package.
Drives Google Docs UI and paste/comment/highlight operations using injected DOM, keyboard, clipboard-event, and mouse-event code. — assets/index.html-COXwSH79.js.map:src/screens/WritingFeedback/utils/draftGDocComment.ts, insertGDocTable.ts, and InspectWriting/utils/highlightAiSentences.ts
Inserts Knowt prompts and a feedback button into supported pages. — assets/nudge.ts-Co6cN8tq.js.map:src/scripts/nudge.ts