List of tables added by the BWEB component

BWEB Architecture
Overview
"You know 4D? You know BWEB."
BWEB is a 4D component that allows you to build complete web applications (public websites, back-offices, client portals) entirely from a 4D database, without writing HTML/CSS/JS manually.
Pages are stored as structured data in 4D tables. The framework reads this data, generates HTML + Tailwind CSS on the fly, and serves it to the browser.
The 4 Pillars
| Pillar | Description |
|---|---|
| 4D Component | Tables, methods, classes. Can be added to any existing 4D project. |
| Tailwind CSS | Utility-first CSS. Modern and responsive design out of the box. |
| WYSIWYG Editor | Drag and drop. Instant preview. The Dev Panel. |
| Native ORDA | Direct connection to DataClasses. No REST, no intermediate API. |
Technical Architecture
The 4D server generates the complete HTML. The browser receives a ready-to-use page. Interactions go through POST + WebSocket.
| Browser (Client) | 4D Server | |||
|---|---|---|---|---|
| HTML + Tailwind CSS | WebSocket HTTP POST | BSPK_WEB_ON_CONNECTION (main router) | ||
| bweb.js (JS framework) | Tables: BSPK_WEB_DOMAIN, BSPK_WEB_DOMAIN_MENU, BSPK_WEB_CONTENT | |||
| Bootstrap Icons | Engine: WebFormController, Tailwind CSS Generator, BSPK_Translate (i18n) | |||
Server-side vs Client-side Rendering
BWEB chose server-side rendering (SSR) rather than client-side rendering (React/Vue). Why?
| Feature | React | BWEB |
|---|---|---|
| Required Skills | 4D + React + TypeScript | 4D only |
| License | 4D REST required | 4D Web sufficient |
| Security | Client decides | Server decides |
| Protected Blocks | Hidden in CSS | Absent from HTML |
| State | Client (Redux/Zustand) | Server (process variables) |
| Real-time | Code it yourself | Built-in WebSocket |
| Frontend Dependencies | node_modules (200KB+) | None |
"Not authorized to see a button? The button HTML does not exist."
Table Structure
| Level | Table | Description |
|---|---|---|
| 1 | BSPK_WEB_DOMAIN | 1 domain = 1 website |
| 2 | BSPK_WEB_DOMAIN_MENU | N pages and components per domain |
| 3 | BSPK_WEB_CONTENT | N blocks per page (UI tree via parentUuid) |
Support Tables
| Table | Role |
|---|---|
| BSPK_WEB_DOMAIN_MENU_PARAMETER | Dynamic URLs ({supplierId}...) |
| BSPK_WEB_REDIRECT | 301/302 redirections |
| BSPK_WEB_DOMAIN_LANG | Languages per domain |
| BSPK_WEB_LIST / LIST_ITEM | Dropdown lists |
| BSPK_WEB_COOKIE_CONSENT | GDPR consent |
| BSPK_USER / GROUP / RIGHT | Users and permissions |
| BSPK_FILE | Files and media |
| BSPK_HISTORY | Audit and history |
Request Lifecycle
| Step | Action | Detail |
|---|---|---|
| 1 | HTTPS enforced | If cert.pem is present, automatic HTTP to HTTPS redirection |
| 2 | License + Session | Component and user session verification |
| 3 | URL Resolution | Domain, then Page, then Dynamic Parameters |
| 4 | Host database hook | BSPH_WEB_ON_CONNECTION can intercept/redirect |
| 5 | Security check | Access rights, validation, POST filtering |
| 6 | Rendering | Block loading, HTML + Tailwind generation, sent to browser |
| 7 | WebSocket | Real-time connection established for interactions |
Business Advantages
- No REST license: POST/WebSocket = standard 4D web server. 300K users = massive cost difference.
- Zero frontend dependencies: No React, Angular, Vue. No 200KB+ bundle. No breaking changes.
- Server Entity: Single source of truth. No client copy. STAMP natively managed by ORDA.
- Node.js = server tool: Tailwind CLI, Puppeteer (PDF). The browser only receives HTML + Tailwind + vanilla JS.

