Skip to content

Storage

HarborClient stores collection data on infrastructure you choose — local SQLite by default, or remote databases, git repositories, and Team Hub servers when your team needs to collaborate. One desktop app presents a single sidebar; multiple storage backends can be mounted at the same time, each holding different collections, snippets, or run-result snapshots.

Storage locations

See Settings → Storage Locations for connection field reference, Git provider for version-controlled collections, and Team hubs for token-based sharing.

Why remote storage

Most API clients tie your collections to a vendor account and a hosted sync service. Teams pay per seat, secrets live on someone else's infrastructure, and leaving the platform means exporting what you can and rebuilding workflows elsewhere.

HarborClient takes a different approach:

  • No required accounts — the desktop app is free; optional Team Hub infrastructure is self-hosted on your servers
  • You choose where data lives — SQLite on disk, a database you operate, a git repo, or a Team Hub instance
  • Collaboration on your terms — point teammates at the same backend, use git pull requests, join with encrypted share tokens, or connect to Team Hub with individual API tokens

Trade-offs for teams

HarborClient does not live-sync in the background. When several people share a remote storage location, changes from others appear when data is reloaded — for example after restarting the app, choosing File → Sync Storage, saving a Team Hub connection again, pulling a git-backed repo, or when the window regains focus for git connections. Plan for occasional refresh rather than real-time co-editing.

HarborClient keeps a hidden local registry that records which storage location owns each collection and snippet. Collection bodies, folders, and requests live in the mapped provider. Sidebar environments and connection settings always stay on your machine.

Storage types

TypeWhere configuredBest for
SQLiteSettings → Storage LocationsSolo work, offline-first, full control on one machine (default)
Firestore / MySQL / PostgreSQLSettings → Storage LocationsTeam shares one database directly; each teammate configures the same connection
GitSettings → Storage LocationsCollections version-controlled in a repo with commit, pull, and push from the app
Team HubFile → Team HubToken-based sharing without handing every teammate database credentials

SQLite is the default. At least one SQLite connection must always remain; it cannot be deleted while it is the last SQLite connection.

Remote databases (Firestore, MySQL, PostgreSQL) store collection data on a server your team operates or trusts. Multiple HarborClient instances can point at the same database to share collections and saved requests.

Git writes collection files under a configurable subdirectory (default .harborclient/) inside a local repository clone. See Git provider for file layout, authentication, and the Git sidebar.

Team Hub is a separate connection type — not listed under Settings → Storage Locations. Each hub is a named URL plus a bearer API token (hbk_…). HarborClient syncs collections through the hub's HTTP API. See Team hubs for setup, admin tokens, and sync behavior.

How storage works

Active storage location

One connection is marked active (shown with a Default badge in Settings). The active storage location is used for new collections and imports when you do not pick another provider in the create dialog.

Use Set active in Settings → Storage Locations to change which connection is default. Deleting the active connection promotes another connection to active after restart.

All connections mount at launch

HarborClient opens every configured storage location and Team Hub at startup, not only the active one. Collections from shared remote databases, git repos, and hubs appear in the sidebar immediately without switching the default.

Connection definition changes (add, edit, delete, set active) take effect after restarting HarborClient.

Discover collections

When you add a storage location that already contains collections on the server or in a git tree, HarborClient may prompt you to discover and register them in the sidebar. Select which collections to add or skip discovery for that connection.

Storage location badges

Use the sidebar toolbar Storage location badges toggle to show or hide a badge on collection and run-result rows whose provider is not your active storage location. Badges help distinguish local collections from shared remote or hub-backed ones.

Adding storage locations

Database and git connections

Open File → Settings → Storage Locations (or Cmd/Ctrl+, then Storage Locations).

StepAction
1Click Add storage location
2Enter a Name and choose a Type (SQLite, Git, Firestore, MySQL, PostgreSQL). The type cannot be changed after creation.
3Fill in type-specific connection fields. See Settings → Storage Locations for field tables.
4Click Save
5Restart HarborClient when prompted so the new connection mounts at launch
6If HarborClient finds existing collections, use the Discover collections modal to register them in the sidebar
ActionDescription
Set activeMark a connection as the default for new collections and imports
EditChange name and connection details (type is fixed)
DeleteRemove a connection. The last remaining connection and the last remaining SQLite connection cannot be deleted

Team Hub

Team hubs are added under File → Team Hub, not in Settings.

StepAction
1Click Add team hub
2Enter a Name, Team hub URL, and API token (hbk_…)
3Click Save

On success, HarborClient mounts the hub and syncs collections your token can access into the sidebar. See Team hubs for prerequisites, admin tokens, and user management.

