Version 7.0.0¶
Major release: redesigned web editor, AI-powered modeling assistant, modular backend architecture, expanded metamodel styling, multi-diagram projects, and comprehensive security hardening.
Highlights¶
New Web Modeling Editor UI: Complete frontend rewrite with modern stack (Vite, Tailwind CSS, Radix UI, Redux Toolkit).
AI Modeling Assistant Enhanced: Major upgrade to the conversational AI assistant with 2 new diagram types, voice input, file conversion, code generation triggering, deterministic layout engine, and multi-step orchestration.
Backend Architecture Refactor: Monolithic backend decomposed into modular routers, middleware, and services.
Multi-Diagram Projects: First-class support for multiple diagrams of the same type within a project.
Security Hardening: CSP headers, encrypted OAuth sessions, request size limits, code injection prevention.
New Features¶
Redesigned Web Modeling Editor (BESSER-WEB-MODELING-EDITOR)
The web editor frontend has been completely rewritten with a modern tech stack, replacing the legacy Apollon-based webapp. This is not just a reskin – the entire application shell, navigation, project management, and user experience have been rebuilt from scratch with a focus on usability, accessibility, and performance.
Application shell and navigation:
Ground-up rewrite using Vite 7, Tailwind CSS 3, Radix UI, and Redux Toolkit.
Collapsible sidebar with diagram type navigation, content indicators (green dot for diagrams with content), and tooltip labels.
Mobile-responsive layout with hamburger menu and slide-in drawer for tablet/narrow windows (the old editor was unusable below 768px).
Dark/light theme toggle with CSS custom properties and consistent design tokens across the entire UI.
Command palette and keyboard shortcuts:
Command palette (
Ctrl+K/Cmd+K) with fuzzy search across all editors, navigation, and actions – power users can perform any action in 2-3 keystrokes.Keyboard shortcuts dialog (
?orCtrl+/) listing all shortcuts organized by category with platform-aware key labels (Cmd on Mac, Ctrl on Windows).
Multi-diagram project management:
Multi-diagram tabs: multiple diagrams per type with add/remove/rename (double-click), cross-diagram references, broken reference detection with warning indicators, and collapsible “Linked Diagrams” panel.
Redesigned Project Hub with multi-step flow (create, import, open from spreadsheet), inline form validation, drag-and-drop file import, and project metadata display (size, diagram count, date).
Template library with category browsing (20+ templates across Class, Agent, State Machine, Quantum Circuit), card-based selection, and conflict detection when loading into existing diagrams (“Replace” or “New tab”).
Project-level BUML export and JSON preview.
Cross-tab synchronization prevents data loss when the editor is open in multiple browser tabs.
Error handling and loading states:
Application-level and per-editor error boundaries – an unhandled error in one editor no longer crashes the whole app (the old editor showed a blank white screen).
Skeleton loading screens matching the final editor layout instead of blank screens or spinners during lazy loading.
Code generation progress overlay with animated 3-step indicator (“Parsing diagram…”, “Generating code…”, “Packaging output…”) instead of appearing to hang.
Offline connectivity banner with automatic reconnection notification.
Export and import:
Unified export dialog with two-column layout: multi-diagram export (select specific types, JSON or B-UML) and single-diagram export (SVG, PNG white, PNG transparent, JSON, B-UML).
Import from 6 sources: JSON files, Python/B-UML files, images via OpenAI, knowledge graphs via OpenAI, GitHub URLs, and spreadsheets/CSV.
GitHub B-UML import: paste a GitHub URL to fetch and convert a B-UML model directly.
User experience improvements:
Global confirm dialog replaces all native
window.confirm()calls with styled, accessible dialogs matching the design system.Systematic form validation framework with touch-based error display (errors shown on blur, not while typing).
Illustrated help guide with per-diagram-type instructions, screenshots, and best practices (Class, Object, State Machine, Agent, GUI, Quantum).
User feedback dialog with satisfaction rating, category selection, and free-text input.
About dialog with links to all BESSER repositories.
Storage quota monitoring and migration utilities for seamless upgrades.
Lazy loading throughout for optimal initial load performance.
AI Modeling Assistant integration:
Floating chat widget with WebSocket connection to the modeling agent.
Voice message support (audio recording in the browser).
File attachment support (up to 10MB).
Rate limiting (8 requests/min, 40/hour).
Streaming AI responses with typing indicator.
Quick action chips for contextual follow-up suggestions.
Connection status indicator (connected/connecting/disconnected).
Privacy disclaimer dialog.
Testing and analytics:
Playwright E2E tests covering class diagram interactions, navigation, project management, settings, and theme switching.
Vitest unit tests for components and hooks.
Privacy-respecting PostHog analytics (lazy-loaded, DNT respected, opt-out by default) with cookie consent banner.
Sentry error tracking.
Significantly improved (existed before, enhanced in the new UI):
GitHub OAuth integration with repository creation and Render deployment – redesigned deployment flow with commit messages, repo privacy settings, star/unstar from the UI, commit history browsing, and version restoration.
GUI No-Code Editor (GrapesJS) – enhanced with new dashboard widgets (BarChart, LineChart, PieChart, RadarChart, RadialBarChart, Map, MetricCard, Table via Recharts), class diagram data binding, series manager for chart configuration, multi-page support, and agent component embedding.
Quantum Circuit Editor – improved gate palette with extensive gate categories (half/quarter/eighth turns, rotation, logic, swap, arithmetic, QFT, function, display, input, probes, sampling, scalar gates), nested circuit modal for composable sub-circuits, undo/redo, copy/paste, gate resize, and initial qubit state cycling.
Code generation UI for 13 generators – new per-generator configuration dialogs (Django project/app name, SQL/SQLAlchemy dialect selection, Agent language/personalization modes, Qiskit backend/shots, WebApp pre-generation checklist).
Agent configuration panels with technology settings, LLM provider/model selection, interface styling, voice configuration, avatar configuration, personalization mapping, and rule-based personalization engine with JSON export.
AI Modeling Assistant – Major Upgrade (modeling-agent)
The modeling agent (previously supporting Class, Object, State Machine, and Agent diagrams with basic creation in v1.0.0) has been significantly enhanced with new diagram types, new capabilities, and a complete architecture overhaul. See the modeling-agent v2.0.0 release notes for full details.
New diagram types:
GUI No-Code diagram support (metric cards, action buttons, charts, navigation, sample data generation).
Quantum Circuit diagram support (gate symbols, qubit management, circuit operations).
New capabilities:
Voice input via OpenAI Whisper speech-to-text.
File conversion: PlantUML, RDF/OWL/TTL knowledge graphs, images, and PDFs converted to diagram specifications.
Code generation triggering for 15+ BESSER generators (Django, Python, Java, SQL, WebApp, Qiskit, etc.) plus export and deploy.
Multi-step orchestration decomposes compound requests (e.g., “create a library system and generate Django code”) into sequential operations across diagram types.
Deterministic layout engine with collision avoidance replaces random positioning; LLM produces only semantic content.
Conversation memory with sliding-window and optional LLM summarization.
Context-aware suggestions after each action based on current project state.
Confirmation flows before replacing existing diagrams.
“Describe my diagram” intent for explaining the current canvas.
Token and cost tracking per session.
Domain pattern library with pre-built templates for common system types.
Enhanced existing capabilities:
Model modification expanded from Class-only to all 6 diagram types.
Intent recognition overhauled with pattern-based cross-validation (3 new intents: generation, describe model, workflow).
Pydantic-enforced structured outputs for all diagram types eliminate manual JSON parsing.
Architecture restructured from flat files into modular
src/package with clear separation of concerns.Built on BESSER Agentic Framework (BAF) v4.3.1 with OpenAI
gpt-4.1-mini.
Modular Backend Architecture
- Decomposed monolithic backend.py (~1900 lines) into focused modules (~270 lines remaining).
- routers/generation_router.py: All code generation endpoints.
- routers/conversion_router.py: BUML import/export, CSV reverse engineering, image-to-model.
- routers/validation_router.py: Diagram validation endpoints.
- routers/deployment_router.py: GitHub deployment and Docker integration.
- routers/error_handler.py: Centralized @handle_endpoint_errors decorator mapping custom exceptions to HTTP status codes.
- middleware/request_logging.py: Structured request logging with UUID-based X-Request-ID headers, performance timing, and slow-request warnings (>1s).
- services/cleanup.py: Background task removing temp directories older than 24 hours, runs hourly.
- services/exceptions.py: Custom exception hierarchy (ConversionError, ValidationError, GenerationError, DeploymentError).
- models/responses.py: Typed Pydantic response models replacing ad-hoc dict responses.
- constants/constants.py: Centralized API constants, generator defaults, CORS origins, relationship type mappings.
Multi-Diagram Project Support
- ProjectInput.diagrams supports multiple diagrams per type (Dict[str, List[DiagramInput]]).
- currentDiagramIndices tracks the active diagram per type.
- Per-diagram references for stable cross-diagram linking by ID (resilient to deletions and reordering).
- Backward compatible: old single-diagram format auto-converts via Pydantic model validator.
Security Enhancements
- SecurityHeadersMiddleware: Adds X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Content-Security-Policy, Strict-Transport-Security, and Permissions-Policy.
- RequestSizeLimitMiddleware: Rejects requests >50MB.
- CORS hardened from wildcard * to configurable whitelist via CORS_ORIGINS environment variable.
- Encrypted file-based OAuth session store using Fernet encryption with TTL expiration.
- _escape_python_string() utility prevents code injection in generated Python code that may be exec()’d.
- safe_var_name() / safe_class_name() ensure generated identifiers are safe.
- Fixed SQL DDL generation vulnerability (double f-string interpolation).
- Removed Docker socket mount from docker-compose.yml.
New Generators Registered
- RDF (RDFGenerator), REST API (RESTAPIGenerator), React (ReactGenerator), Flutter (FlutterGenerator), Terraform (TerraformGenerator).
- Conditionally registered: PyTorch (PytorchGenerator), TensorFlow (TFGenerator) – only when their dependencies are installed.
- Added ClassAggregation to RELATIONSHIP_TYPES.
Expanded GUI Metamodel Styling
- Size: 18 new properties – typography (font_weight, font_family, font_style, text_decoration, text_transform, letter_spacing, word_spacing, white_space, word_break), min/max dimensions (min_width, max_width, min_height, max_height), per-side padding and margin.
- Position: 11 new properties – display, overflow, overflow_x/y, visibility, cursor, box_sizing, transform, transition, animation, filter.
- Color: 14 new properties – border details (border_radius, border_width, border_style, per-side borders), shadows (box_shadow, text_shadow), background extras (background_image, background_size, background_position, background_repeat).
- Layout: 6 new flex-item properties – flex, flex_grow, flex_shrink, flex_basis, order, align_self.
- ViewElement constructor now accepts component_id, tag_name, css_classes, custom_attributes, display_order as keyword arguments.
- GUIModel gains style_entries parameter for storing CSS style data.
Structural Metamodel Validation
- DomainModel.validate() now detects attribute shadowing in inheritance hierarchies.
- NamedElement.name setter rejects None and whitespace-only strings, warns on Python keywords.
CI/CD Pipelines
- .github/workflows/ci.yml: Backend tests on Python 3.10/3.11/3.12, Ruff linting, and frontend lint+build.
- .github/workflows/security.yml: Weekly CodeQL security scanning.
- .github/dependabot.yml: Automated dependency updates (weekly for pip, monthly for GitHub Actions).
Comprehensive Test Suite (+5,635 lines)
- test_builders.py (1,317 lines): All BUML code builders.
- test_converter_roundtrip.py (1,277 lines): JSON-to-BUML-to-JSON round-trip tests.
- test_api_integration.py (1,082 lines): Backend API integration tests.
- test_parsers.py (559 lines): Attribute, method, multiplicity, OCL, and text parsers.
- New generator tests: BAF, JSON Object, Qiskit, React, Terraform, WebApp.
- Centralized test fixtures in tests/conftest.py and tests/generators/conftest.py.
Bug Fixes¶
Fixed
Processor.x86enum value from"x84"to"x86".Fixed
Protocol.udpenum value from"UPD"to"UDP".Fixed
LayoutType.SRACKtypo toLayoutType.STACK.Fixed
Transition.__repr__crash wheneventisNone.Fixed
Object.__getattr__recursive call during initialization.Fixed
DataValuecrash whennameis empty string (generates fallback name).Fixed
LLMIntentClassifierConfiguration.parametersmutable default argument ({}toNone).Fixed
venv/Script/activatetypo tovenv/Scripts/activatein documentation.Fixed Java template:
protectedchanged toprivatefor class attributes.Fixed Java template:
java.time.UUIDchanged tojava.util.UUID.Fixed Pydantic generator regex:
r"\\W"(escaped backslash) changed tor"\W"(non-word character class).Fixed Java generator: operator precedence bug in temp directory detection (
if 'tmp' or 'AppData' in pathalways evaluated toTrue).Fixed
utils.py: type hint syntax frommodel_path= strtomodel_path: str.
Improvements¶
Code Builders
- All BUML code builders now use _escape_python_string() for safe string interpolation.
- safe_var_name() applied to state and intent names for generated variable references.
- gui_model_builder.py rewritten to support expanded styling properties and component metadata.
- project_builder.py rewritten for multi-diagram project format.
- agent_model_builder.py accepts model_var_name parameter for customizable output.
- Deterministic output: sorted set serialization in domain model builder.
Converters
- All JSON-to-BUML and BUML-to-JSON converters updated for multi-diagram project support.
- New state_machine_object_to_json() function for direct StateMachine object conversion.
- GUI converters support all expanded CSS properties.
- Parser error handling improved with descriptive ValueError exceptions.
- All print() statements replaced with structured logging calls.
Generators
- Django generator: Jinja2 environment consolidated (eliminated 8 duplicate Environment instances).
- Pydantic generator: generates Optional[...] types when multiplicity.min == 0.
- React generator: supports all expanded CSS properties from the metamodel.
- Flutter generator: improved DateTimeType and DateType type mapping, print() replaced with logging.
Deployment Services
- GitHub OAuth uses encrypted session store instead of in-memory state.
- Docker deployment methods accept directory parameter instead of using os.chdir().
- Feedback service migrated from dict() to model_dump() (Pydantic v2).
Documentation
- New DEVELOPMENT_SETUP.md with complete setup guide.
- New docs/source/web_editor_backend.rst for backend API documentation.
- Updated documentation for generators, metamodel types, and contributing guide.
Breaking Changes¶
Warning
This release contains several breaking changes. Review carefully before upgrading.
NamedElement.name validation: Now raises
ValueErrorforNone, empty, and whitespace-only names. Code passing these values to anyNamedElementsubclass constructor will break.LayoutType.SRACK renamed:
LayoutType.SRACKis nowLayoutType.STACK. Code referencing the old name will raiseAttributeError.GUI Style defaults changed to None:
Size,Position,Color, andLayoutclasses now default most properties toNoneinstead of concrete values (e.g.,Size.widthwas"auto", nowNone). Code relying on these defaults must be updated.ViewElement.display_order type: Changed from
inttofloat.ProjectInput.diagrams type: Changed from
Dict[str, DiagramInput]toDict[str, List[DiagramInput]]. A Pydantic model validator provides backward compatibility for API consumers, but code directly accessingdiagrams[key]as a singleDiagramInputwill break.CORS policy: Changed from wildcard
*to an explicit origin list. Unlisted origins will be rejected. Configure via theCORS_ORIGINSenvironment variable.Backend module structure: All endpoint functions moved from
backend.pyto router modules. Code importing directly frombackendwill break.Java generated code: Class attributes changed from
protectedtoprivate.z_index validation: Now accepts
Noneand negative integers (was non-negative only). This relaxes the constraint but changes the contract.