Skip to content

Add TUI, Bridge Types, matchers, and Avro/gRPC integration#187

Open
oyvindberg wants to merge 1 commit intomainfrom
bridge-types-and-matchers
Open

Add TUI, Bridge Types, matchers, and Avro/gRPC integration#187
oyvindberg wants to merge 1 commit intomainfrom
bridge-types-and-matchers

Conversation

@oyvindberg
Copy link
Collaborator

@oyvindberg oyvindberg commented Feb 1, 2026

Summary

Major infrastructure improvements: interactive TUI (draft), Bridge domain types, enhanced matchers, and unified Avro/gRPC integration.


Interactive TUI (Draft)

Terminal UI for configuring typr.yaml with mouse support and animations.

tui-react - React-like abstraction:

  • EventRegistry: Tracks click/hover areas during render
  • StateStore: Persists state across renders (like useState)
  • RenderContext: Provides hooks and event registration
  • Elements: Text, Button, Box, Column, Row, ListItem, ForEach, When

Screens:

  • Splash screen with brand purple pulsating animation
  • Main menu with source/output/type management
  • Schema browser for exploring database structure
  • Source/Output/Type wizards and editors
  • Sliding navigation with animations

Domain Type Builder:

  • 6-step wizard: Select suggestion → Name → Fields → Projections → Align → Review
  • Suggests composite types by analyzing tables across all connected sources

Bridge Types

Domain types that unify data models across multiple database sources:

  • Primary source with aligned sources for cross-database compatibility
  • Code generation for Scala, Java, and Kotlin
  • CLI typr check command for validation
  • TypePolicyValidator, SmartDefaults, FlowValidator

Matchers (renamed from selectors)

  • Negation support with exclude patterns (!pattern)
  • Split model matchers (schema properties) vs api matchers (parameters)
  • JSON Schema for typr.yaml with IDE validation
  • Discriminator inference for oneOf unions

Avro/gRPC Integration

  • Wire codegen into typr generate command
  • Boundaries system (renamed from sources)
  • Cats/fs2-kafka framework:
    • Publishers use KafkaProducer[IO, K, V]
    • Listeners use ConsumerRecord and Headers
    • gRPC service traits with IO[Response] methods
  • Effect types at output level with computed types

Other Changes

  • Bump tui-scala to 0.0.8
  • Add Bit and Varbit types to foundations-jdbc
  • Regenerate all testers

Test plan

  • Run bleep test
  • Test TUI with bleep run typr -- tui

🤖 Generated with Claude Code

@oyvindberg oyvindberg force-pushed the bridge-types-and-matchers branch from 2e73195 to 5eb31af Compare February 1, 2026 23:05
@oyvindberg oyvindberg changed the title Add Bridge Types, JSON Schema config, matchers, and Avro/gRPC integration Add TUI, Bridge Types, matchers, and Avro/gRPC integration Feb 1, 2026
Interactive TUI (draft):
- tui-react: React-like abstraction with EventRegistry, StateStore, RenderContext
- Screens: Splash, MainMenu, SchemaBrowser, SpecBrowser, Source/Output/Type editors
- Domain Type Builder: 6-step wizard for cross-database composite types
- Form components with mouse support, hover states, click handlers
- Sliding navigation with animations

Bridge Types:
- Domain types unifying data models across multiple database sources
- Primary source with aligned sources for cross-database compatibility
- Code generation for Scala, Java, and Kotlin
- CLI `typr check` command for validation

Matchers (renamed from selectors):
- Negation support with exclude patterns
- Split model (schema properties) vs api (parameters) matchers
- JSON Schema for typr.yaml with IDE validation

Avro/gRPC Integration:
- Wire codegen into `typr generate` command
- Boundaries system (renamed from sources)
- Cats/fs2-kafka framework with IO-based publishers/listeners
- Effect types at output level with computed types

Other:
- Bump tui-scala to 0.0.8
- Regenerate all testers

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@oyvindberg oyvindberg force-pushed the bridge-types-and-matchers branch 2 times, most recently from b98efe7 to bb437ec Compare February 1, 2026 23:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant