# Add \`CredentialsProvider\` to silence keychain prompts in development \(\#25266\) · gitcafe/zed

[View on GitCafe](https://git.cafe/gitcafe/zed/commit/21bb7242eaf89a74c7d4dd3ac54cbf70db4da06a)

Repository: [gitcafe/zed](https://git.cafe/gitcafe/zed)

Visibility: public

Requested revision: 21bb7242eaf89a74c7d4dd3ac54cbf70db4da06a

Requested commit: 21bb7242eaf89a74c7d4dd3ac54cbf70db4da06a

Commit: 21bb7242eaf89a74c7d4dd3ac54cbf70db4da06a

Tree: 78ff1a2df9bb65268042ac327796e41047989e1c

Author: Marshall Bowers

Committer: GitHub

## Message

```
Add `CredentialsProvider` to silence keychain prompts in development (#25266)

This PR adds a new `CredentialsProvider` trait that abstracts over
interacting with the system keychain.

We had previously introduced a version of this scoped just to Zed auth
in https://github.com/zed-industries/zed/pull/11505.

However, after landing https://github.com/zed-industries/zed/pull/25123,
we now have a similar issue with the credentials for language model
providers that are also stored in the keychain (and thus also produce a
spam of popups when running a development build of Zed).

This PR takes the existing approach and makes it more generic, such that
we can use it everywhere that we need to read/store credentials in the
keychain.

There are still two credential provider implementations:

- `KeychainCredentialsProvider` will interact with the system keychain
(using the existing GPUI APIs)
- `DevelopmentCredentialsProvider` will use a local file on the file
system

We only use the `DevelopmentCredentialsProvider` when:

1. We are running a development build of Zed
2. The `ZED_DEVELOPMENT_AUTH` environment variable is set
- I am considering removing the need for this and making it the default,
but that will be explored in a follow-up PR.

Release Notes:

- N/A
```

## Parents

- [31aad858f8e99c0a8754714b3d3911ba07d42c6f](https://git.cafe/gitcafe/zed/commit/31aad858f8e99c0a8754714b3d3911ba07d42c6f?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zed/tree/21bb7242eaf89a74c7d4dd3ac54cbf70db4da06a?format=markdown)
