FAQ
Do I need dependency injection or Generic Host?
No. The normal public path is library-first.
Use:
await TesseraApplication.RunAsync(new MyApp())- or
TesseraApplication.CreateBuilder().UseApp<TApp>()...
Should I use RunAsync(...) or CreateBuilder()?
Use:
RunAsync(...)- for the smallest possible startup
CreateBuilder()- when you need runtime configuration, theme selection, screen options, or a built application instance
Most real apps will prefer the builder.
Do I need Tessera.Core namespaces to build a normal app?
No. Keep normal apps in:
TesseraTessera.ControlsTessera.LayoutTessera.Styles
Tessera.Core ships in the same package but is an advanced runtime lane, not the default onboarding path.
What is the fastest way to learn Tessera?
How do I handle app state?
Use TesseraApp:
Initialize()for first effectUpdate(Message)for state transitions and effectsBuild(ScreenContext)for rendering
For small demos, direct event mutation is fine. For real apps, prefer control events that Post(...) domain messages back into Update(...).
How do I theme the app?
Set theme at runtime:
runtime.Theme = TesseraThemes.Catppuccin(CatppuccinVariant.Mocha);
runtime.ThemeOverrides = myOverrides;Then use theme-system for the token and override model.
What terminals are recommended?
Start with:
- Ghostty
- iTerm2
- Windows Terminal
- macOS Terminal
For caveats and capability details, use terminal-font-capability-matrix.
Can I build custom controls?
Yes. Use Tessera.Controls.Control for the normal custom widget path. That is the supported custom control contract for interactive widgets.
See custom-components.
Where do I find the full control list?
Use:
- controls-overview for grouped discovery
- public-api-inventory for the exact public list
Are images part of V1?
No. The current design contract treats inline image rendering as V1.1 scope, not V1 scope.
See spec for the product boundary.
What examples should I run first?
Starter ladder:
HelloWorldCounterFormWorkspaceApp
Then flagship evaluation:
GitConsoleOpsWatchDataWorkbench