@diagrammo/dgmo 0.8.20 → 0.8.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -1
- package/README.md +1 -0
- package/dist/cli.cjs +142 -90
- package/dist/editor.cjs +30 -4
- package/dist/editor.cjs.map +1 -1
- package/dist/editor.js +30 -4
- package/dist/editor.js.map +1 -1
- package/dist/highlight.cjs +25 -3
- package/dist/highlight.cjs.map +1 -1
- package/dist/highlight.js +25 -3
- package/dist/highlight.js.map +1 -1
- package/dist/index.cjs +21201 -12886
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +646 -89
- package/dist/index.d.ts +646 -89
- package/dist/index.js +21178 -12889
- package/dist/index.js.map +1 -1
- package/docs/guide/chart-mindmap.md +198 -0
- package/docs/guide/chart-sequence.md +23 -1
- package/docs/guide/chart-sitemap.md +18 -1
- package/docs/guide/chart-tech-radar.md +219 -0
- package/docs/guide/chart-wireframe.md +100 -0
- package/docs/guide/index.md +8 -0
- package/docs/guide/registry.json +1 -0
- package/docs/language-reference.md +249 -4
- package/gallery/fixtures/boxes-and-lines.dgmo +10 -3
- package/gallery/fixtures/c4-full.dgmo +2 -2
- package/gallery/fixtures/cycle/ooda-loop.dgmo +25 -0
- package/gallery/fixtures/cycle/pdca-circle-nodes.dgmo +12 -0
- package/gallery/fixtures/cycle/pdca-minimal.dgmo +6 -0
- package/gallery/fixtures/cycle/sprint-cycle-span.dgmo +17 -0
- package/gallery/fixtures/gantt-full.dgmo +2 -2
- package/gallery/fixtures/gantt.dgmo +2 -2
- package/gallery/fixtures/infra-full.dgmo +2 -2
- package/gallery/fixtures/infra.dgmo +1 -1
- package/gallery/fixtures/sequence-tags-protocols.dgmo +2 -2
- package/gallery/fixtures/sequence-tags.dgmo +2 -2
- package/gallery/fixtures/tech-radar-dense.dgmo +77 -0
- package/gallery/fixtures/tech-radar.dgmo +36 -0
- package/gallery/fixtures/timeline.dgmo +1 -1
- package/package.json +1 -1
- package/src/boxes-and-lines/collapse.ts +21 -3
- package/src/boxes-and-lines/layout.ts +360 -42
- package/src/boxes-and-lines/parser.ts +94 -11
- package/src/boxes-and-lines/renderer.ts +371 -114
- package/src/boxes-and-lines/types.ts +2 -1
- package/src/c4/layout.ts +8 -8
- package/src/c4/parser.ts +35 -2
- package/src/c4/renderer.ts +19 -3
- package/src/c4/types.ts +1 -0
- package/src/chart.ts +14 -7
- package/src/completion.ts +253 -0
- package/src/cycle/layout.ts +732 -0
- package/src/cycle/parser.ts +352 -0
- package/src/cycle/renderer.ts +539 -0
- package/src/cycle/types.ts +77 -0
- package/src/d3.ts +240 -40
- package/src/dgmo-router.ts +15 -0
- package/src/echarts.ts +7 -4
- package/src/editor/dgmo.grammar +5 -1
- package/src/editor/dgmo.grammar.js +1 -1
- package/src/editor/keywords.ts +26 -0
- package/src/gantt/parser.ts +2 -8
- package/src/graph/flowchart-parser.ts +15 -21
- package/src/graph/layout.ts +73 -9
- package/src/graph/state-collapse.ts +78 -0
- package/src/graph/state-parser.ts +5 -10
- package/src/graph/state-renderer.ts +139 -34
- package/src/index.ts +78 -0
- package/src/infra/layout.ts +218 -74
- package/src/infra/parser.ts +30 -6
- package/src/infra/renderer.ts +14 -8
- package/src/infra/types.ts +10 -3
- package/src/journey-map/layout.ts +386 -0
- package/src/journey-map/parser.ts +540 -0
- package/src/journey-map/renderer.ts +1456 -0
- package/src/journey-map/types.ts +47 -0
- package/src/kanban/parser.ts +3 -10
- package/src/kanban/renderer.ts +325 -63
- package/src/mindmap/collapse.ts +88 -0
- package/src/mindmap/layout.ts +605 -0
- package/src/mindmap/parser.ts +373 -0
- package/src/mindmap/renderer.ts +544 -0
- package/src/mindmap/text-wrap.ts +217 -0
- package/src/mindmap/types.ts +55 -0
- package/src/org/parser.ts +2 -6
- package/src/render.ts +18 -21
- package/src/sequence/renderer.ts +273 -56
- package/src/sharing.ts +3 -0
- package/src/sitemap/layout.ts +56 -18
- package/src/sitemap/parser.ts +26 -17
- package/src/sitemap/renderer.ts +34 -0
- package/src/sitemap/types.ts +1 -0
- package/src/tech-radar/index.ts +14 -0
- package/src/tech-radar/interactive.ts +1058 -0
- package/src/tech-radar/layout.ts +190 -0
- package/src/tech-radar/parser.ts +385 -0
- package/src/tech-radar/renderer.ts +1159 -0
- package/src/tech-radar/shared.ts +187 -0
- package/src/tech-radar/types.ts +81 -0
- package/src/utils/description-helpers.ts +33 -0
- package/src/utils/export-container.ts +3 -2
- package/src/utils/legend-d3.ts +1 -0
- package/src/utils/legend-layout.ts +5 -3
- package/src/utils/parsing.ts +48 -7
- package/src/utils/tag-groups.ts +46 -60
- package/src/wireframe/layout.ts +460 -0
- package/src/wireframe/parser.ts +956 -0
- package/src/wireframe/renderer.ts +1293 -0
- package/src/wireframe/types.ts +110 -0
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
14. [Timeline Diagrams](#14-timeline-diagrams)
|
|
21
21
|
15. [Data Charts](#15-data-charts)
|
|
22
22
|
16. [Visualizations](#16-visualizations)
|
|
23
|
-
17. [
|
|
23
|
+
17. [Tech Radar Diagrams](#17-tech-radar-diagrams)
|
|
24
|
+
18. [Wireframe Diagrams](#18-wireframe-diagrams)
|
|
25
|
+
19. [Colon Usage Summary](#19-colon-usage-summary)
|
|
24
26
|
|
|
25
27
|
---
|
|
26
28
|
|
|
@@ -608,7 +610,28 @@ deployment
|
|
|
608
610
|
container Web App // reference existing container
|
|
609
611
|
```
|
|
610
612
|
|
|
611
|
-
### 7.7
|
|
613
|
+
### 7.7 Element Descriptions
|
|
614
|
+
|
|
615
|
+
```
|
|
616
|
+
// Indented metadata form (colon required)
|
|
617
|
+
Web App is a container
|
|
618
|
+
description: SPA built with React
|
|
619
|
+
description: Supports SSR and client-side routing
|
|
620
|
+
|
|
621
|
+
// Keyword form (colon optional)
|
|
622
|
+
API is a container
|
|
623
|
+
description Handles all REST endpoints
|
|
624
|
+
|
|
625
|
+
// Pipe metadata form
|
|
626
|
+
Database is a container | description: PostgreSQL with read replicas
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
- Multiple `description` lines accumulate into a multi-line description
|
|
630
|
+
- `description` is extracted as a dedicated field, not stored in general metadata
|
|
631
|
+
- Supports inline markdown: `**bold**`, `*italic*`, `` `code` ``, `[links](url)`
|
|
632
|
+
- `- bullet text` renders as `• bullet text`
|
|
633
|
+
|
|
634
|
+
### 7.8 Options
|
|
612
635
|
|
|
613
636
|
- `direction-tb` (boolean; default is LR)
|
|
614
637
|
|
|
@@ -812,7 +835,28 @@ All permutations supported: node→group, group→node, group→group. Brackets
|
|
|
812
835
|
Pricing | Auth: Public
|
|
813
836
|
```
|
|
814
837
|
|
|
815
|
-
### 11.5
|
|
838
|
+
### 11.5 Node Descriptions
|
|
839
|
+
|
|
840
|
+
```
|
|
841
|
+
// Keyword form (colon optional)
|
|
842
|
+
About
|
|
843
|
+
description Company history and team bios
|
|
844
|
+
|
|
845
|
+
// Pipe metadata form
|
|
846
|
+
Pricing | description: Compare plans and features
|
|
847
|
+
|
|
848
|
+
// Multi-line
|
|
849
|
+
Blog
|
|
850
|
+
description: Engineering and product updates
|
|
851
|
+
description: Published weekly
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
- `description` keyword required (bare prose lines are not auto-detected as descriptions)
|
|
855
|
+
- Multiple `description` lines accumulate into a multi-line description
|
|
856
|
+
- Supports inline markdown: `**bold**`, `*italic*`, `` `code` ``, `[links](url)`
|
|
857
|
+
- `- bullet text` renders as `• bullet text`
|
|
858
|
+
|
|
859
|
+
### 11.6 Options
|
|
816
860
|
|
|
817
861
|
- `direction-tb` (boolean; default is LR)
|
|
818
862
|
|
|
@@ -1326,7 +1370,207 @@ Navigator 0.85 0.8
|
|
|
1326
1370
|
|
|
1327
1371
|
---
|
|
1328
1372
|
|
|
1329
|
-
## 17.
|
|
1373
|
+
## 17. Tech Radar Diagrams
|
|
1374
|
+
|
|
1375
|
+
```
|
|
1376
|
+
tech-radar Title
|
|
1377
|
+
|
|
1378
|
+
rings
|
|
1379
|
+
Adopt
|
|
1380
|
+
Trial
|
|
1381
|
+
Assess
|
|
1382
|
+
Hold
|
|
1383
|
+
|
|
1384
|
+
Techniques | quadrant: top-right
|
|
1385
|
+
Continuous Deployment | ring: Adopt, trend: stable
|
|
1386
|
+
Fully adopted across all services.
|
|
1387
|
+
Micro Frontends | ring: Trial, trend: up
|
|
1388
|
+
|
|
1389
|
+
Tools | quadrant: top-left
|
|
1390
|
+
Vite | ring: Adopt, trend: up
|
|
1391
|
+
Webpack | ring: Hold, trend: down
|
|
1392
|
+
```
|
|
1393
|
+
|
|
1394
|
+
### Rings
|
|
1395
|
+
|
|
1396
|
+
Declared in a `rings` block, one per indented line. Order: innermost (first) to outermost (last). Any names, any count.
|
|
1397
|
+
|
|
1398
|
+
Aliases supported: `Adopt alias a` — then blips can use `ring: a`.
|
|
1399
|
+
|
|
1400
|
+
### Quadrants
|
|
1401
|
+
|
|
1402
|
+
Exactly 4 required. Each is a top-level header with pipe metadata:
|
|
1403
|
+
|
|
1404
|
+
```
|
|
1405
|
+
Name | quadrant: position
|
|
1406
|
+
```
|
|
1407
|
+
|
|
1408
|
+
**Positions:** `top-left`, `top-right`, `bottom-left`, `bottom-right` — each used exactly once.
|
|
1409
|
+
|
|
1410
|
+
Optional color override: `Tools | quadrant: top-left, color: purple`
|
|
1411
|
+
|
|
1412
|
+
Default colors: top-left=blue, top-right=green, bottom-left=red, bottom-right=orange.
|
|
1413
|
+
|
|
1414
|
+
### Blips
|
|
1415
|
+
|
|
1416
|
+
Indented under their quadrant. Require `ring` metadata (case-insensitive match). Optional `trend`:
|
|
1417
|
+
|
|
1418
|
+
```
|
|
1419
|
+
Item Name | ring: Adopt, trend: stable
|
|
1420
|
+
```
|
|
1421
|
+
|
|
1422
|
+
**Trends:** `new` (double circle), `up` (inward crescent), `down` (outward crescent), `stable` (plain circle). Omitting renders plain circle.
|
|
1423
|
+
|
|
1424
|
+
### Descriptions
|
|
1425
|
+
|
|
1426
|
+
Further-indented lines below a blip. Supports inline markdown (bold, italic, code, links).
|
|
1427
|
+
|
|
1428
|
+
```
|
|
1429
|
+
Rust | ring: Assess, trend: new
|
|
1430
|
+
Evaluating for **performance-critical** services.
|
|
1431
|
+
```
|
|
1432
|
+
|
|
1433
|
+
### Numbering
|
|
1434
|
+
|
|
1435
|
+
Blips receive sequential global numbers. Order: quadrants clockwise (top-left → top-right → bottom-right → bottom-left), then by ring (innermost first), then declaration order.
|
|
1436
|
+
|
|
1437
|
+
---
|
|
1438
|
+
|
|
1439
|
+
## 18. Wireframe Diagrams
|
|
1440
|
+
|
|
1441
|
+
Wireframe diagrams use **visual-mnemonic syntax** where bracket characters communicate element type.
|
|
1442
|
+
|
|
1443
|
+
### Declaration
|
|
1444
|
+
|
|
1445
|
+
```
|
|
1446
|
+
wireframe Page Title
|
|
1447
|
+
```
|
|
1448
|
+
|
|
1449
|
+
### Form Factor
|
|
1450
|
+
|
|
1451
|
+
```
|
|
1452
|
+
mobile
|
|
1453
|
+
```
|
|
1454
|
+
|
|
1455
|
+
Switches to narrow vertical layout (375px). Desktop (1200px, horizontal regions) is the default.
|
|
1456
|
+
|
|
1457
|
+
### Visual-Mnemonic Elements
|
|
1458
|
+
|
|
1459
|
+
| Syntax | Element | Example |
|
|
1460
|
+
|--------|---------|---------|
|
|
1461
|
+
| `[text]` (leaf) | Text input | `[Email address]` |
|
|
1462
|
+
| `[Name]` (with children) | Group/region | `[Sidebar]` + indented children |
|
|
1463
|
+
| `(Label)` | Button | `(Submit)` |
|
|
1464
|
+
| `{A \| B \| C}` | Dropdown/select | `{Small \| Medium \| Large}` |
|
|
1465
|
+
| `<x>` / `< >` | Checkbox | `<x> Remember me` |
|
|
1466
|
+
| `(*) Label` / `( ) Label` | Radio button | `(*) Option A` |
|
|
1467
|
+
| `# Text` / `## Text` | Heading | `# Sign In` |
|
|
1468
|
+
| `---` | Divider | `---` |
|
|
1469
|
+
| `- text` | List item | `- Electronics` |
|
|
1470
|
+
| Bare text | Text/paragraph | `Welcome to our app` |
|
|
1471
|
+
|
|
1472
|
+
### Keyword Elements
|
|
1473
|
+
|
|
1474
|
+
| Keyword | Type | Parameters |
|
|
1475
|
+
|---------|------|------------|
|
|
1476
|
+
| `nav` | Block | Children are nav items |
|
|
1477
|
+
| `tabs` | Block | Children are tab labels |
|
|
1478
|
+
| `table` | Block | Comma-separated rows; first = header |
|
|
1479
|
+
| `table RxC` | Skeleton table | `table 5x4` + optional header row |
|
|
1480
|
+
| `image` | Leaf | `round`, `wide` hints |
|
|
1481
|
+
| `modal Title` | Block | Rendered as separate panel below |
|
|
1482
|
+
| `skeleton` | Block | Children render as grey placeholders |
|
|
1483
|
+
| `alert` | Block | Optional semantic state |
|
|
1484
|
+
| `progress N` | Leaf | Value 0-100: `progress 60` |
|
|
1485
|
+
| `chart type` | Leaf | `chart line`, `chart bar`, `chart pie` |
|
|
1486
|
+
|
|
1487
|
+
### Pipe Metadata (States)
|
|
1488
|
+
|
|
1489
|
+
Wireframe uses flag keywords (not `key: value`):
|
|
1490
|
+
|
|
1491
|
+
```
|
|
1492
|
+
(Submit) | disabled
|
|
1493
|
+
(Delete) | destructive
|
|
1494
|
+
(Cancel) | ghost
|
|
1495
|
+
[Email] | password
|
|
1496
|
+
[Notes] | textarea
|
|
1497
|
+
[Cards] | horizontal
|
|
1498
|
+
[Advanced] | collapsed
|
|
1499
|
+
[Messages] | scrollable
|
|
1500
|
+
<x> Dark mode | toggle
|
|
1501
|
+
```
|
|
1502
|
+
|
|
1503
|
+
Available states: `disabled`, `active`, `selected`, `empty`, `ghost`, `destructive`, `success`, `warning`, `info`, `scrollable`, `collapsed`, `toggle`, `password`, `textarea`, `horizontal`, `primary`.
|
|
1504
|
+
|
|
1505
|
+
Free-text annotations after states: `[Email] | required, validates email format`.
|
|
1506
|
+
|
|
1507
|
+
### Multi-Element Lines
|
|
1508
|
+
|
|
1509
|
+
Two or more spaces between segments create separate elements:
|
|
1510
|
+
|
|
1511
|
+
```
|
|
1512
|
+
Email [user@example.com] // label + field (2 segments)
|
|
1513
|
+
(-) 1 (+) // 3 inline items
|
|
1514
|
+
$299.99 ~~$349.99~~ // 2 inline texts
|
|
1515
|
+
```
|
|
1516
|
+
|
|
1517
|
+
- **2 segments** (bare text + element): label-for-element pairing
|
|
1518
|
+
- **3+ segments**: inline items, no label pairing
|
|
1519
|
+
- **Single space = same element**: `Cart (3)` is one text element
|
|
1520
|
+
|
|
1521
|
+
### Group Disambiguation
|
|
1522
|
+
|
|
1523
|
+
- `[Name]` with indented children = group/container
|
|
1524
|
+
- `[Name]` with no children = text input
|
|
1525
|
+
- `[Name] | horizontal/scrollable/collapsed` = group (even without children)
|
|
1526
|
+
|
|
1527
|
+
### Table Syntax
|
|
1528
|
+
|
|
1529
|
+
Explicit rows (comma-separated, first row = header):
|
|
1530
|
+
|
|
1531
|
+
```
|
|
1532
|
+
table
|
|
1533
|
+
Name, Email, Role
|
|
1534
|
+
John, john@, Admin
|
|
1535
|
+
Sally, sally@, Editor
|
|
1536
|
+
```
|
|
1537
|
+
|
|
1538
|
+
Skeleton shorthand:
|
|
1539
|
+
|
|
1540
|
+
```
|
|
1541
|
+
table 5x4
|
|
1542
|
+
Name, Email, Role, Status
|
|
1543
|
+
```
|
|
1544
|
+
|
|
1545
|
+
### Layout Model
|
|
1546
|
+
|
|
1547
|
+
- Desktop: 1200px wide, top-level regions arrange horizontally
|
|
1548
|
+
- Mobile: 375px wide, all regions stack vertically
|
|
1549
|
+
- Smart sizing: `sidebar` → ~25%, `main`/`content` → fill, `header`/`footer` → full width
|
|
1550
|
+
- `| horizontal` on groups arranges children in a row
|
|
1551
|
+
|
|
1552
|
+
### Example
|
|
1553
|
+
|
|
1554
|
+
```
|
|
1555
|
+
wireframe Login Page
|
|
1556
|
+
|
|
1557
|
+
[Header]
|
|
1558
|
+
nav
|
|
1559
|
+
Home | active
|
|
1560
|
+
Settings
|
|
1561
|
+
|
|
1562
|
+
[Main]
|
|
1563
|
+
# Sign In
|
|
1564
|
+
Email [user@example.com]
|
|
1565
|
+
Password [****] | password
|
|
1566
|
+
<x> Remember me
|
|
1567
|
+
(Sign In)
|
|
1568
|
+
(Forgot Password?) | ghost
|
|
1569
|
+
```
|
|
1570
|
+
|
|
1571
|
+
---
|
|
1572
|
+
|
|
1573
|
+
## 19. Colon Usage Summary
|
|
1330
1574
|
|
|
1331
1575
|
### Constructs Where Colons Are REQUIRED
|
|
1332
1576
|
|
|
@@ -1345,6 +1589,7 @@ Navigator 0.85 0.8
|
|
|
1345
1589
|
| Construct | Diagram Type | Example |
|
|
1346
1590
|
|-----------|-------------|---------|
|
|
1347
1591
|
| Class relationship label | class | `--|> Vessel : extends` or `--|> Vessel extends` |
|
|
1592
|
+
| Description keyword (indented) | sitemap, c4 | `description text` or `description: text` |
|
|
1348
1593
|
|
|
1349
1594
|
### Colons NOT USED
|
|
1350
1595
|
|
|
@@ -9,20 +9,27 @@ hide priority:Low
|
|
|
9
9
|
direction LR
|
|
10
10
|
|
|
11
11
|
// --- Services ---
|
|
12
|
-
API Gateway | t: Backend
|
|
12
|
+
API Gateway | t: Backend
|
|
13
|
+
Main entry point for all requests
|
|
14
|
+
Routes to **backend services**
|
|
13
15
|
-routes-> UserService
|
|
14
16
|
-routes-> ProductService
|
|
15
17
|
-routes-> OrderService
|
|
16
18
|
|
|
17
|
-
UserService | t: Backend
|
|
19
|
+
UserService | t: Backend
|
|
20
|
+
Handles auth and profiles
|
|
21
|
+
Uses `JWT` tokens for sessions
|
|
18
22
|
-reads-> UserDB
|
|
19
23
|
-checks-> SessionCache
|
|
20
24
|
|
|
21
25
|
ProductService | t: Frontend, description: Product catalog and search
|
|
26
|
+
Supports *full-text* search
|
|
22
27
|
-queries-> ProductDB
|
|
23
28
|
-invalidates-> ProductCache
|
|
24
29
|
|
|
25
|
-
OrderService | t: Backend
|
|
30
|
+
OrderService | t: Backend
|
|
31
|
+
Order processing pipeline
|
|
32
|
+
Validates inventory before commit
|
|
26
33
|
-writes-> OrderDB
|
|
27
34
|
-publishes-> OrderQueue
|
|
28
35
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
cycle OODA Loop
|
|
2
|
+
|
|
3
|
+
Observe | color: blue
|
|
4
|
+
Gather raw information from the environment
|
|
5
|
+
Monitor unfolding circumstances
|
|
6
|
+
-Unfold circumstances-> | color: blue
|
|
7
|
+
Synthesize raw data into actionable context
|
|
8
|
+
Identify **key patterns** and anomalies
|
|
9
|
+
|
|
10
|
+
Orient | color: green
|
|
11
|
+
Analyze and synthesize observations
|
|
12
|
+
Form a mental model of the situation
|
|
13
|
+
-Form hypothesis-> | color: green
|
|
14
|
+
Apply previous experience and cultural filters
|
|
15
|
+
Perform *destructive deduction* to break old models
|
|
16
|
+
|
|
17
|
+
Decide | color: orange
|
|
18
|
+
Select a course of action
|
|
19
|
+
-Commit to action-> | color: orange
|
|
20
|
+
|
|
21
|
+
Act | color: red
|
|
22
|
+
Execute the chosen course of action
|
|
23
|
+
Generate results that feed back
|
|
24
|
+
-Generate feedback-> | color: red
|
|
25
|
+
Results flow back into observation
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
cycle Sprint Cycle
|
|
2
|
+
|
|
3
|
+
Planning | color: blue, span: 1
|
|
4
|
+
Sprint kickoff and backlog grooming
|
|
5
|
+
-Start sprint->
|
|
6
|
+
|
|
7
|
+
Development | color: green, span: 3
|
|
8
|
+
Build and test features
|
|
9
|
+
-Demo ready->
|
|
10
|
+
|
|
11
|
+
Review | color: orange, span: 1
|
|
12
|
+
Sprint demo and stakeholder feedback
|
|
13
|
+
-Retrospective->
|
|
14
|
+
|
|
15
|
+
Retro | color: purple, span: 0.5
|
|
16
|
+
Team reflection and process improvement
|
|
17
|
+
-Next sprint->
|
|
@@ -4,13 +4,13 @@ today-marker 2024-03-01
|
|
|
4
4
|
critical-path
|
|
5
5
|
dependencies
|
|
6
6
|
|
|
7
|
-
tag Team
|
|
7
|
+
tag Team t
|
|
8
8
|
Engineering(blue)
|
|
9
9
|
Design(purple)
|
|
10
10
|
QA(orange)
|
|
11
11
|
Marketing(green)
|
|
12
12
|
|
|
13
|
-
tag Phase
|
|
13
|
+
tag Phase p
|
|
14
14
|
Foundation(green)
|
|
15
15
|
Growth(orange)
|
|
16
16
|
Launch(red)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
sequence Order Fulfillment — Protocols & Ownership
|
|
2
2
|
active-tag Protocol
|
|
3
3
|
|
|
4
|
-
tag Protocol
|
|
4
|
+
tag Protocol p
|
|
5
5
|
REST(blue)
|
|
6
6
|
gRPC(green)
|
|
7
7
|
Async(orange)
|
|
8
8
|
SQL(purple)
|
|
9
9
|
|
|
10
|
-
tag Owner
|
|
10
|
+
tag Owner o
|
|
11
11
|
Checkout(teal)
|
|
12
12
|
Fulfillment(orange)
|
|
13
13
|
Payments(red)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
sequence API Gateway — Infrastructure Concerns
|
|
2
2
|
active-tag Concern
|
|
3
3
|
|
|
4
|
-
tag Concern
|
|
4
|
+
tag Concern c
|
|
5
5
|
Caching(blue)
|
|
6
6
|
Auth(green)
|
|
7
7
|
RateLimiting(orange)
|
|
8
8
|
BusinessLogic(purple) default
|
|
9
9
|
|
|
10
|
-
tag Team
|
|
10
|
+
tag Team t
|
|
11
11
|
Platform(teal)
|
|
12
12
|
Product(orange)
|
|
13
13
|
Security(red)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
tech-radar Dense Radar Stress Test
|
|
2
|
+
|
|
3
|
+
rings
|
|
4
|
+
Adopt
|
|
5
|
+
Trial
|
|
6
|
+
Assess
|
|
7
|
+
Hold
|
|
8
|
+
|
|
9
|
+
Techniques | quadrant: top-right
|
|
10
|
+
CI/CD | ring: Adopt, trend: stable
|
|
11
|
+
IaC | ring: Adopt, trend: stable
|
|
12
|
+
Microservices | ring: Adopt, trend: stable
|
|
13
|
+
Event Sourcing | ring: Trial, trend: up
|
|
14
|
+
CQRS | ring: Trial, trend: up
|
|
15
|
+
Feature Flags | ring: Adopt, trend: new
|
|
16
|
+
Chaos Engineering | ring: Assess, trend: new
|
|
17
|
+
Trunk-Based Dev | ring: Trial, trend: up
|
|
18
|
+
Contract Testing | ring: Trial, trend: new
|
|
19
|
+
Design Tokens | ring: Assess, trend: new
|
|
20
|
+
Micro Frontends | ring: Assess, trend: up
|
|
21
|
+
Server Components | ring: Trial, trend: new
|
|
22
|
+
Edge Functions | ring: Trial, trend: up
|
|
23
|
+
Zero Trust | ring: Adopt, trend: stable
|
|
24
|
+
Observability | ring: Adopt, trend: stable
|
|
25
|
+
Platform Engineering | ring: Trial, trend: new
|
|
26
|
+
|
|
27
|
+
Tools | quadrant: top-left
|
|
28
|
+
GitHub Copilot | ring: Trial, trend: new
|
|
29
|
+
Vite | ring: Adopt, trend: up
|
|
30
|
+
Playwright | ring: Adopt, trend: stable
|
|
31
|
+
Turborepo | ring: Trial, trend: new
|
|
32
|
+
Docker | ring: Adopt, trend: stable
|
|
33
|
+
Grafana | ring: Adopt, trend: stable
|
|
34
|
+
Datadog | ring: Trial, trend: up
|
|
35
|
+
Webpack | ring: Hold, trend: down
|
|
36
|
+
Storybook | ring: Adopt, trend: stable
|
|
37
|
+
Figma | ring: Adopt, trend: stable
|
|
38
|
+
Linear | ring: Trial, trend: new
|
|
39
|
+
Pulumi | ring: Assess, trend: new
|
|
40
|
+
Tailscale | ring: Trial, trend: up
|
|
41
|
+
Renovate | ring: Adopt, trend: stable
|
|
42
|
+
Bruno | ring: Assess, trend: new
|
|
43
|
+
Cursor | ring: Trial, trend: new
|
|
44
|
+
|
|
45
|
+
Platforms | quadrant: bottom-left
|
|
46
|
+
Kubernetes | ring: Adopt, trend: stable
|
|
47
|
+
Cloudflare Workers | ring: Trial, trend: up
|
|
48
|
+
AWS Lambda | ring: Hold, trend: down
|
|
49
|
+
Vercel | ring: Trial, trend: up
|
|
50
|
+
Fly.io | ring: Assess, trend: new
|
|
51
|
+
Neon | ring: Trial, trend: new
|
|
52
|
+
PlanetScale | ring: Hold, trend: down
|
|
53
|
+
Supabase | ring: Assess, trend: up
|
|
54
|
+
Upstash | ring: Trial, trend: new
|
|
55
|
+
Railway | ring: Assess, trend: new
|
|
56
|
+
Deno Deploy | ring: Assess, trend: new
|
|
57
|
+
Google Cloud Run | ring: Adopt, trend: stable
|
|
58
|
+
Azure AKS | ring: Trial, trend: up
|
|
59
|
+
Hetzner | ring: Assess, trend: new
|
|
60
|
+
Tigris | ring: Assess, trend: new
|
|
61
|
+
|
|
62
|
+
Languages & Frameworks | quadrant: bottom-right
|
|
63
|
+
TypeScript | ring: Adopt, trend: stable
|
|
64
|
+
Rust | ring: Assess, trend: new
|
|
65
|
+
React | ring: Adopt, trend: stable
|
|
66
|
+
Go | ring: Adopt, trend: stable
|
|
67
|
+
Python | ring: Adopt, trend: stable
|
|
68
|
+
Svelte | ring: Assess, trend: up
|
|
69
|
+
Solid | ring: Assess, trend: new
|
|
70
|
+
Zig | ring: Hold, trend: stable
|
|
71
|
+
Kotlin | ring: Trial, trend: up
|
|
72
|
+
Swift | ring: Adopt, trend: stable
|
|
73
|
+
Astro | ring: Trial, trend: new
|
|
74
|
+
HTMX | ring: Assess, trend: new
|
|
75
|
+
Effect-TS | ring: Assess, trend: new
|
|
76
|
+
Bun | ring: Trial, trend: up
|
|
77
|
+
Deno | ring: Assess, trend: up
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
tech-radar Engineering Tech Radar Q2 2026
|
|
2
|
+
|
|
3
|
+
rings
|
|
4
|
+
Adopt
|
|
5
|
+
Trial
|
|
6
|
+
Assess
|
|
7
|
+
Hold
|
|
8
|
+
|
|
9
|
+
Techniques | quadrant: top-right
|
|
10
|
+
Continuous Deployment | ring: Adopt, trend: stable
|
|
11
|
+
Fully adopted across all services.
|
|
12
|
+
Infrastructure as Code | ring: Adopt, trend: stable
|
|
13
|
+
Micro Frontends | ring: Trial, trend: up
|
|
14
|
+
Exploring for the portal project.
|
|
15
|
+
Trunk-Based Development | ring: Assess, trend: new
|
|
16
|
+
|
|
17
|
+
Tools | quadrant: top-left
|
|
18
|
+
GitHub Copilot | ring: Trial, trend: new
|
|
19
|
+
Evaluating for developer productivity.
|
|
20
|
+
Vite | ring: Adopt, trend: up
|
|
21
|
+
Webpack | ring: Hold, trend: down
|
|
22
|
+
Migrating to Vite across all projects.
|
|
23
|
+
Playwright | ring: Adopt, trend: stable
|
|
24
|
+
Turborepo | ring: Trial, trend: new
|
|
25
|
+
|
|
26
|
+
Platforms | quadrant: bottom-left
|
|
27
|
+
Kubernetes | ring: Adopt, trend: stable
|
|
28
|
+
Cloudflare Workers | ring: Trial, trend: up
|
|
29
|
+
AWS Lambda | ring: Hold, trend: down
|
|
30
|
+
Consolidating onto Kubernetes.
|
|
31
|
+
|
|
32
|
+
Languages & Frameworks | quadrant: bottom-right
|
|
33
|
+
TypeScript | ring: Adopt, trend: stable
|
|
34
|
+
Rust | ring: Assess, trend: new
|
|
35
|
+
Evaluating for performance-critical services.
|
|
36
|
+
React | ring: Adopt, trend: stable
|
package/package.json
CHANGED
|
@@ -40,12 +40,28 @@ export function collapseBoxesAndLines(
|
|
|
40
40
|
const nodeToGroup = new Map<string, string>();
|
|
41
41
|
const collapsedChildCounts = new Map<string, number>();
|
|
42
42
|
|
|
43
|
+
// Recursively collect all descendants of a group (including sub-group children)
|
|
44
|
+
function collectDescendants(groupLabel: string): string[] {
|
|
45
|
+
const group = groupByLabel.get(groupLabel);
|
|
46
|
+
if (!group) return [];
|
|
47
|
+
const descendants: string[] = [];
|
|
48
|
+
for (const child of group.children) {
|
|
49
|
+
descendants.push(child);
|
|
50
|
+
// If child is itself a group, collect its descendants too
|
|
51
|
+
if (groupByLabel.has(child)) {
|
|
52
|
+
descendants.push(...collectDescendants(child));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return descendants;
|
|
56
|
+
}
|
|
57
|
+
|
|
43
58
|
for (const groupLabel of collapsedGroups) {
|
|
44
59
|
const group = groupByLabel.get(groupLabel);
|
|
45
60
|
if (!group) continue;
|
|
46
61
|
const groupId = `__group_${groupLabel}`;
|
|
47
62
|
|
|
48
|
-
|
|
63
|
+
const allDescendants = collectDescendants(groupLabel);
|
|
64
|
+
for (const child of allDescendants) {
|
|
49
65
|
nodeToGroup.set(child, groupId);
|
|
50
66
|
}
|
|
51
67
|
collapsedChildCounts.set(groupLabel, group.children.length);
|
|
@@ -67,8 +83,10 @@ export function collapseBoxesAndLines(
|
|
|
67
83
|
edges.push({ ...edge, source: src, target: tgt });
|
|
68
84
|
}
|
|
69
85
|
|
|
70
|
-
// Keep only groups that are not collapsed
|
|
71
|
-
const groups = parsed.groups.filter(
|
|
86
|
+
// Keep only groups that are not collapsed and not inside a collapsed group
|
|
87
|
+
const groups = parsed.groups.filter(
|
|
88
|
+
(g) => !collapsedGroups.has(g.label) && !nodeToGroup.has(g.label)
|
|
89
|
+
);
|
|
72
90
|
|
|
73
91
|
return {
|
|
74
92
|
parsed: { ...parsed, nodes, edges, groups },
|