File Port

open source
File Port preview
Mar 2026 - Mar 2026
JavaScriptNode.jsReact NativePocketBaseSupabasePythonSQLiteChokidarXterm.js

Local-first shadow file system with a Node.js + Chokidar agent, PocketBase sync layer, Xterm.js web terminal, and React Native mobile client

A hybrid between git, Syncthing, and a headless CMS. filePort runs a Node.js agent that watches local folders with Chokidar, syncing changes into a PocketBase SQLite database in real time. An Xterm.js web terminal UI lets users browse and edit files from any browser (including mobile via Tailscale). Edits set a needs_sync flag and the reconciler loop applies them back to the laptop. A separate React Native component and Python Supabase poller provide an alternative mobile-to-desktop sync path.

Local-first offline-friendly file system synced to mobile via a lightweight database. • Agent: Node.js + Chokidar watches configured folders; scans on startup, upserts records, runs a reconcile loop every 10 s for mobile edits. • Sync DB: PocketBase (single-file SQLite) with fields: path, content, needs_sync, pending_sync, last_modified_local/mobile. • Web UI: Xterm.js + Express.js terminal SPA; ls, cd, cat, edit, pwd, clear, help commands; Save sets pending_sync = true. • React Native component: TerminalCLI + FileEditor backed by Supabase; Jest + @testing-library/react-native test suite. • Python sync poller: polls Supabase every 60 s for pending_sync rows, writes content to local filesystem, clears flag. • Remote access: Tailscale zero-config VPN; point phone browser at PC's Tailscale IP.