Driftline
Health Uyari
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Basarisiz
- process.env — Environment variable access in .agents/hooks/compass.mjs
- exec() — Shell command execution in .agents/skills/review/scripts/post-review.mjs
- spawnSync — Synchronous process spawning in .agents/skills/review/scripts/post-review.mjs
- process.env — Environment variable access in .agents/skills/review/scripts/post-review.mjs
- exec() — Shell command execution in .claude/skills/review/scripts/post-review.mjs
- spawnSync — Synchronous process spawning in .claude/skills/review/scripts/post-review.mjs
- process.env — Environment variable access in .claude/skills/review/scripts/post-review.mjs
Permissions Gecti
- Permissions — No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
Native macOS file transfer client — SFTP-first with support for FTP, FTPS, WebDAV, S3, SMB, SCP and more
Driftline is a SwiftPM-first native macOS file transfer client. It combines a Finder-style dual-pane browser with secure SFTP transfers, Keychain-backed credentials, strict host trust, transfer history, and a zero-secret CLI.
Driftline is free and open source. If it helps you, you can support development on Ko-fi.
Status
Driftline is active pre-1.0 software. SFTP, FTP and FTPS workflows are functional and tested, but storage and APIs may still change before a stable 1.0 release.
| Area | Current state |
|---|---|
| System SSH/SFTP | Default backend. Runs file operations through sftp -b, so SFTP-only servers (chroot, internal-sftp, managed transfer servers) work. Supports password and keyboard-interactive login through SSH_ASKPASS, private keys, SSH agent, strict host checks, and legacy server algorithms (ssh-rsa, DH group 14, CBC). Transfers use rsync and fall back to SFTP when the server has no shell or rsync. |
| Native Swift SFTP | Opt-in backend. Supports password auth, Ed25519 keys, passphrase-protected Ed25519 keys, ECDSA PEM keys, AES-GCM and AES-CTR with HMAC-SHA-256 (also encrypt-then-MAC), browsing, file/folder transfers, cancellation, and large-file tests. No RSA host keys or DH key exchange: use System SSH for those servers. |
| FTP/FTPS | Swift client. Passive mode (EPSV, then PASV), explicit FTPS (AUTH TLS) and implicit FTPS (port 990), TLS session reuse on data connections, certificate trust prompt for self-signed certificates. |
| MCP server | Opt-in local AI integration over stdio or loopback HTTP. Off by default. |
| SCP | Fallback transfer backend. |
| WebDAV/S3/SMB | Roadmap only. Not implemented or claimed secure yet. |
| Signing/notarization | Scripts and CI hooks exist, but public releases are unsigned until Apple credentials are configured. |
1.0 scope is frozen around secure SFTP. System SSH remains the default backend; Native Swift SFTP stays opt-in until broader real-server, accessibility, and security QA are complete. See docs/release/1.0-scope.md.
Features
File Browsing
- Dual local/remote panes with native
NSOutlineViewrows and columns. - Sorting, multi-select, disclosure expansion, hidden-file filtering, and metadata columns.
- Drag/drop and copy/paste transfers between panes.
- Local and remote create, rename, delete, copy path, reveal in Finder, and Get Info actions.
- Per-tab local/remote paths and listings.
Transfers
- Upload/download files and folders.
- Transfer queue with progress, sorting, cancellation, retry, clearing, stats, and persisted history.
- Conflict handling with skip, overwrite, rename, and apply-to-remaining flows.
- Current-folder compare/sync preview for local-only, remote-only, and changed items.
Security
- Credentials stored through
CredentialStoreand macOS Keychain. - Passwords, passphrases, tokens, and private key material are never accepted as CLI arguments.
- Unknown hosts require explicit trust.
- Host fingerprint changes block by default.
- Logs and diagnostics pass through redaction.
- Delete and overwrite flows remain confirmation-driven.
macOS Integration
- SwiftUI app shell with AppKit where native desktop controls matter.
- Sidebar for saved servers, favorites, bookmarks, and recent connections.
- Inspector, transfer panel, settings, About, update checks, and background notifications.
driftlineCLI for opening local paths, bookmarks, and new tabs.- Optional MCP server for local AI tools, gated by Settings or CLI.
Architecture
Driftline/
├── Sources/
│ ├── DriftlineApp/ # SwiftUI macOS app, commands, UI features
│ ├── DriftlineCore/ # UI-free domain, security, networking, persistence
│ ├── DriftlineMCP/ # UI-free MCP protocol, tools, sandbox, transports
│ ├── driftline-mcp/ # Standalone stdio MCP executable
│ └── driftline/ # CLI entry point
├── Tests/
│ └── DriftlineCoreTests/
├── docs/ # Architecture, security, release, testing, UX docs
├── scripts/ # Build, test, lint, package, release helpers
└── assets/ # Icons and screenshots
Core boundaries:
DriftlineCorestays UI-free and testable.- Credentials live behind
CredentialStore. - Non-sensitive app data lives behind repository protocols.
- Remote browsing uses
RemoteFileSystemClient. - Transfers use
TransferClient. - SFTP/SSH implementation details do not leak into SwiftUI.
See ARCHITECTURE.md and docs/architecture/.
Install
Download the latest DMG from GitHub Releases.
Current public DMGs are unsigned/unnotarized. macOS may require manual approval in Privacy & Security until signing is configured.
Build Locally
Requirements:
- macOS 14 or newer
- Xcode 15 or newer
- Swift 5.10 or newer
git clone https://github.com/me-cedric/Driftline.git
cd Driftline
./scripts/bootstrap.sh
swift build
swift test
./script/build_and_run.sh
Package a local DMG:
./scripts/package-dmg.sh
Artifacts are written to dist/Driftline.dmg and dist/Driftline.dmg.sha256.
CLI
driftline .
driftline --open ~/Sites
driftline --bookmark staging
driftline --new-tab ~/Downloads
driftline --version
The CLI never accepts passwords, passphrases, tokens, or private key material.
MCP settings:
driftline mcp --status
driftline mcp --enable
driftline mcp --print-config
See docs/architecture/mcp-server.md.
Testing
swift test
./scripts/lint.sh
./script/build_and_run.sh --verify
Run the Docker SFTP integration harness:
DRIFTLINE_TEST_PASSWORD='driftline-test-password' ./scripts/integration-sftp-server.sh start
DRIFTLINE_INTEGRATION_SFTP=1 \
DRIFTLINE_NATIVE_INTEGRATION_SFTP=1 \
DRIFTLINE_TEST_HOST=127.0.0.1 \
DRIFTLINE_TEST_PORT=22222 \
DRIFTLINE_TEST_USER=driftline \
DRIFTLINE_TEST_KEY="$PWD/.integration/ssh/id_ed25519" \
DRIFTLINE_TEST_PASSWORD='driftline-test-password' \
swift test
Run the Docker FTP/FTPS integration harness (vsftpd with a self-signed certificate; implicit FTPS uses host port 990):
DRIFTLINE_TEST_PASSWORD='driftline-test-password' ./scripts/integration-ftp-server.sh start
DRIFTLINE_INTEGRATION_FTP=1 \
DRIFTLINE_TEST_PASSWORD='driftline-test-password' \
swift test --filter FTPIntegrationTests
For real-host QA, see docs/testing/real-server-qa-matrix.md.
Release Flow
Tag-driven CI releases are supported:
git tag -a v0.5.2 -m "Driftline 0.5.2"
git push origin v0.5.2
The Release workflow verifies the tagged commit is on main, runs lint/tests, builds the app bundle, packages the DMG, uploads the checksum, and creates the GitHub Release. Signing and notarization are skipped for tag releases until Apple credentials are configured.
Manual release dispatch still creates a draft release for review.
Documentation Map
- ARCHITECTURE.md: top-level architecture summary.
- SECURITY.md: vulnerability reporting and security principles.
- SUPPORT.md: support and bug-report expectations.
- ROADMAP.md: near-term and future product direction.
- CHANGELOG.md: release history.
- docs/architecture/: deeper implementation notes.
- docs/security/: threat model, host trust, Keychain handling.
- docs/release/: release checklist and distribution notes.
- docs/testing/: manual QA, integration harness, real-server matrix.
- docs/ux/: navigation, accessibility, design system.
- docs/security/privacy-review.md: local-first privacy/security review for 1.0.
License
MIT. See LICENSE.
Acknowledgements
Driftline takes inspiration from classic dual-pane file transfer clients and native macOS tools, with a stronger bias toward secure defaults and calm desktop behavior.
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi