Back to portfolio

Technical accessibility project

Komplete Kontrol accessibility layer.

Native Instruments’ Komplete Kontrol shipped with no VoiceOver support. I defined and tested an accessibility layer that adds screen reader navigation, keyboard access, and toolbar labels.

Platform macOS
Technologies Objective-C, NSAccessibility, dynamic library integration
Type Accessibility integration layer
Status Active development
My role Accessibility direction, implementation review, and VoiceOver validation

What this project shows

Out of the box, VoiceOver sees a blank window.

Komplete Kontrol draws its own interface, so there's nothing there for VoiceOver to read. This project adds VoiceOver elements for the parts that can be reached. I decided how they should behave, directed the digging into how the app is built, and tested each one with VoiceOver.

My contribution

  • Identified the inaccessible component boundaries and priority workflows
  • Defined expected VoiceOver labels, roles, navigation, and keyboard behavior
  • Directed inspection and implementation using macOS accessibility APIs
  • Tested every implemented control as a daily VoiceOver user
  • Separated working improvements from the still-inaccessible areas

What the project implements

Here's what works so far.

Accessible preferences

The application's preferences window is now fully navigable with VoiceOver, including all settings panels and controls. Keyboard shortcut support was added so the preferences window can be opened and closed without a mouse.

Toolbar label correction

The application's toolbar buttons had no accessible labels. The accessibility layer identifies each button and applies descriptive labels so VoiceOver can announce their purpose instead of reading generic or empty text.

Keyboard navigation

Standard macOS keyboard commands like Cmd+comma for preferences and Cmd+W to close windows now work as expected. The app didn't support them before.

The challenge ahead

The browser content area, including the preset list, tag filters, and product grid, is rendered entirely as a bitmap by a proprietary widget toolkit. Making that reachable means walking the internal widget tree and creating NSAccessibilityElements for each item. That work is still ongoing.

Technical approach

Dynamic library architecture

The accessibility layer is implemented as a dynamic library that integrates with the application at launch. A lightweight loader handles the connection between the application binary and the accessibility code, keeping the two cleanly separated.

UI component discovery

The application uses a proprietary widget system for rendering. Understanding its internal structure required reverse engineering the component hierarchy to identify which objects correspond to visible controls and how to attach accessibility information to them.

Minimal footprint

Rebuilding the accessibility layer requires only a simple build script and an application restart. No administrator access is needed for day-to-day development, and the accessibility code can be updated independently of the application itself.

Why I built it

I wanted to use it.

Komplete Kontrol is one of the most widely used instrument browsers in music production. Without accessibility support, blind musicians can't browse presets, audition sounds, or set up instruments on their own.

Implementation uses

  • Objective-C and macOS Accessibility APIs
  • Dynamic library integration
  • Runtime introspection and UI component analysis
  • Custom build and deployment tooling

Want to see more of my work?

The portfolio includes web and mobile accessibility audits alongside these technical projects.