What it does

One library for everything you connect to, and the details that decide whether a tool like this is trustworthy.

Eighteen connection types

All built in. No plugin marketplace, no driver downloads, no server component to run anywhere.

KindTransportNotes
MySQL & MariaDBnativeCatalog-driven schema tree.
PostgreSQLnativeCatalog-driven schema tree.
Microsoft SQL Servernative2005 and later.
Oraclenative8i and later.
SQLitefileIndexes, foreign keys and triggers.
DuckDBfileIndexes and foreign keys.
ClickHousehttpData-skipping indices only, because the engine has no others.
Amazon AthenahttpNo index folders appear: its tables are external.
Amazon DynamoDBswift sigv4Tables, keys and indexes; items read a page at a time because a scan is billed. PartiQL, which is not SQL.
SFTPsshBrowse, transfer, and edit files in place.
FTP / FTPSgo coreTLS session reuse that the system's curl cannot do.
Amazon S3swift sigv4Custom endpoints and path-style addressing for S3-compatible services. No vendor SDK.
WebDAVurlsessionBrowses relative to a base path, so a Nextcloud crumb trail stays readable.
Azure Blob StorageurlsessionShared Key or SAS token. Azurite and sovereign clouds supported.
SMB2 / SMB3go coreThe share is mounted separately from the path inside it. SMB1 is not supported.
SSHsshTerminals and tunnels.
Local foldersfilesystemThe same browser and editor as every remote service.
Git repositoriesgo-gitLocal working copies, with push and pull over HTTPS.

The library

Every connection belongs to a workspace. A tag applied to a workspace is inherited by everything inside it, so one client's database, its web server, its bucket and its repository sit together, carry the same colour, and are one search away from each other.

Status is shown by shape as well as colour — a filled circle for connected, a spinner for connecting, a hollow circle for idle, a diamond for warning, a triangle for error — so the list stays readable if you don't see colour the way the designer did.

Credentials are their own objects: one account can be shared by many connections, so rotating a password is one edit rather than a hunt. An SSH tunnel attaches to any connection — a database or a transfer routes through a bastion host, with the bastion's own key pinned separately. And the whole library exports to a single JSON file and imports on another Mac; the archive carries every connection, workspace, credential reference and tag, and never a secret — passwords are re-entered once on the far side, which is the only honest way to move them.

The connection library: sixteen connections grouped by kind, with workspaces, tags and live status

Databases

Test Connection works for all eighteen types before you save — and for the databases it introspects rather than just connecting, because "connected" to a database that doesn't exist is a false pass.

A MySQL connection: the schema tree on the left, table contents in a data grid on the right

Editing files in place

A text file on any supported service opens as a tab inside its connection and saves back to the same place. There is no download folder, no re-upload step, and no second copy to keep track of.

Syntax highlighting covers 36 languages and is driven by a scanner that carries state, so block comments, triple-quoted strings, HTML script bodies and markdown fences stay correct across lines. A keystroke re-scans one line rather than the whole document, so large files stay responsive.

Saving uses the mechanism each service actually supports, and says so when it cannot do better:

Encoding and line endings are detected and preserved, so a one-character edit in a CRLF file produces a one-line diff rather than a whole-file one. Unsaved edits are mirrored to disk for recovery, and nothing is ever uploaded without an explicit save. Find and replace, go to line, auto-indent and bracket pairing are all there.

Images open too: PNG, JPEG, GIF, BMP, TIFF, WebP, HEIC and ICO are recognised by their bytes — not their name, so a text file called logo.png still opens as text — and shown read-only with pixel dimensions and zoom.

The editor with a stylesheet open over SFTP, syntax highlighted, and four documents in the strip

Git

A repository opens as a source-control tab with two modes: Changes and History.

It runs on go-git compiled into the app, so no external dependency is needed and it works cleanly under the App Store sandbox.

The source control tab: six staged files, eleven more changed, and the selected file's diff showing hunk 1 of 2

Scanning a project folder

Point Hydra at a folder and it walks it once, then shows you what it found before importing anything: Git repositories, database connections and cloud storage parsed out of the config files already in the tree, plus the credentials sitting in them.

It reads .env files, docker-compose.yml, Rails database.yml, Django settings, .NET appsettings.json, PHP config, Node config, Java .properties, Firebase and GCP config, AWS shared credentials, Fastlane Appfiles, and generic connection URLs.

An on-device model judges whether each candidate secret is a real credential or a placeholder, so nothing is sent anywhere to be classified. The walk is bounded by depth, file count and file size, and prunes build and dependency directories, so it never wanders into node_modules or a vendor tree. Nothing is imported until you tick it, and secret values are never displayed.

Automation, and agents

Hydra can be driven by other tools — scripts, and AI agents in particular — over a local socket that exists only while the app is running, and optionally over the network with a token. Both are off until you turn them on.

The point of it is what does not travel. A tool names a connection; Hydra opens the session with the credential it already holds. No response from the automation surface has a field that could carry a secret, so a tool driving your servers never obtains one — which is what makes it safe to point an AI agent at.

Browsing and transferring

The dual-pane browser resolves a backend from the connection kind and never switches on the kind itself, which is what lets a service with no file management state that plainly instead of showing an empty folder. Deleting a directory reads its whole listing first and stops at the first refusal, rather than half-emptying a tree and reporting success.

Sessions are long-lived, so one connection serves an entire recursive transfer, with a byte counter behind the progress bar — a single large file moves visibly instead of sitting at the same percentage for a minute. Transfers queue in a drawer with per-file progress and a live throughput graph.

Cancel means cancel: it interrupts the transfer mid-file, even when the connection has stalled, and a cancelled download removes its half-written file instead of leaving something that looks finished. A dropped file never overwrites silently either — it takes the first free "name 2"-style name.

The dual-pane browser: a local folder on the left, the same folder on the server on the right

Storage, sync and secrets

The library syncs through your private iCloud database. Passwords and keys are not stored in it: they go to the iCloud Keychain, which is what lets them sync between your Macs without ever entering the sync store. Without iCloud the app runs local-only and says "Local only" in the status bar rather than failing quietly.

A store this build cannot open is never deleted. It is moved aside and the app tells you, so a schema problem costs you a launch rather than your connection library.

How it is built

Swift and SwiftUI, with a Go core compiled into the app for the transfer protocols, the SQL drivers, terminals and Git. No Java, no Electron, no bundled browser, no server component. It launches immediately and stays small in memory. Keyboard shortcuts are customisable in Settings.

Crash reporting and usage analytics are both on by default, and each has its own switch in Settings under General. Crash reports carry a stack trace and version numbers, nothing identifying. Analytics record which features are used, plus version, device model, screen size, language and timezone, against a random per-installation ID, never connection names, hostnames, paths, queries or file contents. See the privacy page for the full list. The two automation surfaces — a local control socket and a network server — are both off by default.

Try it on your own servers

Fourteen days, everything unlocked, no account required.

Download for macOS