Reading/Web/Preference Persistence For Anonymous Users/Decision Record

What are your constraints
Many times we have implicit constraints, based on time, resources, performance, security and other aspects. This is a place to make them explicit and share with your team and stakeholders. {| class="wikitable"
 * General Assumptions and Requirements

Use a new line for each assumption or requirement which you are using to constrain your proposed solutions.
 * Source

The person or document that this requirement comes from. Our initial goal will be to provide the ability to store at very least the following preferences for anonymous users:
 * This solution does not intend to replace all the existing user preference persistence mechanisms currently utilized within the mediawiki ecosystem. It does not aim to unify the other mechanisms either. Disparate mechanisms will continue to exist within different extensions.
 * This solution does not intend to replace all the existing user preference persistence mechanisms currently utilized within the mediawiki ecosystem. It does not aim to unify the other mechanisms either. Disparate mechanisms will continue to exist within different extensions.


 * Page density (page width)
 * Accessibility settings:
 * Dark Mode
 * Font size
 * TDF: Preference persistence prototype
 * Cookie Prototype
 * Cookie Prototype

{| class="wikitable"
 * Security Requirements

Describe any security limitations or constraints for the proposed solutions.
 * Source

The person or document that this requirement comes from.
 * To ensure safety and security, we decided to restrict preference persistence to trusted extensions and skins.
 * Cookie Prototype
 * To enable the declaration of new Preferences, ClientPreferences should incorporate a registration mechanism through skin.json or extension.json. Skins or extensions can use this mechanism to declare their own Preferences.
 * Cookie Prototype
 * To enable the declaration of new Preferences, ClientPreferences should incorporate a registration mechanism through skin.json or extension.json. Skins or extensions can use this mechanism to declare their own Preferences.
 * Cookie Prototype

{| class="wikitable"

Important Questions
Fill out any questions you should answer or follow up on before making a decision. Record those answers here.

Decision
The table captures your decision as well as important information documentation, context, and support materials. Fill this in after you list out options on the following pages.

Technical Forum Chair review
This is to be filled out by the Technical Forum Chairs after the decision is made. These questions are designed to help the chairs give feedback to the decision team to help them make an informed decision.

What are your options?
On the following pages, list at least three options to address your problem. Try to keep the description clear and use language that can be easily understood. The first option should always be the “nothing” option. This helps you properly evaluate the pros/cons/costs of the status quo as you evaluate potential solutions. If you need to dig deeper into options, technology, etc... link to them in the references.

Prototypes:
While prototyping and trying out different approaches, and from gathering technical feedback, we would include in core:

Client-side preferences inline script

 * It allows users to enable or disable of features/preferences without logging in or creating an account.
 * It uses existing classes on the document element to avoid adding extra HTML or JavaScript.

Client-side preferences API
That provides a simple API to set and get preferences.

Resource:
https://www.atlassian.com/blog/inside-atlassian/make-team-decisions-without-killing-momentum

Please check the prototypes page for more details
Cookie Based: Preference persistence prototype 2 summary

LocalStorage Based: Preference persistence prototype summary