Features · GUI Creator

The BESSER GUI Creator.

Model, refine, and generate frontend GUIs—deterministically, from a platform-independent model.

No-Code GUI Editor

The Web Modeling Editor enables you to visually design and refine GUI models — no code required. Describe your interface in natural language, or use drag-and-drop to create screens, define navigation flows, and bind data to UI components—all within a platform-independent model ready for export and code generation.

  • Browser-based drag-and-drop modeling
  • Screens, view containers, and widgets
  • Navigation flows and data binding
  • Export to Python B-UML or generate code directly
  • Or describe your interface in natural language — the agentic interface builds the model for you
Learn more
GUI modeling editor
GUI modeling editor

From model to frontend code

From a single GUI model, BESSER generates a complete React frontend — navigation, pages, data-bound tables, forms, and metric cards — ready to run. The panel on the right shows the real React pages generated for a train ticket booking app.

  • Navigation and routing from the model's flow
  • Data-bound tables and forms per screen
  • Metric cards wired to backend entities
  • Deterministic, reproducible output
Learn more
frontend/src/pages/Home.tsx
import React from "react";
import { MetricCardBlock } from "../components/runtime/MetricCardBlock";

// Generated from HomeScreen model — hero + metric cards
const Home: React.FC = () => {
  return (
    <div style={{ fontFamily: "'Inter', system-ui, sans-serif",
                  minHeight: "100vh", background: "#f8fafc" }}>

      {/* Sticky nav — built from navigation flow in the GUI model */}
      <nav style={{ height: 64, padding: "0 32px", position: "sticky",
                    top: 0, zIndex: 50, display: "flex", background: "#fff",
                    borderBottom: "1px solid #e2e8f0", alignItems: "center",
                    justifyContent: "space-between" }}>
        <p style={{ fontSize: "1.25rem", fontWeight: 700, color: "#0f172a" }}>
          {"Multi-Country Train Ticket Booking"}
        </p>
        <div style={{ display: "flex", gap: 4 }}>
          {[
            { label: "Home",           href: "/home",           active: true  },
            { label: "Dashboard",      href: "/dashboard",      active: false },
            { label: "Booking Detail", href: "/booking-detail", active: false },
            { label: "Profile",        href: "/profile",        active: false },
          ].map(({ label, href, active }) => (
            <a key={href} href={href}
               style={{ padding: "8px 16px", fontWeight: active ? 600 : 500,
                        background: active ? "#eff6ff" : "transparent",
                        color: active ? "#2563eb" : "#64748b",
                        borderRadius: 8, textDecoration: "none" }}>
              {label}
            </a>
          ))}
        </div>
      </nav>

      {/* Hero — generated from HeroSection widget */}
      <section style={{ padding: "64px 48px", margin: 24, textAlign: "center",
                        background: "linear-gradient(135deg, #1e3a5f, #2563eb)",
                        color: "#fff", borderRadius: 16 }}>
        <h1 style={{ fontSize: "2.25rem", fontWeight: 800, margin: "0 0 16px" }}>
          {"Book Your Train Tickets Across Europe Effortlessly"}
        </h1>
        <p style={{ maxWidth: 600, margin: "0 auto 28px", opacity: 0.9 }}>
          {"Find and book train journeys between major European cities."}
        </p>
        <button style={{ padding: "12px 28px", fontWeight: 600, cursor: "pointer",
                         background: "#fff", color: "#2563eb",
                         borderRadius: 10, border: "none" }}>
          {"Start Searching"}
        </button>
      </section>

      {/* Metric cards — data-bound to Booking & Route entities */}
      <main style={{ padding: "24px 16px", maxWidth: 1200, margin: "0 auto" }}>
        <section style={{ margin: "12px 24px", display: "grid",
                          gap: 16, gridTemplateColumns: "repeat(4, 1fr)" }}>
          <MetricCardBlock metric={{ metricTitle: "Available Routes",
            format: "number", showTrend: true, value: 0, trend: 12 }} />
          <MetricCardBlock metric={{ metricTitle: "Train Types",
            format: "number", showTrend: true, value: 0, trend: 5  }} />
          <MetricCardBlock metric={{ metricTitle: "Countries Covered",
            format: "number", showTrend: true, value: 0, trend: 2  }} />
          <MetricCardBlock metric={{ metricTitle: "Daily Bookings",
            format: "number", showTrend: true, value: 0, trend: 18 }} />
        </section>
      </main>
    </div>
  );
};

export default Home;
More capabilities

And everything else you need.

Free & open source

Part of BESSER ecosystem.

Learn more
Walkthrough

See the GUI Creator in action.

Model in the browser, then generate a frontend GUI—no code required.

BESSER GUI Creator — walkthrough

IFML-like metamodel

A dedicated metamodel that captures UI screens, interactions, and navigation flows independently of implementation technology.

  • UI screens and composition
  • User interactions and events
  • Navigation flows
  • Data binding to entities
  • Platform-independent design
Read the docs

Richer GUI layers

Capture both structural and visual aspects including widgets, layout, and styling.

  • Widgets and actions
  • Layout and styling
  • Data binding and navigation
Read the docs

Agentic interface

Skip the editor entirely — describe your application in natural language and BESSER's agentic interface will generate the GUI model, wire up the data bindings, and produce the full application for you.

  • Natural-language GUI generation
  • Automatic data binding and navigation
  • Same deterministic code output
Read the docs

Mock-ups to models

Convert wireframes and mock-ups into structured GUI models.

  • Hand-drawn and digital support
  • Structured GUI output
Read the docs

HTML/CSS reverse engineering

Extract structure, layout, and styling from existing web pages.

  • Recover UI structure
  • Platform-independent representation
Read the docs

LLM-driven enhancement

Apply HCI-aware improvements such as usability and findability enhancements at the model level.

  • Model-level refactoring
  • HCI improvements preserved
Read the docs

Human-in-the-loop refinement

Synchronize models with SVG or Figma for human inspection and refinement.

  • SVG and Figma sync
  • Round-trip editing
Read the docs