---
title: Chapter 6. Development
part: Part II. Vision
prev: books/accessibility/desktop
description: Resources for developers
tags: ["Accessibility", "Development"]
showBookMenu: true
weight: 9
params:
  path: "/books/accessibility/development/"
---

[[development]]
= Development
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 6
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/accessibility/development/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[devel-intro]]
== Introduction

This chapter provides resources for developers seeking to make their programs accessible, test accessibility, and improve the accessibility of their software.

[[devel-colors]]
== Colors

Do not assume that users can distinguish all (or even any of) the colors used in your program.
While official statistics on the prevalence of color blindness are lacking, it is estimated that approximately 5% of the population is affected by some form of it, whether partial or total.

[[devel-color-guidelines]]
=== Colors Guidelines

Avoid using color as the sole means of conveying information.
If color must be used, provide a straightforward and well-documented method for configuring color settings.
Where possible, ensure support for the `$NO_COLOR` environment variable to accommodate user preferences.

[[devel-color-checkers]]
=== Colors Checker

The package:graphics/kontrast[] package provides the Kontrast GUI utility to check if the color combinations are distinct enough to be readable and accessible.
To install:

[source,shell]
....
# pkg install kontrast
....

[[devel-cli]]
== Command Line Interface

The CLI is generally considered accessible by a screen reader.
However, it is important to understand some concepts, follow best practices, and avoid certain mistakes to ensure an accessible UI.

Dahlke, Karl. _Command Line Programs for the Blind_.
Available at: http://www.eklhad.net/philosophy.html.
This article discusses the concept of presenting information in one dimension and addresses the accessibility challenges inherent in programs designed exclusively for sighted users.

Sampath, H., Merrick, A., & Macvean, A. (2021).
Accessibility of Command Line Interfaces.
In Proceedings of the CHI Conference on Human Factors in Computing Systems (CHI '21).
ACM.
Available at: https://dl.acm.org/doi/fullHtml/10.1145/3411764.3445544.
This paper presents guidelines and common pitfalls to avoid when designing command-line interfaces that are accessible to screen reader users.

[[devel-libs]]
== Libraries

[[devel-at-spi]]
=== Gnome

AT-SPI (Assistive Technology Service Provider Interface), package:accessibility/at-spi2-core[], is a framework that establishes a communication channel between applications and assistive technologies.
To install, execute:

[source,shell]
....
# pkg install at-spi2-core
....

AT-SPI offers a wide range of features. For more information, refer to the following resources:
https://gitlab.gnome.org/GNOME/at-spi2-core/-/blob/main/README.md[README],
https://gnome.pages.gitlab.gnome.org/at-spi2-core/atk/[Atk wiki],
https://gnome.pages.gitlab.gnome.org/at-spi2-core/libatspi/[AT SPI Wiki],
and https://wiki.gnome.org/Accessibility[GNOME Accessibility Team Wiki].

[TIP]
====
Some wrappers are available: package:accessibility/rubygem-atk[] (Ruby), package:accessibility/py-atspi[] (Python), and package:accessibility/atkmm[] (C++).
====

[[devel-qt]]
=== QT

package:accessibility/libqaccessibilityclient[] establishes a communication channel between applications and assistive technologies.
In particular, it provides a bridge between applications built with Qt and the AT-SPI framework crossref:development[devel-at-spi,previously described].
For full documentation, refer to the https://api.kde.org/libqaccessibilityclient/html/index.html[API Reference] and the https://github.com/KDE/libqaccessibilityclient[official repository].
To install:

[source,shell]
....
# pkg install libqaccessibilityclient
....

Libraries package:accessibility/qt5-speech[] and package:accessibility/qt6-speech[] provide access to a Text-To-Speech functionality (specifically to package:accessibility/speech-dispatcher[]).
Documentation is available at https://doc.qt.io/archives/qt-5.15/qtspeech-index.html and https://doc.qt.io/qt-6/qttexttospeech-index.html.
To install, run:

[source,shell]
....
# pkg install qt5-speech
# pkg install qt6-speech
....

=== Speech Synthesis

package:accessibility/speech-dispatcher[] provides a simple, high level, and device independent layer for access to Speech Synthesizers.
To install, run:

[source,shell]
....
# pkg install speech-dispatcher
....

For detailed documentation, refer to the official Speech Dispatcher website: https://freebsoft.org/speechd.

[TIP]
====
A Python wrapper for the library is provided by the package:accessibility/py-speech-dispatcher[].
====

[[devel-liblouis]]
=== Liblouis

package:devel/liblouis[] provides an API for translating many languages to and from Braille.
To install, execute:

[source,shell]
....
# pkg install liblouis
....

The library provides many features, https://liblouis.io/documentation/[documented on the liblouis project website].

[TIP]
====
Liblouis provides also a Python API, https://liblouis.io/documentation/liblouis.html#Python-bindings[Python bindings].
====

[[devel-tools]]
== Tools

package:accessibility/accerciser[] provides an accessibility inspection tool for applications developed for the extref:{handbook}desktop/#gnome-environment[GNOME] desktop environment.
To install it, run:

[source,shell]
....
# pkg install accerciser
....

For detailed usage and features, refer to man:accerciser[1].
Additional documentation is available in the https://gitlab.gnome.org/GNOME/accerciser/-/blob/master/README.md[REAMDE.md]
and the https://help.gnome.org/users/accerciser/stable/index.html.en[Accerciser User Guide].
