Skip to main content

On This Page

Exploring the Proposed CSS Olfactive API for Immersive Web Experiences

3 min read
Share

These articles are AI-generated summaries. Please check the original sources for full details.

Sniffing Out the CSS Olfactive API

The CSS Working Group is currently drafting the Olfactive API to integrate smell into the browser’s immersive capabilities. This proposal utilizes a Scent Wheel consisting of four major families: Floral, Amber, Woody, and Fresh. The system relies on 15 specific sub-family identifiers to mix aromas via the scent() function.

Why This Matters

The technical reality of the Olfactive API currently clashes with the lack of consumer-grade hardware, as most immersive scent technology remains confined to niche theme park attractions. While startups promise releases within the year, developers face a fragmented landscape of competing file formats including .smll, .arma, and .smly. Engineers must account for the strict ‘one profile per sub-tree’ rule to prevent the hardware from producing muddled or overwhelming olfactory output. Furthermore, the reliance on the whf unit necessitates precise calculations to ensure totals do not exceed the 100whf limit imposed by the browser.

Key Insights

  • The KaiOS Browser is the only platform currently offering experimental support for the API as of 2026.
  • The scent() function supports 15 fragrance identifiers including ‘sf’ (Soft Floral) and ‘mw’ (Mossy Woods) for precise mixing.
  • Frank’s Fine Fragrances is one of the primary developers of the .smly file format intended for web use.
  • Accessibility is managed via the prefers-reduced-pungency media query to help users avoid sensory overload.
  • Hardware limitations require the autosmell=‘none’ attribute on scent elements to prevent unintended wafting due to current firmware bugs.

Working Examples

Implementation of the scent element with multiple source formats and accessibility attributes.

<scent controls autosmell="none"> <source src="mossywoods.smll" type="scent/smll"> <source src="mossywoods.arma" type="scent/arma"> <source src="mossywoods.smly" type="scent/smly"> <a href="mossywoods.smll">Smell our Mossy Woods scent</a> </scent>

Using the scent function with whf units to define a specific aromatic profile.

scent-profile: scent(wo 20whf, ho 13whf, fu 67whf);

Practical Applications

  • Use Case: E-commerce platforms can use scent-profile: url(mossywoods.smll) to enhance product pages. Pitfall: Applying profiles to every element will fail because the browser only allows one profile per parent sub-tree.
  • Use Case: Advertising agencies can mix scents like woody and water using scent(wo 20whf, ho 13whf). Pitfall: If the whf values sum to over 100, the browser will truncate the scent and ignore subsequent fragments.
  • Use Case: Developers can use media queries to provide a ‘reduce’ state for scents. Pitfall: Neglecting the ‘remove’ state for media queries can alienate users with olfactory sensitivities or allergies.

References:

Continue reading

Next article

Optimizing Kubernetes Observability with KubeHA Service Graph

Related Content