Skip to content

Repository files navigation

Grid Transit

A visual FTP/SFTP/FTPS sync client with diff comparison and a built-in conflict merge editor.

Grid Transit scans a local folder against a remote one, shows you exactly what changed — new, modified, deleted, or in conflict — lets you inspect real line-by-line diffs before transferring anything, and gives you a proper merge editor when both sides genuinely disagree, instead of silently overwriting one side.

  • 🌐 Website: see the Website/ folder for the landing page and documentation
  • 📦 Download: prebuilt Windows installer/portable builds are published from Releases
  • 📄 License: MIT

Features

  • Side-by-side diff viewer — Monaco-powered diff editor for comparing local vs. remote file contents before syncing.
  • Conflict merge editor — a git-style <<<<<<< / ======= / >>>>>>> editor for resolving files changed on both sides.
  • SFTP, FTP & FTPS — connect over SSH-based SFTP, plain FTP, or encrypted FTPS.
  • Two-phase scan engine — instant directory listing, followed by a background content comparison so the UI never blocks.
  • Smart exclusion filters — wildcard patterns (node_modules, *.log, .git, …) applied to every scan.
  • Selective bulk sync — filter by changed/conflicting/synced files, select what you want, and execute uploads, downloads and deletions in one batch with real transfer progress.
  • Transfer history — a full audit log of every upload, download and deletion, with size, speed and result.
  • Local & remote explorers — browse both directory trees side by side.
  • Desktop app — packaged with Electron for Windows (portable .exe or installer).

Tech Stack

Layer Technology
Frontend React 19, Vite 6, Tailwind CSS, Zustand
Editor Monaco Editor (@monaco-editor/react)
Backend Node.js, Express
Transfer protocols ssh2-sftp-client (SFTP), basic-ftp (FTP/FTPS)
Desktop packaging Electron + electron-builder

Project Structure

├── src/
│   ├── pages/MainDashboard.tsx     # Main application UI
│   ├── components/                 # Shared UI components (context menu, etc.)
│   ├── stores/sync-store.ts        # Zustand store — all client-side state & API calls
│   └── server/api-router.ts        # Express API: scanning, diffing, transfers, history
├── electron/
│   └── main.cjs                    # Electron main process (desktop packaging)
├── server.ts                       # Standalone Express server (serves built frontend + API)
├── ftp_sync_workspace/             # Local workspace: demo files, cache, history (gitignored where sensitive)
└── Website/                        # Marketing landing page + documentation site

Getting Started (development)

Prerequisites: Node.js 18+

# 1. Install dependencies
npm install

# 2. Start the dev server (frontend + API on http://localhost:3000)
npm run dev

Vite serves the frontend and mounts the same Express API router used in production, so npm run dev is a fully working environment on its own — no separate backend process needed.

Other scripts

Script Purpose
npm run build Production build of the frontend (dist/)
npm run start Run the standalone Express server against a production build
npm run lint Type-check the project with tsc --noEmit
npm run electron:dev Run the app inside an Electron window (dev mode)
npm run electron:build Build the frontend, bundle the server, and package a Windows .exe/installer with electron-builder

Building the Desktop App

npm run electron:build

This produces two artifacts in release/:

  • Grid Transit <version>.exe — portable, no installation required
  • Grid Transit Setup <version>.exe — guided installer with a Start Menu shortcut

Trying It Without a Real Server

You can point a connection profile's Host field at another local folder on your machine instead of a real server address — Grid Transit will treat it as the "remote" side using plain file copies. This is useful for trying the full compare/sync/merge workflow risk-free before connecting to a live server. The ftp_sync_workspace/local_dir and ftp_sync_workspace/remote_dir folders in this repo are a ready-made example for this.

Security Notes

  • Connection credentials entered in the UI are encrypted before being stored in local browser storage and never leave your machine.
  • File operations are guarded against path traversal — every local and remote path is resolved and validated against its configured root before any read, write or delete.
  • This is a young open-source project: review the source before pointing it at production credentials, and please open an issue if you find a security concern.

Contributing

Issues and pull requests are welcome. Please open an issue describing the change before submitting a large PR.

License

Released under the MIT License.


A project by Devignitor · Founded by Azmat Ali Khan

About

Grid Transit - a visual SFTP/FTP/FTPS sync client with diff comparison and conflict merge editor.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages