Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
161790 stories
·
33 followers

GitHub Student Developer Pack: What You Can Get as a Student

1 Share

If you're a student learning software development, the GitHub Student Developer Pack is something you should probably know about.

free github pro bag

It gives eligible students access to GitHub and a collection of developer tools and services from different partners, with some offers available for up to two years.

The interesting part is that it's much more than just GitHub Pro.

Depending on the current offers, students can get access to tools related to:

  • Cloud and infrastructure
  • Development environments
  • AI tools
  • Domains and hosting
  • Databases
  • APIs
  • Design
  • Security
  • Developer productivity

GitHub currently states that student verification lasts for two years, and students can re-verify their status afterward if they remain eligible.

I recently organized the information I found into a small open-source project:

GitHub Student Pack Guide

It's a guide to the benefits available through the Student Developer Pack, with the information organized by category to make it easier to find useful tools.

The repository is available in English, Spanish and Portuguese:

https://github.com/quintana-dev/github-student-pack-guide

I built this mainly because when you're starting out as a developer, it's easy to pay for tools without realizing that some of them may already be available through your student status.

If you're currently studying software development, it's worth checking what you have access to before paying for developer tools yourself.

About Me

I'm Ramiro Quintana, a Software Engineer & Full Stack Developer from Argentina.

I build web applications, browser extensions, automation tools and other software projects under quintana.dev.

I'm currently focused on software development, automation, web technologies and building practical projects while continuing to learn and improve.

You can find my projects and other work on my website:

https://quintana.dev.ar

Read the whole story
alvinashcraft
4 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

From API Keys to Access Control: Rethinking Secrets Management

1 Share

For as long as software has called APIs, we’ve solved the same problem the same way. The code needs a secret (a key, a token, a credential), so we give it one. We copy it into a config file, an environment variable, a secrets manager, an OS keychain. The details have changed a great deal over the years. The shape of the answer never has: to make the call, the caller holds the secret.

That assumption has been quietly load-bearing for two decades. It’s about to stop being safe.

To understand why, it helps to trace how we got here.

We kept getting better at storing secrets

Secrets management has a clear line of progress, and every step on it was a real improvement.

Hard-coded in source. The original sin, and still the most common finding in any first security review. The key sits in the code, which means it’s in the repository, in every clone, and in the git history forever. Rotating it means a commit. Anyone who can read the code can read the key.

Externalized configuration. So we pulled secrets out of the code and into environment variables and .env files. This was genuinely better: the key stopped shipping with the source. But it didn’t stop existing in plaintext; it just moved from the repository to the environment, where every process you launch inherits it whether it needs it or not.

Centralized secret managers. Then came HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, and their peers: one source of truth, with encryption at rest, rotation policies, access policies, and audit logging on the store itself. This is the current state of the art for most teams, and for good reason. It solved storage properly.

Local vaults and credential helpers. In parallel, the OS keychain, git’s credential helper, and tools like Postman Local Vault kept secrets off shared infrastructure and encrypted on the developer’s own machine.

Each generation answered the question where do we keep the key? better than the one before it.

Diagram tracing the evolution of secrets management: hard-coded keys, externalized config, then centralized secret managers, and finally a step where the caller no longer holds the secret at all.Every generation improved where the key is stored. The next one changes whether the caller holds it at all.

But most importantly, every one of these generations makes the same assumption about the consumer:

At the moment of the call, the consumer holds the real secret.

Storage got centralized, encrypted, rotated, and audited. Use never changed. A secret manager secures the key at rest and then, at request time, hands the plaintext to the thing making the call. From that instant, the secret lives in the application’s memory, its logs, its outbound requests, and every copy the consumer makes of it. The vault secured the key right up until the moment it mattered most, and then handed it over.

For most of software’s history, that was a safe enough trade. Agentic development is what turns it into a liability.

Agents don’t work that way

Given a goal rather than an instruction, an agent decides while it is running which tools to call and which hosts to hit, and every process it spawns inherits your environment variables whether or not it needs them. A key you exported for one task is now reachable by code you did not write, making calls to endpoints you did not choose. The execution path that spends the credential doesn’t exist until runtime, so there is no file you could open beforehand to predict where it ends up.

That is enough to break the storage model. Where is the key kept? had a satisfying answer for twenty years, because you put it somewhere and so you knew where it was. Once an agent is the caller, the honest answer to where does this key go? is that you can’t know in advance – and real agent traffic bears that out, fanning a single exported key across hosts, processes, and formats that no one chose ahead of time.

Better storage cannot fix a problem that isn’t about storage.

A different answer: grant access, don’t distribute secrets

The way out is to stop improving where the secret is stored and change whether the consumer ever holds it at all.

Instead of handing out the secret, hand out a credential reference, a token that points at a secret without containing it. The real key stays in your own network, in your existing secret store. When a request goes through a secure access proxy running inside that network, the proxy resolves the reference, injects the real credential, forwards the request, and returns the response. The consumer places the reference wherever the secret used to go and gets back a normal, authenticated result. It never holds the secret.

This inverts the model. Secrets management became an access-control problem instead of a storage-and-distribution one.

Diagram of the inversion: instead of distributing a copy of the secret to every consumer, each consumer holds a credential reference that only resolves through a proxy inside your network.

The inversion: stop handing every consumer a copy of the secret, and hand them a reference that only resolves through a proxy inside your network.

In practice, that model provides:

  • Credential references in place of distributed keys, so consumers hold pointers, not secrets.
  • Resolution inside your own network, in front of your existing secret store, so the plaintext never crosses an external boundary and never reaches the application layer, logs, or the vendor’s cloud.
  • Cryptographically proven caller identity, bound to the holder, so a reference copied off a machine is inert without the matching identity.
  • Operation-level scope, so a consumer can be granted read and denied delete on the same API.
  • Per-consumer, revoke-anytime access, so you can cut off one caller without touching any other.
  • Attribution on every call, so the audit record answers who did what, not merely that something happened.
  • One consistent model across humans, CI pipelines, and AI agents, because “consumer” was never only a person.

From distributing secrets to governing access

Every generation of secrets tooling answered a storage question better than the last. The next one answers a different question entirely.

The unit we need to govern is no longer a secret you keep safe. It is an act of access: a specific caller making a specific call, with a specific scope, at a specific moment.

The old question was:

Where is this key kept, and is it encrypted?

The new question is:

Who (person, pipeline, or agent) is allowed to make this call, scoped to what, right now, and can I prove it and take it back?

A model built to answer the first question cannot answer the second, no matter how good its storage becomes. Encrypting a key at rest tells you nothing about who is allowed to spend it or where it will go once you hand it over. That is the shift, and like every shift before it, the tooling has to evolve to meet it.

How Postman Passport puts the access model into practice

At Postman, this is the shift we’re building Postman Passport to meet.

Diagram of a request through Postman Passport: a credential reference goes in, the proxy resolves the real secret inside your network, and the target API receives a normal authenticated call.

 

A request through Passport: the reference goes in, the proxy resolves the real secret inside your network, and the target API sees a normal authenticated call, while the secret never leaves your network.

Passport is a secure API access system for your team. Instead of distributing keys to every consumer that needs one, it grants access with credential references while the real secrets stay inside your own network. The secure access proxy runs in your network, in front of the secret store you already use (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, 1Password), and resolves references at request time. Your rotation policies, audit trails, and access policies inside that store keep applying. Passport adds the layer above them that keeps consumers from ever seeing a resolved value.

Everything the previous section argued for is the design:

  • Identity is cryptographic and bound to the holder, so a stolen reference is inert.
  • Scope is checked before the store is ever contacted, and can be granted down to the operation.
  • Secrets are resolved inside your network and never transit the Postman cloud, logs, or audit records.
  • Access is granted per API and revoked as a single write in your Private API Network: no key to rotate, no distribution list to chase.
  • And because a consumer was never only a human, the same model covers CI pipelines and AI agents. You grant an agent scoped, revocable access instead of handing it a key it can leak into a prompt, a log, or a third-party tool.

That last point is where this connects to the broader shift the industry is working through. As teams stand up infrastructure to govern what an agent may do (the gateways and control planes emerging around agentic systems), Passport governs which credentials it may use, without ever giving it the credential. Governing intent and governing access are two halves of the same problem, and neither is solved by better storage.

If you distribute static keys to consumers today, the place to start is the honest question from earlier, asked of one API: if this consumer had to be cut off this afternoon, could I prove their access was gone by tonight? The APIs where the answer is “we’d rotate what we remembered” are the ones where an access model pays for itself first.

Postman Passport is available now. Point one high-value key at a reference and watch a real call succeed with the secret nowhere near the caller — that’s the whole idea, and it’s the fastest way to see it.

👉 Try Postman Passport → usepassport.ai

Resources

The post From API Keys to Access Control: Rethinking Secrets Management appeared first on Postman Blog.

Read the whole story
alvinashcraft
5 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Architecting the Modern Web: Debounce APIs, Rendering Strategies, and Automated AI Setup! ⚡

1 Share
This Week in the Angular Community — Sept 11th, 2026

As we move deeper into the current release cycles, the Angular ecosystem is bringing incredibly refined primitives into our daily workflow. From native debounce mechanisms in the core framework to hybrid rendering patterns and AI agents that handle boilerplate securely, this week’s roundup is a masterclass in efficiency.

Dive into these fantastic technical features from our community experts:

Angular Rendering Demystified: CSR, SSR, and SSG
Kevin Davila (@kevindaviladev) breaks down the fundamental differences between Client-Side Rendering, Server-Side Rendering, and Static Site Generation. Learn how to choose the right strategy to optimize your app’s SEO and initial load performance.

→ Read the architectural guide: https://www.codeabien.com/es/blog/angular-rendering-csr-ssr-y-ssg

Combining SSR, CSR, and Prerendering in a Single Project
Want the ultimate performance stack? Nicolas Molina (@nicobytes) delivers a practical video walkthrough showing you exactly how to mix and match SSR, CSR, and Prerender patterns dynamically within a single, unified Angular workspace.

→ Watch the tutorial: https://www.youtube.com/watch?v=BJz-Sskpg-g

Angular: The Analog Way
Ankita Sood (@GuacamoleAnkita) takes a close look at the meta-framework space. Discover how Analog.js brings file-based routing, markdown support, and simplified deployment to the Angular universe, streamlining your modern full-stack developer experience.

→ Watch the deep dive: https://youtu.be/3FNsvfq0G7Y

Mastering the New Native Debounce & Debounced APIs
Fatima Amzil (@fati_amzil) delivers a brilliant 2-part exploration into one of the most exciting recent performance upgrades. Learn the critical structural differences between the Signal Forms debounce() feature and the new native, core debounced() API that automatically wraps time-delayed signal emissions inside a managed Resource.

→ Read Part 1 (The Power of Debounce): https://medium.com/gitconnected/angular-22-the-power-of-debound-and-debounced-apis-c41e33c0a18e
Read Part 2 (APIs in Action): https://medium.com/javascript-in-plain-english/meet-angulars-debounce-debounced-apis-in-action-%EF%B8%8F-e096251ffc98

Elevating AI Agents: Automated Scaffolding & Zero Hallucinations
Fatima Amzil (@fati_amzil) also drops two essential blueprints for AI-driven development. First, see how to train an AI agent to automatically spin up a rock-solid, structured Angular project base using custom workspace skills. Then, learn a clever prompt framework that stops agents from hallucinating when integrating third-party libraries into your codebase.
→ Read the Automation Guide: https://medium.com/gitconnected/automate-angular-projects-foundation-with-skills-05248dd10834
Read the Anti-Hallucination Strategy: https://medium.com/gitconnected/stop-configuring-third-party-libraries-by-hand-let-your-agent-handle-it-9ec3ddbca3c5

Have you started testing the native debounced() primitive yet? Or maybe your team has automated your repository setups using custom AI templates? We’d love to hear about your latest time-saving workflows.

Let’s keep spreading the knowledge! Use #AngularSparkles to share your favorite snippets and help the community build better apps. 👇

For a closer visual breakdown of native reactive timing, you can check out Angular’s new debounced() signal explained to see how the framework natively handles time-delayed primitives without needing extra library overhead.


Architecting the Modern Web: Debounce APIs, Rendering Strategies, and Automated AI Setup! ⚡🌐 was originally published in Angular Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.

Read the whole story
alvinashcraft
5 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

An update on Angular’s TypeScript 7-powered Compiler

1 Share

Alex Rickabaugh & Mark Techson

[Alex] I joined the Angular team in 2015, around the original Angular 2.0 release. One of my first tasks was to convert source code from JavaScript into a relatively new (at the time) language from Microsoft, known as TypeScript. TypeScript would go on to become both an industry standard and one of Angular’s greatest strengths, providing the structure and safety for the team to scale the framework. We built Angular’s innovative ahead-of-time compiler on top of the TypeScript compiler’s APIs. While compiling web applications was not new at Google, it was certainly rare in the larger web ecosystem at the time.

Fast forward to today — TypeScript has helped Angular scale to some of the largest web applications in the world. The web ecosystem’s tooling has evolved significantly in the last 10 years as well. Recently we’ve started to see a push to build higher performance JavaScript compilers, bundlers, and other tools using native code. TypeScript 7 is an incredible demonstration of the potential here, and we’d like to congratulate the TypeScript team on their stable release and the amazing performance it delivers! If you haven’t seen their blog post yet, take a moment to check it out, especially the performance numbers.

Angular’s compiler has one of the most complex integrations with TypeScript in the web ecosystem, and we’ve known that this deep integration cannot work with a Go-compiled version of TypeScript. Apart from the overhead of crossing the language barrier, the Angular compiler implements its own code transformations via the ts.Transformer API which is not available cross-language. Bringing the same benefits of native tooling and TypeScript 7 to Angular developers requires us to think outside of the box. Early this year, we started putting together our plan: decouple Angular compilation from TypeScript’s compiler APIs, and build a new Angular-specific compiler that processes components, directives, etc. and outputs transformed TypeScript code, ready for processing by a build pipeline or any other compilation tool. This is a well-trodden path, and many other frameworks in the web space have similarly chosen to decouple code generation from type-checking. What’s more, many of them are using the same underlying library to perform those transformations: oxc.

Oxc, the Oxidation Compiler, is a native toolchain for JavaScript parsing and compilation developed by Void Zero. It’s written in Rust, with a stable and mature API for operations like parsing, AST visitation, semantic analysis, and code transformations. Oxc is the engine that powers their popular Vite build tool. So as cliche as it sounds… we’re rewriting the Angular compiler in Rust 🦀 (partially).

At least in development, we’re calling this new tool the Angular Preprocessor (ngp) to distinguish it from the existing TypeScript-based compiler (ngc). Let’s take a look at what this will look like from a high level:

Behind the scenes

ngp has two main tasks: compile Angular decorators (@Component, @Pipe, etc) and any associated templates for efficient rendering at runtime, and facilitate type-checking of expressions in component templates by the TypeScript compiler. For every input source file (e.g. dashboard.ts) in your project, ngp generates two output files, one for each task:

  • A dashboard.ng.ts file which contains your code, but with the Angular decorators replaced with their compiled versions. This file can be fed to TypeScript or directly to a bundler like esbuild. This is the code for your components that gets loaded and executed in a browser.
  • A dashboard.ngtypecheck.ts file which contains a translation of the expressions and types in any component templates, that allows TypeScript to perform its type-checking and report high-quality diagnostics.

Source maps are generated for both files, which allow any downstream tools (like TypeScript) to report errors in the context of your original input file.

Architecture flowchart showing the Angular Preprocessor (ngp) pipeline splitting an input file (dashboardexample.ts) into two branches: compilation for bundler execution and type-checking for diagnostics.

Note that for performance, these output files are usually produced only in memory and not written to disk.

The Hybrid Architecture

While we eventually want to replace the entire compilation chain with native Rust code, Angular has a sophisticated template compilation pipeline written in TypeScript. Rewriting that piece would take extra time. So for ngp, we’re using a hybrid approach: Rust for the compiler’s frontend, and TypeScript for the backend.

The compiler’s frontend is a Rust library we call the analyzer. Using oxc, it parses your code, finds Angular-decorated classes, maps relationships between NgModules and their components/directives, extracts dependency information from Angular Package Format libraries, and produces a list of compilation tasks. Because Rust and Oxc have strong support for multithreading, our analyzer reads your source code in parallel and streams compilation work units to the backend.

The backend is the piece that executes those tasks, by invoking Angular’s existing template compiler to generate output TypeScript code, either for runtime or for type-checking. It receives compilation tasks from the analyzer, generates code, and writes the output files and their sourcemaps. The ngp backend is written in TypeScript.

We’re leveraging a tool called napi-rs, which allows Rust libraries to be packaged as native plugins to node applications, or alternatively as WebAssembly bundles. Using napi-rs, when ngp loads the analyzer code it can load it either as a native library if one exists for your architecture and platform, or fall back on a WASM bundle. Supporting WASM also allows the Rust-based analyzer to be loaded in browser environments, which is useful for online coding tools that need to compile Angular in a browser.

Current Status

ngp is nearing its MVP as a compiler. We’re testing it against Google’s large corpus of Angular applications in order to iterate on its correctness. We’re also prototyping its integration into the CLI’s build system, and we also have a prototype of the language service integration. We’re aiming to ship an experimental version that you can test out in your own projects later this year. Until then, let us know what questions you have about this exciting new compiler.

FAQ

Is the new compiler faster? Does it get the same 10x speedup as TypeScript 7?

It’s too early to say. TypeScript compilation is only a part of the whole type-checking, transpilation, minification, and bundling process. We’re going to refrain from drawing any conclusions until we can benchmark the full build process with the Angular CLI in an apples-to-apples comparison, but we’ve done some ad-hoc testing and the results are encouraging.

What about the language service?

We will be able to use the new ngp engine to power the Angular language service as well, and have a working prototype of this integration.

Are there going to be breaking changes?

We are testing the new compiler against Google’s entire Angular codebase, and fixing any compatibility problems we find. That said, there are a few edge cases we’re aware of where type checking behaves slightly differently with the new output in a way that could lead to new type errors surfacing. These have been exceptionally rare, but we will still document them as breaking changes to be thorough. TypeScript 7 itself has several such differences in behavior.

Why not use TypeScript’s interop APIs to port the existing compiler?

We are planning to use TS 7.1 interop APIs for type-checking and diagnostics as a part of our solution. We’ve been working closely with the TypeScript team at Microsoft to ensure that TS 7.1’s APIs can support our use cases, and we’re grateful to them for their collaboration!

We considered using the interop API layer for the whole compiler pipeline, but decided against it for performance reasons. Angular’s compiler does much more extensive AST walking and processing than other consumers, and we (like the TypeScript team) felt that the benefits of processing in native code were too large to ignore.

Why not Go, like Microsoft chose?

The TypeScript team has done a fantastic job documenting their reasons for selecting Go. Largely this boils down to Go being a much more natural fit for porting a complex codebase from another garbage collected language. This wasn’t really a constraint for Angular, since our compiler has much more straightforward data structures to manage. Instead, the main deciding factor for us was the availability of a high quality, well maintained JavaScript/TypeScript toolchain: a library with a parser, AST, semantic binder, and code transformer. The intersection of this requirement and our desire to build in native code led us to oxc and Rust.