Join a shared collection

Instead of configuring a remote database manually, a colleague can send you an encrypted share token that bundles storage credentials and a collection mapping.

StepAction
1Sidebar + or File → New Collection
2Join shared collection tab → paste the token → Join
3Restart HarborClient

The new connection appears under Settings → Storage Locations and the shared collection appears in the sidebar. Share tokens work only for remote database collections (Firestore, MySQL, PostgreSQL), not SQLite or git. See Collections → Sharing collections and Sharing Keys.

Choosing storage per entity

Not every kind of data can be assigned to a storage location. The table below summarizes where each entity lives and how you choose its provider.

EntityAssignable?How to choose storage
CollectionsYesCreate or move (see below)
SnippetsYesSnippet edit modal
Run resultsYes, at save timeCollection runner Save modal
EnvironmentsNo — always localSidebar environments stay on each machine; use export/import to hand off
App settingsNo — always localSettings, layouts, and connection definitions

Collections

ActionUI path
CreateSidebar + or File → New CollectionCreate newStorage location dropdown
MoveCollection Settings → General → Provider (same concept; Collection Settings labels the field Provider)
DefaultActive storage location when you do not change the dropdown

Moving a collection copies its folders and requests to the target provider and updates the sidebar entry. When the source is a Team Hub, the original collection remains on the server for teammates. When the source is SQLite or a remote database, HarborClient deletes the source copy after a successful move. See Team hubs → Moving and deleting collections.

Imports always land on the active storage location unless you create a collection on another provider first.

Snippets

Reusable script snippets can live on any provider that supports snippet storage.

ActionUI path
Create or editFile → Snippets or Settings → Snippets → add or edit → Storage location in the modal
MoveChange Storage location when editing an existing snippet

Team Hub connections that do not expose snippet routes are omitted from the picker. Admin-token hub connections are never used for snippet storage. See Using snippets and Request scripts.

Run results

After a collection or folder run completes, persist a snapshot to a storage location:

StepAction
1Open the runner from a collection or folder row menu → Run
2When the run finishes, click Save in the runner toolbar
3Choose Storage location in the Save run results modal → Save

Saved run results appear in the sidebar Run results section. Rows can show storage location badges when enabled.

When you save to a Team Hub, HarborClient stores the snapshot on the server and can generate a deep link you copy from the runner to share with teammates.

Export and Import in the runner toolbar produce portable .json files that are not tied to a storage location — useful for archives and one-off handoffs. See Collections → Running collections.

Environments

Sidebar environments are not assignable to a storage location. Every HarborClient instance keeps its own environment list in a hidden local database, even when collections live on a shared remote database or Team Hub.

To hand off variable groups between machines or teammates:

  • Export / Import environment .json files (Environments)
  • For git-backed workflows, commit environment files under .harborclient/environments/ in the repository (Git provider → File layout) — this is separate from the sidebar environment list

Team hubs do not share sidebar environments through HarborClient. See Team hubs → Limitations.

Syncing and collaboration

Sync Storage

Choose File → Sync Storage to refresh all mounted database connections and user-token Team Hubs. A progress modal shows each provider and reports success or errors per connection.

Use sync after teammates change shared collections, or when you want to pull the latest hub catalog without restarting.

When teammate changes appear

BackendTypical refresh trigger
Remote databaseApp restart, Sync Storage
Team HubApp launch, hub save, Sync Storage, user access changes on server
GitPull in the Git sidebar, external git pull, file watcher, window focus
Share token joinRestart after joining

There is no background polling. Concurrent edits on shared backends are last write wins; HarborClient does not merge conflicting changes.

Sharing options compared

ApproachBest for
SQLite / localSolo work, offline-first
Remote storage (Firestore, MySQL, Postgres)Team shares one DB; each person configures the same connection
Encrypted sharingOne-step handoff of credentials plus one collection
Git providerReviewable diffs, branches, and PRs in a repo
Team hubsToken-based access without sharing DB credentials per teammate

See Team hubs → Team hubs vs other sharing options for a detailed comparison including share tokens vs hubs.

Security

Storage connection credentials (database passwords, Firestore auth, git tokens) are stored locally on your machine. Git tokens and similar secrets use encrypted secret storage when the OS keychain is available.

Share tokens embed remote storage connection credentials. Treat them like secrets and share only over trusted channels. Recipients should restart HarborClient after joining.

Backups (.hcb files) include connection definitions and may include secrets in readable form inside the archive. Store backup files securely. See Settings → Backup & Restore.

For the full security policy, see the HarborClient SECURITY.md on GitHub.

What's next