Maintainer's Corner

Readme for brick-0.17

brick

brick is a terminal user interface programming
library written in Haskell, in the style of
gloss. This means you write
a function that describes how your user interface should look, but the
library takes care of a lot of the book-keeping that so commonly goes
into writing such programs.

brick exposes a declarative API. Unlike most GUI toolkits which
require you to write a long and tedious sequence of "create a widget,
now bind an event handler", brick just requires you to describe
your interface -- even the bits that are stateful -- using a set of
declarative combinators. Then you provide a function to transform your
own application state when input (or other kinds of) events arrive.

In addition, some of brick's more powerful features may not be obvious
right away:

All widgets can be arranged in predictable layouts so you don't have
to worry about terminal resizes.

Most widgets can be made scrollable for free.

Attribute management is flexible and can be customized at runtime on
a per-widget basis.

brick exports
microlens and non-lens
interfaces for most things, so you can get the power of lenses if
desired or use plain Haskell if you don't. If a brick library function
named thing has a lens version, the lens version is named thingL.

Documentation

Status

brick is young and may be missing some essential features. There are
some places were I have deliberately chosen to worry about performance
later for the sake of spending more time on the design (and to wait on
performance issues to arise first). brick exports an extension API
that makes it possible to make your own packages and widgets. If you
use that, you'll also be helping to test whether the exported interface
is usable and complete!

Reporting bugs

Please file bug reports as GitHub issues. For best results:

Include the versions of relevant software packages: your terminal
emulator, brick, ghc, and vty will be the most important
ones. Even better, the output of cabal freeze would probably be
helpful in making the problem reproducible.

Clearly describe the behavior you expected ...

... and include a minimal demonstration program that exhibits the
behavior you actually observed.

Contributing

If you decide to contribute, that's great! Here are some guidelines you
should consider to make submitting patches easier for all concerned:

If you want to take on big things, talk to me first; let's have a
design/vision discussion before you start coding. Create a GitHub
issue and we can use that as the place to hash things out.

If you make changes, try to make them consistent with the syntactic
conventions I've used in the codebase.