Note: TypeScript 7 itself is a TypeScript parsing and transformation toolchain in Go, but its APIs are private by design (at least in the initial release). Currently there is no public library which implements a TypeScript parser and AST in Go.

Didn’t VoidZero already build an Angular compiler in Rust/oxc?

Yes! But with some caveats. oxc-angular-compiler focuses on Angular source code transpilation (the compiler’s task #1) but does not implement either template type-checking (task #2) or cross-file optimizations that are required to keep non-standalone application bundles small. We need to support both of these operations.

Longer term, we are interested in adapting oxc-angular-compiler’s port of our template parsing and compilation engine to move more of ngp’s work into Rust.


An update on Angular’s TypeScript 7-powered Compiler was originally published in Angular Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.

Read the whole story
alvinashcraft
5 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Crafting WCAG 3 for more accessible user experiences

1 Share

In this post, I cover some of the stakes and challenges in developing W3C Accessibility Guidelines (WCAG) 3. I use "websites" as an example, yet this information generally applies to apps, software, documents, and other digital content and technologies.

Summary

You could say that ideally WCAG would cover all the accessibility needs of people with disabilities, accessibility would be easy to implement in all situations, and comprehensive standards would be implemented in all websites. Alas, our world is not ideal.

If WCAG required that all possible accessibility needs and wants are fully met, it would not be a practical standard that could be implemented by all websites.

If WCAG did not sufficiently address accessibility needs, it would not meet its primary goal. Thus WCAG needs to balance user needs with implementation practicalities. This is an incredible challenge.

The W3C Accessibility Guidelines Working Group is addressing this by covering as many user needs as possible in WCAG 3 and providing guidance on prioritizing implementation. We know that some websites will not go beyond the minimum requirements. We also know that some websites will go beyond the requirements and want to be recognized for providing more accessible websites.

We continue work on ways to encourage all websites to be as accessible as possible.

Different stakeholder needs and wants

People with disabilities need the web to be accessible. It's imperative for equitable access to the digital world.

Most websites have accessibility barriers. To help address this, many countries and regions have laws, regulations, or policies that require websites to be accessible. Most are based on WCAG 2.

Policymakers want a stable standard that can be used to create practical regulations.

Some website owners and developers do not want to be required to make their website accessible. Some push for accessibility standards to have minimal requirements. (Factors that are not related to this blog post include awareness, education, accessibility of authoring tools, and more.)

These are some of the competing interests in developing accessibility standards.

Balancing stakeholder positions

Competing interests are a major challenge faced by the W3C Accessibility Guidelines Working Group as it develops WCAG 3.

We want WCAG to cover disabled peoples' accessibility needs.

We want WCAG to be adopted and implemented.

As said in the summary above, if WCAG required that all possible accessibility needs and wants are fully met, it would not be a practical standard that could be implemented by all websites. If WCAG did not sufficiently address accessibility needs, it would not meet its primary goal.

An example is sign languages. Sign is the first language of some people, and some are not as literate in written text. Therefore, having all content also available in sign languages would be most accessible. However, it is not practical to require sign language because it is expensive, there are limited resources (including signers) to get it done, and there are multiple sign languages even in English. WCAG includes sign language as an accessibility need, just not as a requirement for conformance. And WCAG requires that all auditory information is available as text, not just audio.

To address multiple stakeholder interests, working group participants bring experience from multiple perspectives, including people with a wide range of disabilities, government, implementers, multinational corporations, small businesses, and more.

Over the last few years, the group has explored many different approaches. We are particularly excited about the latest approach. Fundamentally, it simplifies conformance to the standards and provides flexibility for defining policies. It also encourages going beyond conformance to address additional accessibility needs.

I'll say more later; first let me explain a bit about conformance.

WCAG is the ruler

One way to think about the standard and policies is as a measuring ruler and rules.

  • Ruler — The WCAG standard documents accessibility requirements. WCAG can be used to measure accessibility.
    • Conformance — When a website meets specified WCAG requirements, it "conforms" to WCAG.
  • Rules — Laws, regulations, and policies define which WCAG requirements must be met. Policies can include and exclude WCAG requirements.
    • Compliance — When a website meets a law, it "complies" with that law.

W3C provides the ruler with WCAG.

W3C does not write the rules. Yet we know that WCAG is used in laws, and that factors into WCAG development.

Defining and measuring challenges

WCAG as the ruler and policies as the rules is a nice simple analogy. Yet even defining the ruler is complex.

With digital accessibility, some things apply in all situations and can be fairly easily measured. Yet many things are difficult to define and measure.

Many depend on context. And context impacts the importance. For example, an accessibility barrier in a form to pay my community chorus dues is not nearly as important as a form to apply for medical treatments.

The W3C community has iterated through different approaches to covering accessibility needs that are difficult to address as requirements in a standard that is often required. (more below)

A fundamental shift

The W3C Accessibility Guidelines Working Group has spent time and effort exploring different approaches to conformance for WCAG 3, especially considering that WCAG is used in policies. Much of the previous work on draft conformance was trying to address more things within WCAG and provide flexibility within conformance.

The September 2026 draft of WCAG 3 takes a fundamentally different approach. It further separates conformance to WCAG from details that can be addressed by policies. It defines reporting tiers to encourage greater accessibility towards conformance and beyond conformance. It provides several aspects for policymakers to choose WCAG requirements for different situations.

Specifically, this WCAG 3 draft provides:

  • a single level of conformance
    • called "core requirements"
    • builds on WCAG 2.2 Level A and AA success criteria
    • provides a baseline for policymakers
  • supplemental requirements, assertions, and recommended practices
    • cover areas that cannot be objectively measured or do not apply to every situation
    • encourage organizations to improve their approach to accessibility
    • encourage websites to go beyond conformance
  • "tags" that can be used
    • by regulators to define policies that include and exclude specific requirements for specific situations (for example, more requirements for essential government services and fewer requirements for less important websites)
    • by websites to report progress towards conformance and beyond conformance
  • multiple reporting tiers to encourage greater accessibility

This approach simplifies what is considered WCAG conformance and provides flexibility for more specific website reporting and policy development.

Continued WCAG 3 development

We now have an approach that shows promise in balancing the challenges introduced above.

The Working Group welcomes constructive input as it continues to explore and refine the approach and the details to craft a WCAG 3 standard that:

  • defines ways for websites to be more accessible to more people with disabilities
  • makes it easier for website owners and developers to understand what they need to do
  • provides policymakers with an international standard that is flexible to meet different policy contexts
  • encourages website owners and developers to improve accessibility by acknowledging success towards conformance to WCAG 3 and beyond conformance
  • works in context now and in the future

WCAG is a tool

With all this focus on WCAG, I want to clarify that the goal of accessibility is to meet the needs of disabled people in the real world. WCAG is an important tool for accessibility, yet just meeting WCAG is not the end goal. And meeting only the WCAG 2 Level A and AA success criteria (or only the core requirements of WCAG 3) is not enough. WCAG and policies help motivate, measure, and report on accessibility. Accessible user experiences is the goal.

W3C provides resources to understand disabled people's experiences and to encourage user-centered accessibility.

We plan for the WCAG 3 documents to further support a user-centered accessibility approach.

Learn more and share

To learn more about WCAG 3, start from the WCAG 3 Introduction. It includes review questions and how to submit comments.

We look forward to your input on crafting WCAG 3 to encourage more accessible user experiences in the real world.

Finally, a huge thanks to the Accessibility Guidelines Working Group Co-Chairs, participants, and everyone who contributes constructive perspectives for developing WCAG 3.

Read the whole story
alvinashcraft
5 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Stop Building MFA from Scratch (And What to Do Instead)

1 Share
Learn about the hidden costs of building multi-factor authentication (MFA) from scratch and how Auth0 streamlines the implementation process.

Read the whole story
alvinashcraft
5 minutes ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories