wg-securing-software-repos

Style guide: Level A - Lowest requirements

This section of the style guide defines the minimum (level A) requirements for displaying attestation information on package registries:

  1. Attestation information should be placed in a visible, but not overpowering, location on registry pages
  2. It should contain enough information to make attestations understandable to a broad variety of users (as detailed in this introduction)
  3. It must not impede users from achieving their primary goal, e.g., “finding out if this package is the best choice for the intended purpose.”

These Level A requirements describe a set of minimal, collapsible, and distinct UI “panels” with icons and headings appropriate to the information that can be expanded in them.

Alongside the following UI examples, variants, and recommendation we will reference and explain the user research rationale and insight the led to that decision.

You can find the unedited user research sessions on the open issues related to this project:

If you’d like to contribute, comment or iterate on this work then please see the design contribution documentation.


A screenshot of a UI example of the lowest level A requirements for visualising attestation information A screenshot of a UI example of the lowest level A requirements for visualising attestation information

This is intended to sit in a main section of a webpage that might use a three-column layout–the main section occupying two-thirds and a sidebar occupying one-third of the width.

In this version, each icon and heading is separated by a vertical bar/pipe that spans approximately 75% of the total height of the container box.

The panels can have a stroke or a drop shadow effect, yet should be adjusted to match whatever the platform’s design system or styles.

While this panel can be used as-is with no interactive expansion, we advise against this.

Since this component is a panel each heading should be clickable to expand additional info underneath. The expand/collapse interaction should be eased and not instantaneous for users.

The expanded sections have a border stroke and also a background color. You can omit one or the other as long as the expanded section of the panel is in close proximity to appropriate heading.

Depending on the width space you have available you can increase the width of both the panel and the expanded section. Be sure to use minimum text/font sizing available per platform for legibility.

With this Level A component styling, use words and letters conservatively in the attestation statement, balancing clarity of statement with space available. If needed, the attestation can be placed underneath at full width to accommodate complex statements (UI example on next page).

A screenshot of a UI example detailing icon information A screenshot of a UI example detailing icon information

A screenshot of a UI example detailing a version of the lowest level UI that has separated 'boxes' and what a full width attestation 'box' could look like A screenshot of a UI example detailing a version of the lowest level UI that has separated ‘boxes’ and what a full width attestation ‘box’ could look like

Signed by messages: “Signed by” messages should be bold to indicate importance. They can flow over two lines but three lines should be avoided.

Links styling and icons: In this example, as in the last page, we’ve used PyPI’s visual styling with blue hyperlinks and an external link icon next to each link. Both the icon color and font can be changed to match existing styles. The use of an “open in a new tab” icon is optional.

The component variant to the left here shows when the panels are not grouped, instead they’re separate panels aligned in a row. Their expandable sections still can be activated. Some platforms may prefer separated panels like this for their pages’ global styles and/or to look more like buttons that can be interacted with.

A screenshot of a UI example detailing a version of the lowest level UI with expanded tabs/details using npm style A screenshot of a UI example detailing a version of the lowest level UI with expanded tabs/details using npm style

In this example, we’ve used npm visual styles.

Link labels The links displayed here have all been carefully tested with users. In our research, we found that users expected the following information to be displayed near the attestation statement:

  1. Source repo & source commit
  2. Build commit & build logs
  3. Transparency log (within the attestation statement section)

We recommend left-aligning link labels, allowing them to span over two lines where required.

Enhancing user confidence Additional recommendations to help users feel confident about the security of a package are detailed in the medium (level AA) and highest (level AAA) UI recommendations.

Users also rely on “social proof” (number of downloads, maintainers, recognizable project names) typically found on registry pages. Hashes/checksums also encourage confidence, but only if users recognize them and understand their function.

A screenshot of a UI example detailing a version of the lowest level UI with expanded tabs/details using RubyGems style A screenshot of a UI example detailing a version of the lowest level UI with expanded tabs/details using RubyGems style

This example uses visual styles from RubyGems.

How different personas understand this UI The ‘Security architect’ persona already knows what information is needed to feel confident about a package’s security. For them, simple visual and text indicators (e.g., this UI in its collapsed state) are typically sufficient; expanding to see more information confirms their existing knowledge.

For ‘Pragmatic Developers’ and ‘Incidental User’ personas, simple visual and text indicators (e.g., this UI in its collapsed state) are not helpful and can lead the user to guess what the information means (either correctly or incorrectly).

These users need to see this UI in its expanded state to understand what attestations communicate. Viewing the detailed information typically prompts them to explore further and piece together an understanding of package security. Providing additional documentation links can also help these users learn.

A screenshot of where the lowest level A UI should ideally be situated on a webpage A screenshot of where the lowest level A UI should ideally be situated on a webpage

The positioning of these minimal elements on a page is also critical. The next page in this style guide illustrates their optimal positioning within each example package registry (please note that the next page is large, and you may need to scroll to find the appropriate UI example).

Ideally, this UI should not reside at the bottom of a page, particularly on platforms where extensive README files push other critical information downwards. User feedback indicates a strong preference to understand a package’s core functionality before encountering security or attestation details.

Placing these UI elements at the top of a page or within a header component presents a dilemma:

  1. Prioritization: It effectively “forces” (as users described) immediate consideration of security.
  2. Interruption: It disrupts the user’s primary goal of quickly assessing the package’s purpose.

While promoting security awareness is important, it shouldn’t overshadow essential package information. Therefore, while placing these elements in the first scroll/fold can prioritize security, it’s generally more effective to position them at the top of the second scroll/fold. This aligns better with user expectations and their natural information discovery journey.

Please open the following annotated UI full webpage examples in an image viewer of your choice. This image is large at 5.7MB and 11300x12722 pixel canvas. There is also a .pdf file.

The following text is included in the annotated image file:


Next: Medium UI requirements (Level AA)