> For the complete documentation index, see [llms.txt](https://opencred.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://opencred.gitbook.io/docs/desktop-app/desktop.md).

# Desktop overview

The OpenCred Desktop Client is an Electron application for issuing and verifying W3C Verifiable Credentials. It is the primary OpenCred product: fully local, offline-capable, and signing always happens on the user's machine. The issuer's private key never leaves the device.

> **Open source, available for macOS, Windows, and Linux.** OpenCred Desktop is MIT-licensed; source and issues live at [github.com/nfh-trust-labs/opencred](https://github.com/nfh-trust-labs/opencred). On first launch macOS shows a one-time security prompt — [Installation → macOS first launch](/docs/desktop-app/installation.md#macos-first-launch) walks through the approval step. **Support:** [open an issue](https://github.com/nfh-trust-labs/opencred/issues).

## Pages in this section

* [Installation](/docs/desktop-app/installation.md) — supported platforms, downloading, and installing
* [Getting started](/docs/desktop-app/getting-started.md) — first launch, the onboarding wizard
* [Key management](/docs/desktop-app/key-management.md) — software keys, hardware tokens, OS cert store, generated keys
* [Issuing credentials](/docs/desktop-app/issuing-credentials.md) — single and batch issuance, schemas, proof formats, exports
* [Verifying credentials](/docs/desktop-app/verifying-credentials.md) — verification flow, offline mode
* [Settings and logging](/docs/desktop-app/settings-and-logging.md) — preferences, logging, redaction, bug reports, auto-updater

## Quick navigation

| Want to...                                | Go to                                                                                                               |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| Install on macOS, Windows, or Linux       | [Installation](/docs/desktop-app/installation.md)                                                                   |
| Import an existing PFX/PEM key            | [Key management — Importing a software key file](/docs/desktop-app/key-management.md#importing-a-software-key-file) |
| Use a YubiKey or smart card               | [Key management — Connecting a hardware token](/docs/desktop-app/key-management.md#connecting-a-hardware-token)     |
| Generate a fresh key for did:web          | [Key management — Generating a key](/docs/desktop-app/key-management.md#generating-a-key)                           |
| Issue a single credential from a template | [Issuing credentials — Single issuance](/docs/desktop-app/issuing-credentials.md#single-credential-issuance)        |
| Issue 1,000 credentials from a CSV        | [Issuing credentials — Batch issuance](/docs/desktop-app/issuing-credentials.md#batch-issuance)                     |
| Verify a credential                       | [Verifying credentials](/docs/desktop-app/verifying-credentials.md)                                                 |
| Find log files for a bug report           | [Settings and logging — Logging](/docs/desktop-app/settings-and-logging.md#logging)                                 |

## How OpenCred Desktop is built

The Desktop Client is an Electron app split between a **main process** (Node.js) and a **renderer process** (React). All cryptographic operations — key import, signing, verification, native cert store calls — run in the main process. The renderer never sees private key material; it interacts with the main process over a typed IPC bridge defined in `apps/desktop/src/shared/ipc-types.ts`.

| Layer        | Location                           | Responsibility                                                   |
| ------------ | ---------------------------------- | ---------------------------------------------------------------- |
| Main process | `apps/desktop/src/main/`           | IPC handlers, key import, signing, verification, native bindings |
| Preload      | `apps/desktop/src/main/preload.ts` | exposes the IPC API to the renderer via contextBridge            |
| Renderer     | `apps/desktop/src/renderer/`       | React UI: pages, components, schemas                             |
| Shared       | `apps/desktop/src/shared/`         | TypeScript types shared by both sides of the IPC boundary        |

The main process consumes the same `@opencred/*` workspace packages that the Docker server uses, so the issuance and verification logic is identical across the two interfaces.

## Related documentation

* [Concepts](/docs/concepts/concepts.md) — what VCs and DIDs are
* [Security model](/docs/security/security.md) — what OpenCred protects against
* [Docker operator guide](/docs/docker-image/docker.md) — the headless variant for cloud and CI/CD


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://opencred.gitbook.io/docs/desktop-app/desktop.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
