Piles is an Electron desktop utility for visually organizing the direct contents of a single folder into spatial groups called piles without moving the underlying files on disk by default.
This repository is in active prototype development.
Implemented now:
- Electron + React + TypeScript app scaffold
- Canonical shared contracts in code
- Preload bridge and IPC registration
- Filesystem service for folder selection, folder reads, and file actions
- Persistence service for workspace load and save
- Initial renderer shell
Next planned work:
- Renderer store and workspace loading
- Item rendering, selection, marquee, and drag behavior
- Piles and membership flows
- Folder watch, reconcile, and auto-group behavior
- Single-folder workspace only
- Piles are virtual in MVP
- Filesystem is the source of truth for live files
- No AI grouping
- No cloud sync
- No Finder replacement
- No hidden filesystem mutations
Main process:
- filesystem access
- persistence
- IPC handlers
- OS-level file actions
Renderer:
- React UI
- workspace shell
- canvas interactions
- state management
Shared contracts:
src/shared/types.tssrc/shared/ipc.ts
The project uses a split model:
FileMetafor live filesystem metadataItemLayoutfor persisted visual layoutGroupModelfor pile stateWorkspaceDatafor folder-specific app state
Rename behavior in MVP is path-based:
- item identity is the file path
- rename is treated as remove/add during reconciliation
- workspace stability is required
- exact identity continuity is not guaranteed
Use this precedence order when artifacts disagree:
src/shared/types.tssrc/shared/ipc.tsdocs/PRD.mddocs/PLAN.mddocs/task-manifest.ymldocs/TODO.md
Supporting docs:
AGENTS.md: project-local agent rules and authority orderdocs/PRD.md: product behavior and scopedocs/PLAN.md: canonical implementation plan and execution orderdocs/task-manifest.yml: machine-readable mirror of the plandocs/TODO.md: live execution queue and task status
Requirements:
- Node.js 23+
- npm 10+
Install dependencies:
npm installRun the app in development:
npm run devBuild the project:
npm run buildRun tests:
npm testRun type checks:
npm run typecheckComplete:
- T-001 Scaffold app shell
- T-002 Create canonical shared contracts in code
- T-003 Add project-level agent instructions
- T-004 Implement filesystem services
- T-005 Implement persistence services
- T-006 Wire preload bridge and IPC contract
Next:
- T-007 Build renderer store and workspace shell
- T-008 Implement item rendering and movement
See docs/TODO.md for the full queue.