pascalorg/editor
Open-source 3D architectural editor with a local CLI, MCP tools, and practical workflows for humans and AI agents.
TypeScript★ 23,059+107 that day#3 on trending
8.36%duplicated code · 32,874 of 393,382 lines
1,887clones in code
1,460code files of 2,253 scanned
8.63%duplicated over all files · 2,941 clones
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code.
Largest clones in the code
- 25 lines in 45 placestypescript86 tokenspackages/core/src/material-library.ts:1946–1970packages/core/src/material-library.ts:1978–2002packages/core/src/material-library.ts:2010–2034packages/core/src/material-library.ts:2042–2066packages/core/src/material-library.ts:2074–2098and 40 more
1946color: '#e9e9e9', 1947roughness: 0.9, 1948metalness: 0, 1949repeatX: 1, 1950repeatY: 1, 1951rotation: 0, 1952wrapS: 'Repeat', 1953wrapT: 'Repeat', 1954normalScaleX: 1, 1955normalScaleY: 1,First 10 of 25 lines.
- 221 lines in 3 placestsx1,359 tokenspackages/nodes/src/box-vent/move-tool.tsx:44–264packages/nodes/src/eyebrow-vent/move-tool.tsx:43–254packages/nodes/src/turbine-vent/move-tool.tsx:43–254
44export default function MoveBoxVentTool({ node }: { node: BoxVentNode }) { 45 const exitMoveMode = useCallback(() => { 46 useEditor.getState().setMovingNode(null) 47 }, []) 48 49 const [previewPos, setPreviewPos] = useState<[number, number, number] | null>(null) 50 const [previewSurfaceQuat, setPreviewSurfaceQuat] = useState<THREE.Quaternion | null>(null) 51 const [previewYaw, setPreviewYaw] = useState(0) 52 53 useEffect(() => {First 10 of 221 lines.
- 28 lines in 20 placestypescript95 tokenspackages/core/src/material-library.ts:106–133packages/core/src/material-library.ts:180–207packages/core/src/material-library.ts:217–244packages/core/src/material-library.ts:254–281packages/core/src/material-library.ts:293–320and 15 more
106 roughnessMap: '/material/wood/finewood_27/finewood_27_roughness_512.ktx2', 107}, 108mapProperties: { 109 color: '#ffffff', 110 roughness: 0.5, 111 metalness: 0, 112 repeatX: 1, 113 repeatY: 1, 114 rotation: 0, 115 wrapS: 'Repeat',First 10 of 28 lines.
7 more
- 82 lines in 2 placestypescript1,196 tokens
- 48 lines in 4 placestypescript396 tokens
- 195 lines in 2 placestsx1,159 tokens
- 93 lines in 3 placestsx528 tokens
- 28 lines in 12 placestypescript95 tokens
- 37 lines in 4 placestypescript340 tokens
- 62 lines in 3 placestsx464 tokens
Largest clones over all files, tests and data included
- 25 lines in 45 placestypescript86 tokenspackages/core/src/material-library.ts:1946–1970packages/core/src/material-library.ts:1978–2002packages/core/src/material-library.ts:2010–2034packages/core/src/material-library.ts:2042–2066packages/core/src/material-library.ts:2074–2098and 40 more
1946color: '#e9e9e9', 1947roughness: 0.9, 1948metalness: 0, 1949repeatX: 1, 1950repeatY: 1, 1951rotation: 0, 1952wrapS: 'Repeat', 1953wrapT: 'Repeat', 1954normalScaleX: 1, 1955normalScaleY: 1,First 10 of 25 lines.
- 221 lines in 3 placestsx1,359 tokenspackages/nodes/src/box-vent/move-tool.tsx:44–264packages/nodes/src/eyebrow-vent/move-tool.tsx:43–254packages/nodes/src/turbine-vent/move-tool.tsx:43–254
44export default function MoveBoxVentTool({ node }: { node: BoxVentNode }) { 45 const exitMoveMode = useCallback(() => { 46 useEditor.getState().setMovingNode(null) 47 }, []) 48 49 const [previewPos, setPreviewPos] = useState<[number, number, number] | null>(null) 50 const [previewSurfaceQuat, setPreviewSurfaceQuat] = useState<THREE.Quaternion | null>(null) 51 const [previewYaw, setPreviewYaw] = useState(0) 52 53 useEffect(() => {First 10 of 221 lines.
- 28 lines in 20 placestypescript95 tokenspackages/core/src/material-library.ts:106–133packages/core/src/material-library.ts:180–207packages/core/src/material-library.ts:217–244packages/core/src/material-library.ts:254–281packages/core/src/material-library.ts:293–320and 15 more
106 roughnessMap: '/material/wood/finewood_27/finewood_27_roughness_512.ktx2', 107}, 108mapProperties: { 109 color: '#ffffff', 110 roughness: 0.5, 111 metalness: 0, 112 repeatX: 1, 113 repeatY: 1, 114 rotation: 0, 115 wrapS: 'Repeat',First 10 of 28 lines.
- 7 lines in 22 placestypescripttests57 tokens
- 82 lines in 2 placestypescript1,196 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| tsx | 484 | 191,244 | 1,187 | 21,189 | 11.08% |
| typescript | 958 | 200,638 | 697 | 11,635 | 5.8% |
| bash | 12 | 1,099 | 3 | 50 | 4.55% |
| javascript | 5 | 227 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 1,557 | 317,376 | 1,688 | 23,121 | 7.29% |
| tsx | 501 | 192,878 | 1,190 | 21,217 | 11% |
| json | 45 | 4,888 | 33 | 483 | 9.88% |
| markdown | 78 | 8,822 | 11 | 465 | 5.27% |
| css | 2 | 535 | 9 | 58 | 10.84% |
| bash | 22 | 1,349 | 8 | 132 | 9.79% |
| yaml | 18 | 908 | 1 | 23 | 2.53% |
| text | 11 | 509 | 1 | 36 | 7.07% |
| javascript | 6 | 231 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Sep 10, 2026 | #3 | 23,059 (+107) | 2,253 | 527,789 | 2,941 | 8.63% | 8.36% | — | 5dabbc3 |
| Sep 8, 2026 | #9 | 22,447 (+168) | 2,119 | 507,680 | 2,923 | 8.95% | 8.68% | — | c3afd16 |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.