oblien/openship
Self-hosted deployment platform
The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
Most complex files
- apps/dashboard/src/components/migration/ServerMigrationWizard.tsx1016 cx
- packages/adapters/src/runtime/docker.ts945 cx
- apps/dashboard/src/app/(dashboard)/projects/[id]/components/DomainSettings.tsx894 cx
- packages/platform/src/engine/modules/deployments/compose/deploy.service.ts835 cx
- packages/platform/src/engine/modules/projects/project-crud.service.ts675 cx
- packages/platform/src/engine/modules/deployments/build.service.ts579 cx
- apps/api/test/modules/deployments/native-sdk-parity.test.ts545 cx
- apps/cli/src/lib/compose.ts545 cx
- apps/dashboard/src/app/(dashboard)/apps/new/[appId]/page.tsx523 cx
- packages/adapters/src/infra/nginx.test.ts517 cx
Dead code 2.09% unused · 438 findings
- apps/dashboard/src/components/scale/ScaleEditor.tsxunused-file
- packages/adapters/scripts/verify-managed-network.tsunused-file
- apps/dashboard/src/components/scale/ScaleInspector.tsxunused-file
- apps/api/scripts/promo-code.tsunused-file
- apps/dashboard/src/components/scale/ScaleCanvas.tsxunused-file
- scripts/audit-sdk-relocation.mjsunused-file
- apps/dashboard/src/components/scale/ScaleToolbar.tsxunused-file
- apps/email/client/components/create/editor.tsxunused-file
- packages/platform/src/native-worker.tsunused-file
- apps/dashboard/src/hooks/useBuildConnection.tsunused-file
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code, and 7 generated files: packages/adapters/src/infra/cloudflare-ips.generated.ts, packages/adapters/src/infra/lua-embedded.ts, packages/adapters/src/infra/lua/maxminddb.lua, packages/adapters/src/system/modules/catalog-embedded.ts, packages/core/src/app-templates.ts, packages/core/src/stacks.ts, packages/db-email/src/schema/vmail.ts.
Largest clones in the code
- 1783 lines in 2 placestsx7,173 tokensapps/email/client/components/icons/icons.tsx:1–1783apps/web/src/app/(site)/(marketing)/mail/_components/icons.tsx:1–1783
1export const Vercel = ({ className }: { className?: string }) => ( 2 <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" className={className}> 3 <title>Vercel</title> 4 <path d="M24 22.525H0l12-21.05 12 21.05z" fill="var(--icon-color)" /> 5 </svg> 6); 7 8export const Gmail = ({ className }: { className?: string }) => ( 9 <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" className={className}> 10 <title>Gmail</title>First 10 of 1783 lines.
- 9 lines in 9 placestypescript93 tokensapps/api/src/modules/mail/admin/admin.controller.ts:98–106apps/api/src/modules/mail/admin/admin.controller.ts:115–123apps/api/src/modules/mail/admin/admin.controller.ts:225–233apps/api/src/modules/mail/admin/admin.controller.ts:301–309apps/api/src/modules/mail/admin/admin.controller.ts:471–479and 4 more
98export async function listDomainsHandler(c: Context) { 99 const guard = assertNotCloud(c); 100 if (guard) return guard; 101 const serverId = param(c, "serverId"); 102 await permission.assert(getRequestContext(c), { resourceType: "mail_server", resourceId: serverId, action: "read" }); 103 const ctx = getRequestContext(c); 104 if (!(await isServerInOrg(ctx, serverId))) { 105 return c.json({ error: "Server not found" }, 404); 106 } - 25 lines in 4 placesbash192 tokensapps/email/engine/tools/backup_mysql.sh:99–123apps/email/engine/tools/backup_openldap.sh:111–135apps/email/engine/tools/backup_pgsql.sh:86–110apps/email/engine/tools/backup_sogo.sh:79–103
99# Find the old backup which should be removed. 100export REMOVE_OLD_BACKUP='YES' 101 102export KERNEL="$(uname -s)" 103if [[ X"${KERNEL}" == X'Linux' ]]; then 104 shift_year=$(date --date="${KEEP_DAYS} days ago" "+%Y") 105 shift_month=$(date --date="${KEEP_DAYS} days ago" "+%m") 106 shift_day=$(date --date="${KEEP_DAYS} days ago" "+%d") 107elif [[ X"${KERNEL}" == X'FreeBSD' ]]; then 108 shift_year=$(date -j -v-${KEEP_DAYS}d "+%Y")First 10 of 25 lines.
7 more
- 82 lines in 2 placestsx498 tokens
- 10 lines in 6 placestypescript91 tokensapps/api/src/modules/mail/admin/admin.controller.ts:135–144apps/api/src/modules/mail/admin/admin.controller.ts:162–171apps/api/src/modules/mail/admin/admin.controller.ts:252–261apps/api/src/modules/mail/admin/admin.controller.ts:324–333apps/api/src/modules/mail/admin/admin.controller.ts:559–568and 1 more
- 82 lines in 2 placestsx408 tokens
- 23 lines in 3 placestsx192 tokens
- 11 lines in 5 placestypescript96 tokens
- 10 lines in 5 placestypescript91 tokens
- 6 lines in 6 placestypescript70 tokens
Largest clones over all files, tests and data included
- 1378 lines in 25 placesjsondata files4,367 tokenspackages/db/drizzle/meta/0026_snapshot.json:521–1898packages/db/drizzle/meta/0029_snapshot.json:521–1898packages/db/drizzle/meta/0030_snapshot.json:521–1898packages/db/drizzle/meta/0031_snapshot.json:521–1898packages/db/drizzle/meta/0032_snapshot.json:521–1898and 20 more
521 "policies": {}, 522 "checkConstraints": {}, 523 "isRLSEnabled": false 524}, 525"public.backup_policy": { 526 "name": "backup_policy", 527 "schema": "", 528 "columns": { 529 "id": { 530 "name": "id",First 10 of 1378 lines.
- 4838 lines in 5 placesjsondata files15,576 tokenspackages/db/drizzle/meta/0049_snapshot.json:2790–7627packages/db/drizzle/meta/0050_snapshot.json:2790–7627packages/db/drizzle/meta/0051_snapshot.json:2790–7627packages/db/drizzle/meta/0052_snapshot.json:2790–7627packages/db/drizzle/meta/0053_snapshot.json:2878–7715
2790 "notNull": false 2791}, 2792"verified": { 2793 "name": "verified", 2794 "type": "boolean", 2795 "primaryKey": false, 2796 "notNull": true, 2797 "default": false 2798}, 2799"verified_at": {First 10 of 4838 lines.
- 532 lines in 36 placesjsondata files1,711 tokenspackages/db/drizzle/meta/0000_snapshot.json:3–534packages/db/drizzle/meta/0026_snapshot.json:3–534packages/db/drizzle/meta/0027_snapshot.json:3–534packages/db/drizzle/meta/0028_snapshot.json:3–534packages/db/drizzle/meta/0029_snapshot.json:3–534and 31 more
3"prevId": "00000000-0000-0000-0000-000000000000", 4"version": "7", 5"dialect": "postgresql", 6"tables": { 7 "public.account": { 8 "name": "account", 9 "schema": "", 10 "columns": { 11 "id": { 12 "name": "id",First 10 of 532 lines.
- 1329 lines in 11 placesjsondata files4,217 tokens
- 1629 lines in 8 placesjsondata files5,208 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 1,838 | 398,681 | 549 | 6,726 | 1.69% |
| tsx | 816 | 184,385 | 254 | 5,443 | 2.95% |
| bash | 60 | 10,129 | 9 | 153 | 1.51% |
| sql | 69 | 3,668 | 7 | 55 | 1.5% |
| lua | 7 | 1,723 | 7 | 57 | 3.31% |
| python | 8 | 1,091 | 2 | 35 | 3.21% |
| javascript | 32 | 3,572 | 0 | 0 | 0% |
| powershell | 1 | 192 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
| jsx | 2 | 112 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 3,100 | 659,652 | 1,596 | 18,739 | 2.84% |
| json | 355 | 513,105 | 669 | 399,619 | 77.88% |
| tsx | 945 | 211,007 | 446 | 7,325 | 3.47% |
| css | 24 | 8,823 | 51 | 589 | 6.68% |
| markdown | 78 | 15,829 | 31 | 310 | 1.96% |
| markup | 53 | 1,851 | 30 | 463 | 25.01% |
| yaml | 14 | 2,647 | 25 | 377 | 14.24% |
| bash | 79 | 11,290 | 13 | 473 | 4.19% |
| sql | 73 | 3,783 | 7 | 55 | 1.45% |
| lua | 8 | 2,126 | 7 | 57 | 2.68% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Sep 30, 2026 | #6 | 13,973 (+437) | 4,798 | 1,436,565 | 2,877 | 29.8% | 2.07% | C 67.4 | 0ca13fe |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.