[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sanity-IeX9QYfsApQdcpyF0j5AsZKX8UQkFHrYqchB7D34COQ":3,"sanity-Kqllps2XBTL3OBE8pjtLgVC9qPgs3Vt0czqYEV0MSn4":602},{"data":4,"sourceMap":-1},{"latestPodcast":5,"latestReleases":14,"post":39,"recent":577},[6],{"_id":7,"publishedAt":8,"slug":9,"sponsored":12,"title":13},"d53f9358-3bb2-4f69-aebe-d31d19522cd4","2026-07-10T07:40:00.000Z",{"_type":10,"current":11},"slug","building-more-than-just-an-agent-harness",null,"Building more than just an agent harness",[15,21,27,33],{"_id":16,"publishedAt":17,"slug":18,"title":20},"eb5b66eb-9410-4329-83bb-22bbff39402a","2026-04-28T13:00:00.000Z",{"_type":10,"current":19},"turn-scattered-knowledge-into-trusted-intelligence","Turning scattered knowledge into trusted intelligence: Stack Internal 2026.3",{"_id":22,"publishedAt":23,"slug":24,"title":26},"369c2401-b62e-4a37-8ff8-bf603023ecad","2026-03-02T15:03:00.988Z",{"_type":10,"current":25},"what-s-new-at-stack-overflow-march-2026","What’s new at Stack Overflow: March 2026",{"_id":28,"publishedAt":29,"slug":30,"title":32},"5e9053a4-07ea-447c-91ea-29e0b6228537","2026-02-02T15:00:00.000Z",{"_type":10,"current":31},"what-s-new-at-stack-overflow-february-2026","What’s new at Stack Overflow: February 2026",{"_id":34,"publishedAt":35,"slug":36,"title":38},"a1b538eb-a8a6-46d0-80a1-ac70ec9bb935","2026-01-05T10:00:00.000-05:00",{"_type":10,"current":37},"what-s-new-at-stack-overflow-january-2026","What’s new at Stack Overflow: January 2026",{"_createdAt":40,"_id":41,"_rev":42,"_system":43,"_type":46,"_updatedAt":47,"author":48,"body":66,"comments":512,"dateUrl":513,"product":12,"publishedAt":514,"slug":515,"sponsored":12,"tags":517,"title":576,"visible":512},"2026-05-11T16:10:08Z","5c2640c3-5502-423f-909d-0e901c736e6b","qMgMFwJ0bMFZ05bwj4UX9j",{"base":44},{"id":41,"rev":45},"Bqj3l3jZyXV24sfjnpbWKZ","blogPost","2026-05-18T16:15:04Z",[49],{"_createdAt":50,"_id":51,"_rev":52,"_type":53,"_updatedAt":54,"account_id":55,"avatar":56,"bio":61,"employee":62,"name":63,"slug":64},"2026-05-11T16:19:48Z","142efd11-ca8a-4e6d-aa4a-258930588315","Bqj3l3jZyXV24sfjnpbOzZ","blogAuthor","2026-05-11T16:20:23Z",13715229,{"_type":57,"asset":58},"image",{"_ref":59,"_type":60},"image-6dab34eea20b065ad4b562c05c9e93a51d9f519d-800x800-png","reference","Srikanth Srinivas is a Software Engineering leader with over 21 years of experience building scalable enterprise applications, cloud-native platforms, and automation-driven engineering solutions across web, mobile, API, and DevOps ecosystems. He has led technology initiatives for global enterprises including Caesars Entertainment, Optomi - Toyota Connected, CVS Health, Infosys, and Cognizant, driving modernization initiatives that improve reliability, scalability, and operational efficiency.\n\nHis expertise spans software engineering, DevOps transformation, cloud infrastructure, and Identity and Access Management (IAM), with a strong focus on building secure, resilient, and automation-first enterprise systems. Srikanth is particularly interested in practical applications of AI to enhance engineering workflows, operational intelligence, and platform reliability.\n\nSrikanth is currently pursuing a Master’s degree in Systems Engineering and Management at The University of Texas at Dallas, where his academic focus includes AI, automation, cybersecurity, and intelligent enterprise systems.\n\nIn addition to his industry experience, Srikanth regularly shares insights at conferences and professional forums on DevOps, IAM, AI-driven engineering practices, and enterprise modernization, helping teams build future-ready technology platforms.","none","Srikanth Srinivas",{"_type":10,"current":65},"srikanth-srinivas",[67,79,87,95,103,111,119,127,136,144,152,160,163,171,175,183,199,214,228,243,257,265,273,276,284,292,300,303,311,319,331,343,355,367,379,382,390,399,418,437,457,476,488,496,504],{"_key":68,"_type":69,"children":70,"markDefs":77,"style":78},"4dc60b909852","block",[71],{"_key":72,"_type":73,"marks":74,"text":76},"d01227863271","span",[75],"strong","",[],"normal",{"_key":80,"_type":69,"children":81,"markDefs":86,"style":78},"eb97af54a067",[82],{"_key":83,"_type":73,"marks":84,"text":85},"9660f1ef157d",[],"First time I tried to login to Netflix at a hotel TV I almost gave up. The remote was having only four arrow keys and a number pad. My password was 18 characters with symbols. Whoever designed the login screen had either never used it themselves, or they had decided suEering builds character.",[],{"_key":88,"_type":69,"children":89,"markDefs":94,"style":78},"eb86856feb96",[90],{"_key":91,"_type":73,"marks":92,"text":93},"880b5f10462f",[],"After few years, the same TV’s started doing something different. They showed us a short code and an URL. I opened phone, typed the URL, entered the code and we are in. No remote-control circus. No password on a TV.",[],{"_key":96,"_type":69,"children":97,"markDefs":102,"style":78},"3db5d0f30ab5",[98],{"_key":99,"_type":73,"marks":100,"text":101},"d0aa4f3464d1",[],"That is OAuth 2.0 device authorization grant. Most of the people just call it that device flow.",[],{"_key":104,"_type":69,"children":105,"markDefs":110,"style":78},"02ad10f97bdb",[106],{"_key":107,"_type":73,"marks":108,"text":109},"58c86d65e51a",[],"If we run aws sso login, gh auth login, or signed into Spotify on an Xbox, we have already used it. And if you are build a backend for a CLI, an IOT device, a smart TV app or anything where typing a password is really painful or not safe, we should end up implementing it sooner or later.",[],{"_key":112,"_type":69,"children":113,"markDefs":118,"style":78},"c13833dfd522",[114],{"_key":115,"_type":73,"marks":116,"text":117},"89342504cab3",[],"Here is the step by step",[],{"_key":120,"_type":69,"children":121,"markDefs":126,"style":78},"55a40454691a",[122],{"_key":123,"_type":73,"marks":124,"text":125},"8c2c4d475a3b",[],"Step1: Assume we are building a CLI called mycli. The user runs:",[],{"_key":128,"_type":69,"children":129,"markDefs":135,"style":78},"da17ebbdde2a",[130],{"_key":131,"_type":73,"marks":132,"text":134},"11289c8d4f4e",[133],"code","$ mycli login",[],{"_key":137,"_type":69,"children":138,"markDefs":143,"style":78},"2e9e37cace85",[139],{"_key":140,"_type":73,"marks":141,"text":142},"2225acc3ca7e",[],"Below will happen behind the scenes.",[],{"_key":145,"_type":69,"children":146,"markDefs":151,"style":78},"9d9996a2976a",[147],{"_key":148,"_type":73,"marks":149,"text":150},"b169dc2f0ea9",[75],"Step 1: The CLI asks for a code",[],{"_key":153,"_type":69,"children":154,"markDefs":159,"style":78},"86494b0a6a18",[155],{"_key":156,"_type":73,"marks":157,"text":158},"979a2497dcb5",[],"The CLI sends a POST to authorization server:",[],{"_key":161,"_type":133,"code":162,"markDefs":12},"dd48652b8ec2","POST \u002Foauth\u002Fdevice_authorization HTTP\u002F1.1\nHost: auth.example.com\nContent-Type: application\u002Fx-www-form-urlencoded\nclient_id=mycli-prod&scope=read:repos%20write:repos",{"_key":164,"_type":69,"children":165,"markDefs":170,"style":78},"1b4f2e94b11e",[166],{"_key":167,"_type":73,"marks":168,"text":169},"8aef3f8d3f1e",[],"The server responds with something like this:",[],{"_key":172,"_type":133,"code":173,"language":174,"markDefs":12},"1ae668571444","{\n\"device_code\": \"GmRhmhcxhwAzkoEqiMEg_DnyEysNkuNhszIySk9eS\",\n\"user_code\": \"WDJB-MJHT\",\n\"verification_uri\": \"https:\u002F\u002Fexample.com\u002Fdevice\",\n\n\"verification_uri_complete\": \"https:\u002F\u002Fexample.com\u002Fdevice?user_code=WDJB-\nMJHT\",\n\n\"expires_in\": 1800,\n\"interval\": 5\n\n}","json",{"_key":176,"_type":69,"children":177,"markDefs":182,"style":78},"9680fb57864d",[178],{"_key":179,"_type":73,"marks":180,"text":181},"1e2cba3f31dd",[],"Five fields actually matter:",[],{"_key":184,"_type":69,"children":185,"markDefs":198,"style":78},"fac211bcf6b8",[186,190,194],{"_key":187,"_type":73,"marks":188,"text":189},"d286b3a56b85",[],"• ",{"_key":191,"_type":73,"marks":192,"text":193},"70f6681ed315",[133],"device_code ",{"_key":195,"_type":73,"marks":196,"text":197},"1b37f25879e8",[],"is a long, opaque string. The CLI keeps this private.",[],{"_key":200,"_type":69,"children":201,"markDefs":213,"style":78},"9c2ed80cb1be",[202,205,209],{"_key":203,"_type":73,"marks":204,"text":189},"3f17cae3d78c",[],{"_key":206,"_type":73,"marks":207,"text":208},"04cb89600280",[133],"user_code ",{"_key":210,"_type":73,"marks":211,"text":212},"a84316bce613",[],"is the short, human-friendly one. The CLI shows this on screen. ",[],{"_key":215,"_type":69,"children":216,"markDefs":227,"style":78},"34e70240c3e3",[217,219,223],{"_key":210,"_type":73,"marks":218,"text":189},[],{"_key":220,"_type":73,"marks":221,"text":222},"1b8dd4c5b3bd",[133],"verification_uri ",{"_key":224,"_type":73,"marks":225,"text":226},"b76361d33e8f",[],"is where the user goes to enter the code.",[],{"_key":229,"_type":69,"children":230,"markDefs":242,"style":78},"4042d55fa9b5",[231,234,238],{"_key":232,"_type":73,"marks":233,"text":189},"8d6b0b538271",[],{"_key":235,"_type":73,"marks":236,"text":237},"5422c516f2f9",[133],"expires_in",{"_key":239,"_type":73,"marks":240,"text":241},"3dc109467322",[]," is how long the exchange is valid. Usually 15 to 30 minutes. ",[],{"_key":244,"_type":69,"children":245,"markDefs":256,"style":78},"f4d0e94a07a2",[246,248,252],{"_key":239,"_type":73,"marks":247,"text":189},[],{"_key":249,"_type":73,"marks":250,"text":251},"1f05295e0fed",[133],"interval ",{"_key":253,"_type":73,"marks":254,"text":255},"0ccbc202ebf1",[],"is how often the CLI is allowed to poll for the token. We will get to that.",[],{"_key":258,"_type":69,"children":259,"markDefs":264,"style":78},"54d42cc9ec4b",[260],{"_key":261,"_type":73,"marks":262,"text":263},"7ed8f0e3a49e",[75],"Step 2: the CLI tells the user what to do",[],{"_key":266,"_type":69,"children":267,"markDefs":272,"style":78},"fd3271987a87",[268],{"_key":269,"_type":73,"marks":270,"text":271},"2126f558d281",[],"Your CLI prints something like:",[],{"_key":274,"_type":133,"code":275,"markDefs":12},"2f7b3dbc8c1d","Open this URL in your browser:\nhttps:\u002F\u002Fexample.com\u002Fdevice\n\nEnter this code:\n  WDJB-MJHT\nWaiting for confirmation...",{"_key":277,"_type":69,"children":278,"markDefs":283,"style":78},"a7b5f93ad155",[279],{"_key":280,"_type":73,"marks":281,"text":282},"d5d4e4290261",[],"The user goes to their phone or laptop, opens the URL enter the code and signs in normally with SSO and approves the request.",[],{"_key":285,"_type":69,"children":286,"markDefs":291,"style":78},"ea7e6e7d8703",[287],{"_key":288,"_type":73,"marks":289,"text":290},"37f94c4e0325",[75],"Step 3: CLI polls the token endpoint",[],{"_key":293,"_type":69,"children":294,"markDefs":299,"style":78},"5b07849f12ba",[295],{"_key":296,"_type":73,"marks":297,"text":298},"c911b2ecd93d",[],"When we are using phone, the CLI is in the loop and every five seconds it try to reach the server and get the status",[],{"_key":301,"_type":133,"code":302,"markDefs":12},"235178b82cc3","POST \u002Foauth\u002Ftoken HTTP\u002F1.1\nHost: auth.example.com\nContent-Type: application\u002Fx-www-form-urlencoded\ngrant_type=urn:ietf:params:oauth:grant-type:device_code\n&device_code=GmRhmhcxhwAzkoEqiMEg_DnyEysNkuNhszIySk9eS\n&client_id=mycli-prod",{"_key":304,"_type":69,"children":305,"markDefs":310,"style":78},"bb0afa58726b",[306],{"_key":307,"_type":73,"marks":308,"text":309},"8236476f735a",[],"The server’s response is one of the five things, this is the part most of us will get wrong on the first implementation.",[],{"_key":312,"_type":69,"children":313,"markDefs":318,"style":78},"14872cbd05a1",[314],{"_key":315,"_type":73,"marks":316,"text":317},"cc6504fc7013",[],"Five response we should handle",[],{"_key":320,"_type":69,"children":321,"markDefs":330,"style":78},"d538100a216f",[322,326],{"_key":323,"_type":73,"marks":324,"text":325},"b1571bbd9ccc",[133],"Authorization_pending ",{"_key":327,"_type":73,"marks":328,"text":329},"2f0333874167",[],"– Users not approved yet",[],{"_key":332,"_type":69,"children":333,"markDefs":342,"style":78},"050d89a6d52c",[334,338],{"_key":335,"_type":73,"marks":336,"text":337},"5185075d7fa4",[133],"slow_down ",{"_key":339,"_type":73,"marks":340,"text":341},"59738c9ed0af",[],"– you are polling too fast. The RFC says you must increase your interval by at least 5 seconds",[],{"_key":344,"_type":69,"children":345,"markDefs":354,"style":78},"0ce8e781fdee",[346,350],{"_key":347,"_type":73,"marks":348,"text":349},"96e6866b64cb",[133],"expired_token ",{"_key":351,"_type":73,"marks":352,"text":353},"1e50b8bf4822",[],"– Exchange ran out of time, stop polling",[],{"_key":356,"_type":69,"children":357,"markDefs":366,"style":78},"8ac965855e52",[358,362],{"_key":359,"_type":73,"marks":360,"text":361},"420ba0fd7d5f",[133],"access_denied ",{"_key":363,"_type":73,"marks":364,"text":365},"4b82f2542e98",[],"– User clicked no or closed the page. Stop polling",[],{"_key":368,"_type":69,"children":369,"markDefs":378,"style":78},"02d06383abbc",[370,374],{"_key":371,"_type":73,"marks":372,"text":373},"71ee1ad87e2b",[133],"success ",{"_key":375,"_type":73,"marks":376,"text":377},"a10eb7ba714b",[],"– the token is in the body, like a normal OAuth response:",[],{"_key":380,"_type":133,"code":381,"language":174,"markDefs":12},"8858061c9588","{\n\"access_token\": \"eyJhbGciOi...\",\n\"token_type\": \"Bearer\",\n\"expires_in\": 3600,\n\"refresh_token\": \"v1.MRn7...\",\n\"scope\": \"read:repos write:repos\"\n}",{"_key":383,"_type":69,"children":384,"markDefs":389,"style":78},"6d3a4216be97",[385],{"_key":386,"_type":73,"marks":387,"text":388},"fc3c3db0ba99",[],"That is the whole protocol. If we can handle those five cases, we will have a working device flow client.",[],{"_key":391,"_type":69,"children":392,"markDefs":397,"style":398},"37331531c93b",[393],{"_key":394,"_type":73,"marks":395,"text":396},"6546da4b980c",[75],"Few additional things to take care of",[],"h2",{"_key":400,"_type":69,"children":401,"markDefs":417,"style":78},"171f82ce68fe",[402,406,409,413],{"_key":403,"_type":73,"marks":404,"text":405},"101a28fd2e75",[75],"1. Treating ",{"_key":407,"_type":73,"marks":408,"text":208},"a3cd6ee9d735",[75,133],{"_key":410,"_type":73,"marks":411,"text":412},"3c4b8ed26150",[75],"like it is secret. ",{"_key":414,"_type":73,"marks":415,"text":416},"3c1cb0c3c83c",[],"It is not. The user types it into their phone. Your job is to make it short enough to read but unguessable. The standard is 8 to 9 alphanumeric characters with the confusing ones removed (no 0, O, I, 1). GitHub uses 8 characters in the format XXXX XXXX. That is a good template.",[],{"_key":419,"_type":69,"children":420,"markDefs":436,"style":78},"b77eff3c39ab",[421,425,429,432],{"_key":422,"_type":73,"marks":423,"text":424},"08f972709a57",[75],"2. No rate limiting on the verification page. ",{"_key":426,"_type":73,"marks":427,"text":428},"34da7bbdaf67",[],"The endpoint where users enter the ",{"_key":430,"_type":73,"marks":431,"text":208},"5c931a87e30c",[133],{"_key":433,"_type":73,"marks":434,"text":435},"2bcc059c5ef9",[],"is a brute-force target. With a 9-character code from a reduced alphabet, you have plenty of theoretical entropy, but pending codes at any given moment number in the thousands. Lock it down. Per-IP, per-session, exponential backoff after failures.",[],{"_key":438,"_type":69,"children":439,"markDefs":456,"style":78},"7ff8edbb7f28",[440,444,448,452],{"_key":441,"_type":73,"marks":442,"text":443},"11e30a52dd5f",[75],"3. Ignoring ",{"_key":445,"_type":73,"marks":446,"text":447},"9a2d49ccf9be",[75,133],"slow_down",{"_key":449,"_type":73,"marks":450,"text":451},"dccb57d207fd",[75],". ",{"_key":453,"_type":73,"marks":454,"text":455},"1ab3fb47a364",[],"I have seen clients that sleep for the same interval forever, no matter what the server says. That works in dev. In production it gets you flagged as abusive.",[],{"_key":458,"_type":69,"children":459,"markDefs":475,"style":78},"52c5f8a6c393",[460,464,467,471],{"_key":461,"_type":73,"marks":462,"text":463},"bcfd4193fe86",[75],"4. Not expiring the ",{"_key":465,"_type":73,"marks":466,"text":208},"914adeae11ec",[75,133],{"_key":468,"_type":73,"marks":469,"text":470},"28cbc2a91615",[75],"immediately on use. ",{"_key":472,"_type":73,"marks":473,"text":474},"9936c00a24dc",[],"Once the user submits the code, mark it consumed. Atomically. If your check-then-mark logic is not transactional, you have a real bug waiting to happen.",[],{"_key":477,"_type":69,"children":478,"markDefs":487,"style":78},"42d39eb1f2f3",[479,483],{"_key":480,"_type":73,"marks":481,"text":482},"f72a34ea87cd",[75],"5. Confusing this with PKCE. ",{"_key":484,"_type":73,"marks":485,"text":486},"40cd62d854ca",[],"Device flow is for input-constrained devices. PKCE is for public clients (mobile apps, SPAs) that cannot keep a secret. They look similar on the surface (no client secret) but solve different problems. You sometimes need both. Device flow + PKCE is fine and increasingly common.",[],{"_key":489,"_type":69,"children":490,"markDefs":495,"style":398},"88f6b3020890",[491],{"_key":492,"_type":73,"marks":493,"text":494},"d59602b87ec3",[75],"Conclusion",[],{"_key":497,"_type":69,"children":498,"markDefs":503,"style":78},"ea71cf05a20d",[499],{"_key":500,"_type":73,"marks":501,"text":502},"b127c1c9b108",[],"The device flow is one of those protocols that looks complicated in the RFC but actually fits on a napkin. Two endpoints, five response cases, Once you have built it once, you will wonder why anyone ever bothered with passwords on TVs.",[],{"_key":505,"_type":69,"children":506,"markDefs":511,"style":78},"b6d5da2d34a6",[507],{"_key":508,"_type":73,"marks":509,"text":510},"3769433206bb",[],"If you are shipping a CLI today and still asking users to paste personal access tokens into a prompt, do them a favor. Spend an afternoon implementing this. Your users will notice.",[],true,"2026\u002F05\u002F11","2026-05-11T16:11:05.090Z",{"_type":10,"current":516},"oauth-2-0-device-flow-explained-for-engineers-especially-for-backend-engineers",[518,539,545],{"_createdAt":519,"_id":520,"_rev":521,"_system":522,"_type":525,"_updatedAt":526,"description":527,"slug":536,"title":538},"2025-04-24T16:28:57Z","797b8797-6e65-4723-b53f-8bc005305384","IpfPEqg1c3Byvj9RrB3Xaj",{"base":523},{"id":520,"rev":524},"oc42Nphz1oZNOg9ttSv7Tn","blogTag","2026-05-07T14:43:30Z",[528],{"_key":529,"_type":69,"children":530,"markDefs":535,"style":78},"bb32f75814b4",[531],{"_key":532,"_type":73,"marks":533,"text":534},"dbcf27ef29b3",[],"Community-generated articles submitted for your reading pleasure. If you’re interested in seeing your work here, log in with your Stack Overflow account and click the link below. Articles will be licensed under a CC BY-SA 4.0 grant. ",[],{"_type":10,"current":537},"contributed","The Heap",{"_createdAt":540,"_id":541,"_rev":542,"_type":525,"_updatedAt":540,"slug":543,"title":544},"2023-05-23T16:43:21Z","wp-tagcat-auth","9HpbCsT2tq0xwozQfkc4ih",{"current":544},"auth",{"_createdAt":546,"_id":547,"_rev":548,"_system":549,"_type":525,"_updatedAt":552,"description":553,"slug":573,"title":575},"2025-08-08T15:49:22Z","39391cf4-6f9a-4238-8670-c1e44b66db9e","09X6HDzCi2VfMov6gSLf7H",{"base":550},{"id":547,"rev":551},"TdCcmC7LyfLVwjB8GEXoh6","2025-12-10T19:34:33Z",[554,562],{"_key":555,"_type":69,"children":556,"markDefs":561,"style":78},"a4b1a37cbbcc",[557],{"_key":558,"_type":73,"marks":559,"text":560},"d8e8f3e0fd9c",[],"These articles are licensed under a Creative Commons Attribution-ShareAlike 4.0 International license. ",[],{"_key":563,"_type":69,"children":564,"markDefs":570,"style":78},"7effd489c71f",[565],{"_key":566,"_type":73,"marks":567,"text":569},"538808bb5325",[568],"fd643b288690","creativecommons.org\u002Flicenses\u002Fby-sa\u002F4.0\u002Fdeed.en",[571],{"_key":568,"_type":572},"link",{"_type":10,"current":574},"cc-by-sa","CC BY-SA 4.0","OAuth 2.0 – Device flow explained for Engineers, especially for Backend Engineers",[578,584,590,596],{"_id":579,"publishedAt":580,"slug":581,"sponsored":12,"title":583},"76c9771b-34e6-4d98-8641-ecefc711f0ef","2026-07-06T15:23:34.559Z",{"_type":10,"current":582},"when-the-sensor-starts-thinking-snortml-agentic-ai-and-the-evolving-architecture-of-intrusion-detection","When the sensor starts thinking: SnortML, agentic AI, and the evolving architecture of intrusion detection",{"_id":585,"publishedAt":586,"slug":587,"sponsored":12,"title":589},"28e560af-f0aa-4d46-bd90-f435ad604aa7","2026-06-26T14:00:27.102Z",{"_type":10,"current":588},"paging-charity-how-can-engineering-leaders-avoid-becoming-bond-villains","Paging Charity! How can engineering leaders avoid becoming Bond villains?",{"_id":591,"publishedAt":592,"slug":593,"sponsored":12,"title":595},"4b22c2a3-3779-4966-93eb-5230391dbdce","2026-06-23T14:08:58.595Z",{"_type":10,"current":594},"your-ai-shipped-a-backend-that-boots-that-is-the-whole-problem","Your AI shipped a backend that boots. That is the whole problem.",{"_id":597,"publishedAt":598,"slug":599,"sponsored":12,"title":601},"5cf362e1-fe7b-45af-b69c-914731c6a052","2026-06-23T14:00:00.000Z",{"_type":10,"current":600},"the-2026-developer-survey-is-now-open-for-human-developers-only","The 2026 Developer Survey is now open (for human developers only)!",{"data":603,"sourceMap":-1},{"count":604,"lastTimestamp":605},2,"2026-05-19T14:39:46Z"]