ktsu.ImGuiCredentialPopups
1.1.50
Prefix Reserved
dotnet add package ktsu.ImGuiCredentialPopups --version 1.1.50
NuGet\Install-Package ktsu.ImGuiCredentialPopups -Version 1.1.50
<PackageReference Include="ktsu.ImGuiCredentialPopups" Version="1.1.50" />
<PackageVersion Include="ktsu.ImGuiCredentialPopups" Version="1.1.50" />
<PackageReference Include="ktsu.ImGuiCredentialPopups" />
paket add ktsu.ImGuiCredentialPopups --version 1.1.50
#r "nuget: ktsu.ImGuiCredentialPopups, 1.1.50"
#:package ktsu.ImGuiCredentialPopups@1.1.50
#addin nuget:?package=ktsu.ImGuiCredentialPopups&version=1.1.50
#tool nuget:?package=ktsu.ImGuiCredentialPopups&version=1.1.50
ktsu.ImGuiCredentialPopups
Ready-made Dear ImGui modal dialogs for collecting credentials.
Introduction
ktsu.ImGuiCredentialPopups provides drop-in modal dialogs for asking a user for credentials
inside a Dear ImGui application. Rather than hand-rolling an input modal, masked text field, and
confirm/cancel button pair for every application that needs to authenticate, you open a popup and
receive a Credential back through a callback.
The credential types come from ktsu.CredentialCache,
so what the popup hands you is ready to persist in the host's native keyring or pass straight to an
API client.
Features
- Username/Password Popup:
UsernamePasswordPopupcollects a username and a masked password and returns aCredentialWithUsernamePassword. - Token Popup:
TokenPopupcollects a single masked token value and returns aCredentialWithToken. - Shared Base Class:
CredentialPopuphandles the modal lifecycle, title and label configuration, and confirmation callback, so adding a new credential shape means overriding two methods. - Masked Input: Secret fields use
ImGuiInputTextFlags.Passwordso values are never rendered in plain text. - Automatic Focus: The first input field receives keyboard focus when the modal opens, so the user can start typing immediately.
- CredentialCache Integration: Results are
ktsu.CredentialCachecredential types, ready to store through anICredentialStore.
Installation
Package Manager Console
Install-Package ktsu.ImGuiCredentialPopups
.NET CLI
dotnet add package ktsu.ImGuiCredentialPopups
Package Reference
<PackageReference Include="ktsu.ImGuiCredentialPopups" Version="x.y.z" />
Usage Examples
Basic Example
Create the popup once and keep it alive for the lifetime of the window, then call ShowIfOpen()
every frame from your render loop.
using ktsu.CredentialCache;
using ktsu.ImGuiCredentialPopups;
private readonly UsernamePasswordPopup loginPopup = new();
private void OnRender()
{
if (ImGui.Button("Sign in"))
{
loginPopup.Open("Sign in to GitHub", "Credentials", credential =>
{
CredentialWithUsernamePassword login = (CredentialWithUsernamePassword)credential;
Authenticate(login.Username, login.Password);
});
}
// Must be called every frame so the modal can draw itself.
loginPopup.ShowIfOpen();
}
Collecting a Token
using ktsu.CredentialCache;
using ktsu.ImGuiCredentialPopups;
private readonly TokenPopup tokenPopup = new();
private void OnRender()
{
if (ImGui.Button("Set access token"))
{
tokenPopup.Open("Personal Access Token", "Token", credential =>
{
CredentialWithToken token = (CredentialWithToken)credential;
cache.Store("github", token);
});
}
tokenPopup.ShowIfOpen();
}
Adding a Custom Credential Popup
Derive from CredentialPopup and supply the input UI and the credential it produces.
using ktsu.ImGuiCredentialPopups;
public class ApiKeyPopup : CredentialPopup
{
private string apiKey = string.Empty;
protected override bool ShowEdit()
{
ImGui.InputText("API Key", ref apiKey, 200, ImGuiInputTextFlags.Password);
return false;
}
protected override Credential MakeCredential() =>
new CredentialWithToken { Token = apiKey.As<CredentialToken>() };
}
API Reference
CredentialPopup
Abstract base class for credential input popups.
Properties
| Name | Type | Description |
|---|---|---|
Title |
string |
Title of the popup window. |
Label |
string |
Label shown above the input fields. |
Modal |
ImGuiPopups.Modal |
The underlying modal used to render the dialog. |
Methods
| Name | Return Type | Description |
|---|---|---|
Open(string title, string label, Action<Credential> onConfirm) |
void |
Opens the popup and registers the callback invoked on confirmation. |
ShowIfOpen() |
bool |
Renders the popup if it is open and returns whether it is open. Call once per frame. |
ShowEdit() |
bool |
(protected, abstract) Draws the input fields. Returns true if the user completed input via a keyboard shortcut. |
MakeCredential() |
Credential |
(protected, abstract) Builds the credential from the current input values. |
UsernamePasswordPopup
CredentialPopup that collects a username and masked password, producing a
CredentialWithUsernamePassword.
TokenPopup
CredentialPopup that collects a single masked token, producing a CredentialWithToken.
Contributing
Contributions are welcome! Feel free to open issues or submit pull requests.
License
This project is licensed under the MIT License. See the LICENSE.md file for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Hexa.NET.ImGui (>= 2.2.9)
- ktsu.CaseConverter (>= 1.3.33)
- ktsu.CredentialCache (>= 1.3.27)
- ktsu.ImGui.Popups (>= 3.11.0)
- ktsu.Semantics.Strings (>= 3.1.2)
-
net9.0
- Hexa.NET.ImGui (>= 2.2.9)
- ktsu.CaseConverter (>= 1.3.33)
- ktsu.CredentialCache (>= 1.3.27)
- ktsu.ImGui.Popups (>= 3.11.0)
- ktsu.Semantics.Strings (>= 3.1.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.1.50 | 0 | 8/24/2026 |
| 1.1.49 | 49 | 8/21/2026 |
| 1.1.48 | 47 | 8/20/2026 |
| 1.1.47 | 74 | 8/19/2026 |
| 1.1.46 | 77 | 8/18/2026 |
| 1.1.45 | 84 | 8/17/2026 |
| 1.1.44 | 94 | 8/14/2026 |
| 1.1.43 | 94 | 8/13/2026 |
| 1.1.42 | 87 | 8/12/2026 |
| 1.1.41 | 80 | 8/12/2026 |
| 1.1.40 | 95 | 8/12/2026 |
| 1.1.39 | 88 | 8/11/2026 |
| 1.1.38 | 83 | 8/6/2026 |
| 1.1.37 | 89 | 8/6/2026 |
| 1.1.36 | 94 | 8/5/2026 |
| 1.1.35 | 102 | 8/5/2026 |
| 1.1.34 | 100 | 8/4/2026 |
| 1.1.33 | 107 | 7/31/2026 |
| 1.1.32 | 94 | 7/30/2026 |
| 1.1.31 | 96 | 7/29/2026 |
## v1.1.50 (patch)
No significant changes detected since v1.1.49.