All notable changes to Lineup are documented here.
- Lineup can now scan TypeScript projects (
.tsand.tsxfiles) for V8 JIT memory layout inefficiencies. V8 storesnumberproperties as unboxed 8-byte doubles while all other property types are stored as 4-byte tagged compressed pointers (Node.js 14+, 64-bit). Interleavingnumberand non-numberproperties creates the same hidden padding waste as Go struct misalignment. - Analyzes three TypeScript constructs:
classdeclarations (instance properties only; static properties are skipped),interfacedeclarations, and objecttypealiases (type Foo = { ... }). - Supports both exported and non-exported declarations, including
export default class. - New
ts_parser.rsRust module: walks.ts/.tsxfiles usingoxc_parser0.128 (pure Rust, no C build step). Auto-skipsnode_modules/,dist/,build/,.next/,.nuxt/,coverage/, and.cache/in addition to.gitignoreexclusions. - New TypeScript analysis pipeline in
analyzer.rs:ts_type_info()V8 size model,analyze_ts_files(), andbuild_ts_def(). Shares the samealign_up,struct_layout, and optimal-sort primitives as the Go pipeline. - TypeScript declarations that
extendorimplementother types are flagged~approximatebecause parent properties affect V8 hidden-class layout but are not resolved across files.
- New Language toggle (
Go/TypeScript) in the Scan Options modal. Arch selector is hidden when TypeScript is selected (V8 always uses 64-bit pointer compression). - New Default Language setting in the Settings page (
goby default). ScanOptionsnow carries alanguagefield passed to the Tauriscan_repocommand.
declaration_kindfield added to all result types:"struct"for Go,"class"/"interface"/"type"for TypeScript.- Kind badge shown next to the type name in
StructCardandStructDetailfor non-Go results. - Toolbar on the Scan Results screen shows
"declarations"instead of"structs"for TypeScript scans.
- Database schema — two additive
ALTER TABLEmigrations applied at startup:scans.language TEXT NOT NULL DEFAULT 'go'struct_results.declaration_kind TEXT NOT NULL DEFAULT 'struct'- Both migrations are no-ops on existing databases (duplicate-column errors are silently ignored).
save_scanandsave_struct_resultindb.rsnow accept and storelanguage/declaration_kindrespectively.get_history,get_scan_detail, andget_struct_detailqueries updated to select and map the new columns.ScanSummary,StructSummary, andStructDetailRust and TypeScript types updated with new fields.AppSettingsTypeScript interface gainsdefaultLanguage: string.- Re-scan pre-fills the
languageof the original scan (same as it does for arch and ignore patterns).
- Added
oxc_allocator,oxc_parser,oxc_ast,oxc_spanat version0.128.0(pure Rust TypeScript/JSX parser).
- History card language badge — the language is now displayed as a bordered monospace pill (
GO/TS) next to the repo path instead of inline parenthetical text. The path remains truncatable while the badge is always fully visible. - Language-aware ignore pattern placeholders — the ignore patterns textarea in the Scan Options modal and in Settings now shows language-appropriate placeholder examples. Go shows
vendor/,generated/,_test\.go$; TypeScript shows\.test\.tsx?$,\.spec\.tsx?$,\.d\.ts$. The modal placeholder updates reactively when the language toggle is switched.
PARSER_LANGUAGEtype narrowed to"GO" | "TS"— language values are now uppercase string literals throughout the frontend (types.ts,util.ts, settings store, all components and pages) and stored as"GO"/"TS"in the SQLite database. The databaseDEFAULTand Rust fallback values updated to match.- GitHub Actions CI pipeline (
.github/workflows/ci.yml) — two jobs running onubuntu-24.04:- Frontend: pnpm install (frozen lockfile) → Biome lint →
tsc --noEmittype-check → Vite build. Usesactions/setup-nodepnpm store cache. - Backend: apt system-dep cache → Tauri Linux deps →
cargo check→cargo clippy→cargo test. UsesSwatinem/rust-cachewithcache-on-failureand a shared cache key across branches. - All action references pinned to full commit SHAs. Triggers on push to
mainanddevelop, and on PRs targetingmain.
- Frontend: pnpm install (frozen lockfile) → Biome lint →
- Go struct padding analysis for
amd64andarm64targets. - Three-pane results UI (file tree / declaration list / detail panel).
- Scan history persisted to local SQLite database.
- Re-scan with pre-filled options.
- Configurable ignore patterns (regex).
- Copy optimized definition to clipboard.
- Dark / light theme.