Skip to content

Repository files navigation

Nomen

Clean names. Clear files.

Nomen is a privacy-first batch file renamer that runs entirely in the browser. Files are never uploaded, original binaries remain untouched by default, every filename is previewed, and conflicts are detected before export.

Highlights

  • Add individual files, multiple files, or folders
  • Composable rename-rule pipeline with reordering and enable/disable controls
  • Cleanup, case conversion, regex replacement, prefix/suffix, numbering, dates, transliteration, extension control, length limits, and token patterns
  • Correct compound-extension handling such as .tar.gz, .min.js, and .d.ts
  • Live difference preview, filters, manual overrides, undo/redo, and conflict resolution
  • ZIP, renamed copies, CSV, JSON, PowerShell, Bash, and copied command exports
  • Local presets, English/Vietnamese UI, dark/light themes, responsive mobile workflow
  • Installable offline PWA with no backend, account, database, or tracking

Start locally

npm install
npm run dev

Open the local Vite URL. For a production check:

npm run typecheck
npm test
npm run build

Workspace routing and file-session behavior

The app workspace uses the #/rename route so it remains available after a browser refresh on Vercel, Netlify, Cloudflare Pages, and static GitHub Pages deployments. Selected File objects intentionally remain memory-only: after a full refresh, the workspace route is preserved but files must be selected again. This prevents Nomen from silently storing users’ file contents.

v1.1 fixes

  • Fixed preview rows being hidden beneath the old sticky table header.
  • Reset stale preview filters whenever files are added or a batch is cleared.
  • Added a real #/rename workspace route that survives refresh and browser navigation.
  • Redesigned the rules panel, preview rows, filters, checkboxes, typography, and export panel for better readability.
  • Added local image thumbnails and clearer original → renamed comparisons.
  • Collapsed secondary preset rules by default to reduce visual overload.
  • Added route and preview-row regression coverage to Playwright tests.

Architecture

The framework-independent engine lives in src/lib/engine.ts and receives plain file metadata, a rule array, compatibility target, and optional overrides. UI state is managed by Zustand. File binaries are only retained in memory for exports initiated by the user.

Privacy model

Nomen has no upload endpoint and no server runtime. It does not inspect file contents unless a future opt-in metadata rule requires it. The service worker caches only application assets; it never caches selected files.

Deployment

Vercel / Netlify / Cloudflare Pages

  • Build command: npm run build
  • Output directory: dist

GitHub Pages

vite.config.ts uses a relative base, so the generated dist folder can be deployed under a repository subpath.

Browser limitations

Downloading renamed copies and ZIP files works broadly. Directly renaming files inside a selected folder requires the File System Access API, explicit permission, and a browser that implements it. The current interface labels that path as browser-dependent and provides safe exports instead of claiming universal support.

License

MIT

About

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages