OpenWhispr/openwhispr
Voice-to-text dictation app with local (Nvidia Parakeet/Whisper) and cloud models (BYOK). Privacy-first and available cross-platform.
JavaScript★ 7,523+121 that day#7 on trending
2.49%duplicated code · 4,662 of 187,463 lines
340clones in code
767code files of 1,289 scanned
3.34%duplicated over all files · 838 clones
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code.
Largest clones in the code
- 19 lines in 2 placesc829 tokens
4* Uses AT-SPI2 to monitor the focused text field for value changes. 5* Outputs "CHANGED:<value>" to stdout when the text changes. 6* Exits after a timeout or on receiving a termination signal. 7* 8* Protocol (stdout): 9* INITIAL_VALUE:<text> - Initial text field value 10* INITIAL_VALUE_B64:<base64> - Initial text field value (multiline) 11* CHANGED:<text> - Text field value after a change 12* CHANGED_B64:<base64> - Text field value after a change (multiline) 13* EDITABLE - Focused element is writable with no live selection (--probe-editable)First 10 of 19 lines.
- 80 lines in 2 placesjavascript381 tokens
105 return false; 106 } 107 108 log("Download failed or binary not found after download"); 109 return false; 110} 111 112/** 113 * Quote a path for use in shell commands on Windows. 114 * @param {string} p - Path to quoteFirst 10 of 80 lines.
- 79 lines in 2 placesjavascript368 tokens
70 process.exit(1); 71} 72 73ensureDir(outputDir); 74ensureDir(moduleCacheDir); 75 76let needsBuild = true; 77if (fs.existsSync(outputBinary)) { 78 if (!verifyBinaryArch(outputBinary, targetArch)) { 79 log(`Existing binary is wrong architecture (expected ${targetArch}), rebuild needed`);First 10 of 79 lines.
7 more
- 8 lines in 7 placesjavascript50 tokens
- 21 lines in 4 placesjavascript94 tokens
- 28 lines in 2 placesc276 tokens
- 8 lines in 5 placesjavascript68 tokens
- 21 lines in 3 placesjavascript120 tokens
- 7 lines in 5 placesjavascript52 tokens
- 10 lines in 4 placesjavascript66 tokens
Largest clones over all files, tests and data included
- 19 lines in 2 placesc829 tokens
4* Uses AT-SPI2 to monitor the focused text field for value changes. 5* Outputs "CHANGED:<value>" to stdout when the text changes. 6* Exits after a timeout or on receiving a termination signal. 7* 8* Protocol (stdout): 9* INITIAL_VALUE:<text> - Initial text field value 10* INITIAL_VALUE_B64:<base64> - Initial text field value (multiline) 11* CHANGED:<text> - Text field value after a change 12* CHANGED_B64:<base64> - Text field value after a change (multiline) 13* EDITABLE - Focused element is writable with no live selection (--probe-editable)First 10 of 19 lines.
- 29 lines in 10 placesjsontranslations91 tokenssrc/locales/de/translation.json:1324–1352src/locales/en/translation.json:1324–1352src/locales/es/translation.json:1283–1311src/locales/fr/translation.json:1324–1352src/locales/it/translation.json:1235–1263and 5 more
1324"examplesTitle": "Gültige Beispiele", 1325"platforms": { 1326 "linux": "Linux", 1327 "macos": "macOS", 1328 "windows": "Windows" 1329}, 1330"recommended": { 1331 "linux": { 1332 "0": "Ctrl+Alt+Space", 1333 "1": "Super+S",First 10 of 29 lines.
- 8 lines in 11 placesjavascripttests65 tokenstest/helpers/calendarDatabase.test.js:1–8test/helpers/cliBridgeDictionary.test.js:1–8test/helpers/containerConversationsDatabase.test.js:1–8test/helpers/dictionaryDatabase.test.js:1–8test/helpers/granolaImportDatabase.test.js:1–8and 6 more
1const test = require("node:test"); 2const assert = require("node:assert/strict"); 3const fs = require("node:fs"); 4const os = require("node:os"); 5const path = require("node:path"); 6const Module = require("node:module"); 7 8let userDataDir = fs.mkdtempSync(path.join(os.tmpdir(), "openwhispr-calendar-db-"));1const test = require("node:test"); 2const assert = require("node:assert/strict"); 3const fs = require("node:fs"); 4const os = require("node:os"); 5const path = require("node:path"); 6const Module = require("node:module"); 7 8let userDataDir = fs.mkdtempSync(path.join(os.tmpdir(), "openwhispr-cli-dict-")); - 30 lines in 5 placesjavascripttests156 tokens
- 19 lines in 6 placesjavascripttests98 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| javascript | 262 | 84,439 | 244 | 3,487 | 4.13% |
| tsx | 203 | 52,469 | 56 | 713 | 1.36% |
| typescript | 243 | 37,476 | 27 | 299 | 0.8% |
| c | 10 | 5,887 | 9 | 113 | 1.92% |
| objectivec | 14 | 1,697 | 2 | 34 | 2% |
| perl | 2 | 454 | 1 | 10 | 2.2% |
| cpp | 3 | 400 | 1 | 6 | 1.5% |
| swift | 7 | 2,107 | 0 | 0 | 0% |
| jsx | 3 | 1,035 | 0 | 0 | 0% |
| bash | 12 | 866 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| javascript | 702 | 161,456 | 698 | 8,576 | 5.31% |
| tsx | 203 | 52,469 | 56 | 713 | 1.36% |
| typescript | 246 | 37,570 | 27 | 299 | 0.8% |
| yaml | 17 | 1,638 | 25 | 433 | 26.43% |
| json | 19 | 41,826 | 9 | 261 | 0.62% |
| c | 10 | 5,887 | 9 | 113 | 1.92% |
| css | 4 | 2,468 | 7 | 62 | 2.51% |
| python | 4 | 940 | 3 | 94 | 10% |
| objectivec | 14 | 1,697 | 2 | 34 | 2% |
| perl | 2 | 454 | 1 | 10 | 2.2% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Sep 7, 2026 | #7 | 7,523 (+121) | 1,289 | 316,931 | 838 | 3.34% | 2.49% | — | a9cf27b |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.