Browser-compat-data: Can a feature be experimental and deprecated at the same time?

Created on 7 Mar 2018  路  5Comments  路  Source: mdn/browser-compat-data

I'm wondering if it should be valid to have features marked as experimental: true and deprecated: true at the same time.

Currently, the MDN compat tables display icons when a feature is deprecated: true, experimental: true orstandard_track: false.
The banners on top of MDN pages are not yet shown depending to the data we have in this data set, but added manually. We will likely change that to be automated based on the compat data soon.

Now, I'm wondering if experimental: true and deprecated: true shouldn't be ruling each other out.

If this doesn't make sense, we could add validation that forbids experimental and deprecated being true at the same time. Thoughts?

question

Most helpful comment

I think that if a feature is deprecated, it can't be experimental. It went out of experimental when it got deprecated.

All 5 comments

I think that if a feature is deprecated, it can't be experimental. It went out of experimental when it got deprecated.

Out of curiosity, I checked it out and it looks like there are 57 features that are marked as both experimental and deprecated (source for generating this list):

api.AnimationEvent.initAnimationEvent
api.FetchEvent.client
api.HTMLShadowElement
api.HTMLShadowElement.getDistributedNodes
api.Headers.getAll
api.PositionSensorVRDevice
api.PositionSensorVRDevice.getImmediateState
api.PositionSensorVRDevice.getState
api.PositionSensorVRDevice.resetSensor
api.PushRegistrationManager
api.PushRegistrationManager.register
api.PushRegistrationManager.unregister
api.PushRegistrationManager.getRegistration
api.PushRegistrationManager.hasPermission
api.PushSubscription.toJSON
api.PushSubscription.unsubscribe
api.RTCPeerConnection.onaddstream
api.RTCPeerConnection.onremovestream
api.RTCPeerConnection.addStream
api.RTCPeerConnection.createDTMFSender
api.RTCSessionDescription.RTCSessionDescription
api.Request.context
api.Request.integrity
api.Request.keepalive
api.Response.useFinalURL
api.VRDisplay.getImmediatePose
api.VRDisplay.getPose
api.VRDisplay.hardwareUnitId
api.VRDisplay.isConnected
api.VRDisplay.resetPose
api.VRDisplayCapabilities.hasOrientation
api.VREyeParameters.maximumFieldOfView
api.VREyeParameters.minimumFieldOfView
api.VREyeParameters.recommendedFieldOfView
api.VREyeParameters.renderRect
api.VRFieldOfView.VRFieldOfView
api.VRPose.hasOrientation
api.VRPose.hasPosition
api.VRPose.timestamp
api.XMLDocument.load
api.XMLSerializer.serializeToStream
css.properties.font-variant-alternates
css.properties.font-variant-alternates.annotation
css.properties.font-variant-alternates.character_variant
css.properties.font-variant-alternates.ornaments
css.properties.font-variant-alternates.styleset
css.properties.font-variant-alternates.stylistic
css.properties.font-variant-alternates.swash
css.properties.scroll-snap-destination
http.headers.If-Match
http.headers.If-Modified-Since
http.headers.If-None-Match
http.headers.If-Unmodified-Since
http.headers.Keep-Alive
http.headers.Last-Modified
http.headers.Location
javascript.builtins.TypedArray.move

I think there are cases where these both apply. Consider an API which was experimental, stayed in that state long enough that some sites started to deploy using it, and then the API was abandoned and became deprecated. If you remove the "experimental" label, it suggests that the API was finalized then later obsoleted. An API that's both experimental and deprecated is one that was never a finished/widely adopted API, but was shipped in at least one browser before later being deprecated.

Consider things like RTCPeerConnection.addStream(). This method was removed while WebRTC was still in an unstable state, so it was experimental, but is now also obsolete.

Another example: the original implementation of Custom Elements, which was in fact shipped in Chrome for a short time. That was an experimental API, since deprecated. Removing the "experimental" label suggests that it was a finished API that has become deprecated.

I agree with @a2sheppy on this one, and suggest that experimental: true and deprecated: true should both be allowed at once. As a user looking at the docs, I'd assume everything without an "experimental" flag is a completed API.

Sounds like this didn't confuse more people over the last year, so I'm closing this and setting both to true remains allowed.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

here-nerd picture here-nerd  路  3Comments

ExE-Boss picture ExE-Boss  路  3Comments

vinyldarkscratch picture vinyldarkscratch  路  3Comments

RobPethick picture RobPethick  路  3Comments

jwhitlock picture jwhitlock  路  4Comments