1 view
supermemoryai/supermemory
Memory and context engine + app that is extremely fast, scalable, and can be run fully locally. The Memory API for the AI era.
TypeScript★ 30,377+140 that day#10 on trending
D44.2/100
Duplication69
4.6% in typescript, tsx, python, bash, perlDead code21
17.6%Complexity59
38.6% The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
3.47%duplicated code · 1,483 of 42,738 lines
90clones in code
281code files of 506 scanned
4.9%duplicated over all files · 231 clones
Most complex files
- packages/memory-graph/src/canvas/renderer.ts237 cx
- packages/memory-graph/src/components/memory-graph.tsx218 cx
- packages/tools/src/openai/middleware.ts202 cx
- packages/agent-framework-python/src/supermemory_agent_framework/middleware.py144 cx
- packages/tools/src/voltagent/middleware.ts137 cx
- packages/memory-graph/src/hooks/use-graph-data.ts129 cx
- apps/sdk-playground/python/server.py128 cx
- apps/memory-graph-playground/src/app/page.tsx124 cx
- packages/openai-sdk-python/src/supermemory_openai/middleware.py122 cx
- packages/tools/src/claude-memory.ts121 cx
Dead code 17.64% unused · 106 findings
- packages/validation/api.tsunused-file
- packages/ui/components/sidebar.tsxunused-file
- packages/lib/api.tsunused-file
- packages/ui/assets/icons.tsxunused-file
- packages/validation/schemas.tsunused-file
- packages/ui/components/chart.tsxunused-file
- packages/ui/assets/Logo.tsxunused-file
- packages/lib/glass-effect-manager.tsunused-file
- packages/lib/auth-context.tsxunused-file
- packages/ui/components/dropdown-menu.tsxunused-file
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code.
Largest clones in the code
- 18 lines in 4 placestypescript113 tokenspackages/validation/api.ts:962–979packages/validation/api.ts:980–997packages/validation/api.ts:998–1015packages/validation/api.ts:1016–1033
962"7d": z.object({ 963 amountSaved: z.object({ 964 current: z.number(), 965 previousPeriod: z.number(), 966 }), 967 tokensProcessed: z.object({ 968 current: z.number(), 969 previousPeriod: z.number(), 970 }), 971 tokensSent: z.object({First 10 of 18 lines.
- 59 lines in 2 placespython319 tokenspackages/cartesia-sdk-python/src/supermemory_cartesia/utils.py:131–189packages/pipecat-sdk-python/src/supermemory_pipecat/utils.py:134–192
131 key = _memory_key(memory) 132 if key and key not in seen: 133 seen.add(key) 134 out.append(r) 135 return out 136 137return { 138 "static": unique_strings(static), 139 "dynamic": unique_strings(dynamic), 140 "search_results": unique_search(search_results),First 10 of 59 lines.
- 58 lines in 2 placespython302 tokenspackages/cartesia-sdk-python/src/supermemory_cartesia/utils.py:13–70packages/pipecat-sdk-python/src/supermemory_pipecat/utils.py:33–90
13 return None 14 15 16def format_relative_time(iso_timestamp: str) -> str: 17 """Convert ISO timestamp to relative time string. 18 19 Format rules: 20 - [just now] - within 30 minutes 21 - [Xmins ago] - 30-60 minutes 22 - [X hrs ago] - less than 1 dayFirst 10 of 58 lines.
7 more
- 26 lines in 3 placespython123 tokens
- 66 lines in 2 placespython238 tokens
- 28 lines in 2 placestypescript169 tokens
- 12 lines in 3 placestypescript70 tokens
- 23 lines in 2 placespython129 tokens
- 33 lines in 2 placestypescript121 tokens
- 8 lines in 3 placespython60 tokens
Largest clones over all files, tests and data included
- 49 lines in 2 placescssstyles574 tokens
268--shadow-inset: inset 2px 2px 5px rgba(4, 8, 13, 0.55); 269--shadow-inset-strong: inset 2.4px 2.4px 4.5px rgba(6, 10, 16, 0.7); 270 271--text-primary: #eef2f7; 272--text-secondary: #a9b4c2; 273--text-muted: #6f7d8f; 274--text-inverse: #0b1119; 275 276--success: #34d399; 277--success-muted: rgba(52, 211, 153, 0.14);First 10 of 49 lines.
- 49 lines in 2 placescssstyles505 tokens
217[data-theme="dark"] { 218 color-scheme: dark; 219 220 --accent: #4ba0fa; 221 --accent-foreground: #0a0f16; 222 --accent-hover: #66b0ff; 223 --accent-muted: rgba(75, 160, 250, 0.14); 224 --accent-ring: rgba(75, 160, 250, 0.4); 225 226 --button-primary-bg: #0d121a;First 10 of 49 lines.
- 25 lines in 2 placescssstyles423 tokens
84--destructive-foreground: oklch(0.967 0.0029 264.5419); 85--font-sans: Space Grotesk, ui-sans-serif, sans-serif, system-ui; 86--font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; 87--font-mono: Space Mono, ui-monospace, monospace; 88--shadow-color: oklch(0 0 0); 89--shadow-opacity: 0.04; 90--shadow-blur: 3px; 91--shadow-spread: 0px; 92--shadow-offset-x: 0; 93--shadow-offset-y: 1px;First 10 of 25 lines.
- 14 lines in 7 placesyamldata files66 tokens
- 18 lines in 4 placestypescript113 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 132 | 21,523 | 44 | 709 | 3.29% |
| python | 21 | 6,413 | 31 | 579 | 9.03% |
| tsx | 118 | 13,984 | 15 | 195 | 1.39% |
| bash | 9 | 644 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 201 | 35,037 | 125 | 1,908 | 5.45% |
| python | 52 | 10,502 | 42 | 715 | 6.81% |
| yaml | 12 | 935 | 25 | 344 | 36.79% |
| tsx | 127 | 14,935 | 19 | 297 | 1.99% |
| markdown | 28 | 8,221 | 8 | 135 | 1.64% |
| css | 8 | 1,342 | 5 | 156 | 11.62% |
| toml | 5 | 335 | 4 | 87 | 25.97% |
| json | 28 | 2,220 | 2 | 52 | 2.34% |
| markup | 18 | 741 | 1 | 8 | 1.08% |
| bash | 16 | 878 | 0 | 0 | 0% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Sep 19, 2026 | #10 | 30,377 (+140) | 506 | 75,606 | 231 | 4.9% | 3.47% | D 44.2 | 57b430b |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.