---
parent: Requirements
---
# UX

This page collects general UX requirements.

## Generally available buttons and menu items are disabled instead of not shown
`req~ux.disabled-vs-hidden~1`

When there is functionality generally available but cannot be executed at the present time, it is shown as disabled.

Example: Button to open a link. If there is no link, the button should be shown but not enabled.

Needs: impl

## Confirmation dialogs use the action name as the confirm button label
`req~ui.dialogs.confirmation.naming~1`

In confirmation dialogs, the confirm button must be labeled with the specific action name (e.g., "Download full text documents") rather than a generic label such as "OK" or "Yes".
This makes the intended action unambiguous and reduces the risk of accidental confirmation.

Needs: impl

## Auto close of merge entries dialog
`req~ux.auto-close.merge-entries~1`

The merge entries dialog collects and merges data from multiple sources.
In case there is only one source, it should not be shown.
Since some data fetchers take time, we need to open the dialog and wait until all sources are available.
[As soon as only one source is available, the dialog should be closed to speed up the user's workflow](https://github.com/JabRef/jabref/issues/13262).

Needs: impl

## Critical startup failures show an error dialog
`req~ux.startup.critical-error-dialog~1`

If a critical error occurs before the main window is fully constructed, it must not fail silently.
The user needs a visible error dialog, in addition to the log entry, since [digging through log files is not accessible to most users](https://github.com/JabRef/jabref/issues/14967).

Needs: impl

## GitHub personal access token verification
`req~ux.git-share.personal-access-token-verification~1`

The GitHub sharing dialog must allow users to verify that their personal access token has push access to the configured GitHub repository before sharing a library.

Needs: impl

## Git pull with unrelated histories
`req~ux.git-pull.unrelated-histories~1`

Git pull must support a local library and its configured remote when their commit histories have no common ancestor.

Needs: impl

## Git push to an empty remote
`req~ux.git-push.empty-remote~1`

Git push must publish the current branch and configure its upstream when the configured remote has no branches.

Needs: impl

## Git push rejection reporting
`req~ux.git-push.rejected-update-reporting~1`

Git push must report a rejected remote update to the user.

Needs: impl

### Activating large libraries keeps entry previews responsive
`req~ux.active-library.preview-responsiveness~1`

When a user activates a large library, automatic group construction and group-count evaluation must not delay rendering the selected entry preview.

Needs: impl

<!-- markdownlint-disable-file MD022 -->
