Teaches coding agents how to build TUIs with TamboUI correctly: API-level selection, render-thread discipline, display-width safety, CSS-aware element authoring, and JFR conventions.
94
93%
Does it follow best practices?
Impact
97%
2.77xAverage score across 3 eval scenarios
Passed
No known issues
TamboUI exposes a small unchecked exception hierarchy rooted at dev.tamboui.error.TamboUIException. Throwing the right subtype lets callers catch what they actually want to handle (terminal I/O vs. framework misuse vs. backend failure) without blanket catch (RuntimeException).
RuntimeIOException — terminal I/O failures; Terminal wraps every IOException from the backend in this with a descriptive messageBackendException — non-I/O backend failures (native/Panama init, provider lookup, capability detection)TuiException — TUI framework misuse (render-thread violations, invalid bindings, lifecycle errors)SolverException, CssParseException, UnknownCssPropertyExceptionBackend interface methods still throw checked IOException — backends are low-levelTerminal layer wraps backend IOExceptions into RuntimeIOException so user-facing APIs are uncheckedTerminal, follow the wrap pattern; if you extend Backend, throw IOExceptionObjects.requireNonNull(value, "fieldName") for null checksIllegalArgumentException for invalid argument valuesIllegalStateException for invalid object statethrow new RuntimeIOException("Error", e);throw new RuntimeIOException(String.format("Failed to set cursor position to %s: %s", pos, e.getMessage()), e);throw new BackendException("Failed to load backend: " + backendName, e);