Eagle Connect is an Eagle plugin for exposing an Eagle library through SMB, WebDAV, and FTP from a single in-app control panel.
The plugin supports two main workflows:
- browsing Eagle items from external clients through protocol listing routes
- receiving uploaded files through protocol uploader endpoints and importing them back into Eagle
The UI provides three protocol tabs:
smbwebdavftp
Each protocol has its own persisted:
- server toggle
- port
- page size
- route set
When started inside Eagle, the plugin reads the active library path, loads persisted config through eagle-cooltils, and starts a real npm-backed protocol server for the selected protocol.
Each protocol uses the same three route kinds.
The builtin route for browsing the whole library.
- only one
allroute is allowed per protocol - the path is generated by the protocol adapter
- listings are paged using the protocol page size
A custom browse route backed by saved Eagle-style grouped filters.
- filtered routes use unique custom paths per protocol
- filter definitions support top-level
ANDorOR - each group can contain multiple rules
- listing results are resolved to concrete Eagle items before files are served
A custom upload endpoint for importing incoming files into Eagle.
- uploader routes use unique custom paths per protocol
- uploads can go to
unsorted - uploads can be imported into a selected Eagle folder
- backed by
node-smb-server - exposes route-aware listing shares and uploader endpoints
- intended for Windows-style file sharing clients
- backed by
webdav-server - supports mounted listing paths and uploader directories
- serves concrete Eagle files through dynamic mounted resources
- backed by
ftp-srv - exposes route-aware virtual filesystem listings
- supports uploader staging folders that import files into Eagle
Protocol config is stored per Eagle library through eagle-cooltils.
Persisted values include:
- protocol ports
- protocol page sizes
- protocol route definitions
Config rehydrates after the Eagle runtime becomes available, which avoids losing settings when the React app mounts before Eagle finishes initializing its plugin APIs.
- React 19
- TypeScript 6
- Vite 8
- Tailwind CSS 4
- daisyUI 5
- Vitest
- Testing Library
Runtime packages:
eagle-cooltilsftp-srvwebdav-servernode-smb-server
Install dependencies:
pnpm installBuild once:
pnpm buildWatch builds:
pnpm devRun tests:
pnpm testRun tests in watch mode:
pnpm test:watchRun lint:
pnpm lintThis project targets the Eagle plugin runtime.
- the frontend can build outside Eagle
- protocol runtime startup depends on Eagle runtime APIs and the current library path
- outside Eagle, server startup is expected to be unavailable
Plugin metadata is defined in manifest.json, and the built UI loads from dist/index.html.
Packaging is controlled by .eagleplus/config/pkg-rules.json.
The package currently includes:
dist/assets/**dist/index.htmlmanifest.jsonlogo.png_locales
Useful packaging commands:
node .eagleplus/scripts/doctor.cjs
node .eagleplus/scripts/package-plugin.cjs --check
node .eagleplus/scripts/package-plugin.cjs release
node .eagleplus/scripts/package-plugin.cjs debug
node .eagleplus/scripts/package-local.cjsdoctor.cjs is the fastest way to inspect the exact packaging inputs.
- src/App.tsx: main protocol control panel
- src/components: tabs, panels, dialogs, and editor UI
- src/hooks: persisted config state and server lifecycle state
- src/servers: route normalization, adapters, shared runtime helpers, and protocol implementations
- src/eagleCooltilsRuntime.ts: Eagle config bridge and init hooks
- manifest.json: Eagle plugin metadata
- This repository is
pnpm-first. dist/is intentionally preserved in the normal workflow for this repo.- The README documents the plugin itself rather than the original template scaffold.
