Exploring the Proposed CSS Olfactive API for Immersive Web Experiences
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
Implementing Zigzag CSS Grid Layouts Using the Transform Trick
Learn how to build staggered zigzag layouts using CSS Grid and translateY(50%) while maintaining accessible DOM order and responsive flow.
Using CSS corner-shape for Folded Corners
Create realistic folded corners using the CSS corner-shape: bevel property, a cleaner alternative to clip-path currently supported in Chrome.
Modern CSS Evolution: 3D Voxel Scenes, View Transitions, and Enhanced Selection Syntaxes
Explore modern CSS developments including Heerich.js for 3D voxel scenes and the Baseline-supported 'of selector' syntax for advanced element targeting.