tina4-nodejs 3.0.0-rc.2
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/BENCHMARK_REPORT.md +96 -0
- package/CARBONAH.md +140 -0
- package/CLAUDE.md +599 -0
- package/COMPARISON.md +194 -0
- package/README.md +595 -0
- package/package.json +59 -0
- package/packages/cli/src/bin.ts +110 -0
- package/packages/cli/src/commands/init.ts +194 -0
- package/packages/cli/src/commands/migrate.ts +96 -0
- package/packages/cli/src/commands/migrateCreate.ts +59 -0
- package/packages/cli/src/commands/routes.ts +61 -0
- package/packages/cli/src/commands/serve.ts +58 -0
- package/packages/cli/src/commands/test.ts +83 -0
- package/packages/core/gallery/auth/meta.json +1 -0
- package/packages/core/gallery/auth/src/routes/api/gallery/auth/login/post.ts +22 -0
- package/packages/core/gallery/auth/src/routes/api/gallery/auth/verify/get.ts +16 -0
- package/packages/core/gallery/auth/src/routes/gallery/auth/get.ts +97 -0
- package/packages/core/gallery/database/meta.json +1 -0
- package/packages/core/gallery/database/src/routes/api/gallery/db/notes/get.ts +13 -0
- package/packages/core/gallery/database/src/routes/api/gallery/db/notes/post.ts +17 -0
- package/packages/core/gallery/database/src/routes/api/gallery/db/tables/get.ts +23 -0
- package/packages/core/gallery/error-overlay/meta.json +1 -0
- package/packages/core/gallery/error-overlay/src/routes/api/gallery/crash/get.ts +17 -0
- package/packages/core/gallery/orm/meta.json +1 -0
- package/packages/core/gallery/orm/src/routes/api/gallery/products/get.ts +12 -0
- package/packages/core/gallery/orm/src/routes/api/gallery/products/post.ts +7 -0
- package/packages/core/gallery/queue/meta.json +1 -0
- package/packages/core/gallery/queue/src/routes/api/gallery/queue/produce/post.ts +16 -0
- package/packages/core/gallery/queue/src/routes/api/gallery/queue/status/get.ts +10 -0
- package/packages/core/gallery/rest-api/meta.json +1 -0
- package/packages/core/gallery/rest-api/src/routes/api/gallery/hello/get.ts +6 -0
- package/packages/core/gallery/rest-api/src/routes/api/gallery/hello/post.ts +7 -0
- package/packages/core/gallery/templates/meta.json +1 -0
- package/packages/core/gallery/templates/src/routes/gallery/page/get.ts +15 -0
- package/packages/core/gallery/templates/src/templates/gallery_page.twig +257 -0
- package/packages/core/public/css/tina4.css +2463 -0
- package/packages/core/public/css/tina4.min.css +1 -0
- package/packages/core/public/favicon.ico +0 -0
- package/packages/core/public/images/logo.svg +5 -0
- package/packages/core/public/images/tina4-logo-icon.webp +0 -0
- package/packages/core/public/js/frond.min.js +420 -0
- package/packages/core/public/js/tina4-dev-admin.min.js +327 -0
- package/packages/core/public/js/tina4.min.js +93 -0
- package/packages/core/public/swagger/index.html +90 -0
- package/packages/core/public/swagger/oauth2-redirect.html +63 -0
- package/packages/core/src/ai.ts +359 -0
- package/packages/core/src/api.ts +248 -0
- package/packages/core/src/auth.ts +287 -0
- package/packages/core/src/cache.ts +121 -0
- package/packages/core/src/constants.ts +48 -0
- package/packages/core/src/container.ts +90 -0
- package/packages/core/src/devAdmin.ts +2024 -0
- package/packages/core/src/devMailbox.ts +316 -0
- package/packages/core/src/dotenv.ts +172 -0
- package/packages/core/src/errorOverlay.test.ts +122 -0
- package/packages/core/src/errorOverlay.ts +278 -0
- package/packages/core/src/events.ts +112 -0
- package/packages/core/src/fakeData.ts +309 -0
- package/packages/core/src/graphql.ts +812 -0
- package/packages/core/src/health.ts +31 -0
- package/packages/core/src/htmlElement.ts +172 -0
- package/packages/core/src/i18n.ts +136 -0
- package/packages/core/src/index.ts +88 -0
- package/packages/core/src/logger.ts +226 -0
- package/packages/core/src/messenger.ts +822 -0
- package/packages/core/src/middleware.ts +138 -0
- package/packages/core/src/queue.ts +481 -0
- package/packages/core/src/queueBackends/kafkaBackend.ts +348 -0
- package/packages/core/src/queueBackends/rabbitmqBackend.ts +479 -0
- package/packages/core/src/rateLimiter.ts +107 -0
- package/packages/core/src/request.ts +189 -0
- package/packages/core/src/response.ts +146 -0
- package/packages/core/src/routeDiscovery.ts +87 -0
- package/packages/core/src/router.ts +398 -0
- package/packages/core/src/scss.ts +366 -0
- package/packages/core/src/server.ts +610 -0
- package/packages/core/src/service.ts +380 -0
- package/packages/core/src/session.ts +480 -0
- package/packages/core/src/sessionHandlers/mongoHandler.ts +286 -0
- package/packages/core/src/sessionHandlers/valkeyHandler.ts +184 -0
- package/packages/core/src/static.ts +58 -0
- package/packages/core/src/testing.ts +233 -0
- package/packages/core/src/types.ts +98 -0
- package/packages/core/src/watcher.ts +37 -0
- package/packages/core/src/websocket.ts +408 -0
- package/packages/core/src/wsdl.ts +546 -0
- package/packages/core/templates/errors/302.twig +14 -0
- package/packages/core/templates/errors/401.twig +9 -0
- package/packages/core/templates/errors/403.twig +29 -0
- package/packages/core/templates/errors/404.twig +29 -0
- package/packages/core/templates/errors/500.twig +38 -0
- package/packages/core/templates/errors/502.twig +9 -0
- package/packages/core/templates/errors/503.twig +12 -0
- package/packages/core/templates/errors/base.twig +37 -0
- package/packages/frond/src/engine.ts +1475 -0
- package/packages/frond/src/index.ts +2 -0
- package/packages/orm/src/adapters/firebird.ts +455 -0
- package/packages/orm/src/adapters/mssql.ts +440 -0
- package/packages/orm/src/adapters/mysql.ts +355 -0
- package/packages/orm/src/adapters/postgres.ts +362 -0
- package/packages/orm/src/adapters/sqlite.ts +270 -0
- package/packages/orm/src/autoCrud.ts +231 -0
- package/packages/orm/src/baseModel.ts +536 -0
- package/packages/orm/src/database.ts +321 -0
- package/packages/orm/src/fakeData.ts +118 -0
- package/packages/orm/src/index.ts +49 -0
- package/packages/orm/src/migration.ts +392 -0
- package/packages/orm/src/model.ts +56 -0
- package/packages/orm/src/query.ts +113 -0
- package/packages/orm/src/seeder.ts +120 -0
- package/packages/orm/src/sqlTranslation.ts +272 -0
- package/packages/orm/src/types.ts +110 -0
- package/packages/orm/src/validation.ts +93 -0
- package/packages/swagger/src/generator.ts +189 -0
- package/packages/swagger/src/index.ts +2 -0
- package/packages/swagger/src/ui.ts +48 -0
- package/skills/tina4-developer.skill +0 -0
- package/skills/tina4-js.skill +0 -0
- package/skills/tina4-maintainer.skill +0 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Tina4 v3 — Global Framework Report
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-03-21 | **Machine:** Apple M3, macOS | **Tool:** hey, 5000 req × 50 concurrent, median of 5 runs, production mode
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Side-by-Side: Performance + Features + Size + CO2
|
|
8
|
+
|
|
9
|
+
| | Tina4 Python | Tina4 PHP | Tina4 Ruby | Tina4 Node.js | Flask | FastAPI | Django | Laravel | Symfony | Slim | Sinatra | Express | Fastify | Koa | Starlette | Bottle | Node raw |
|
|
10
|
+
|---|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|
|
11
|
+
| **JSON req/s** | **16,233** | **27,299** | **9,504** | **57,035** | 4,767 | 11,886 | 3,747 | 370 | 1,840 | 5,033 | 9,732 | 56,687 | 79,505 | 60,400 | 15,978 | 1,251 | 86,662 |
|
|
12
|
+
| **List req/s** | **5,858** | **16,555** | **7,648** | **25,088** | 1,644 | 2,464 | 3,305 | 364 | 1,702 | 4,520 | 5,996 | 20,720 | 23,395 | 23,433 | 7,493 | 676 | 24,598 |
|
|
13
|
+
| **Deploy size** | **2.4 MB** | **1.0 MB** | **892 KB** | **1.8 MB** | 4.2 MB | 4.8 MB | 25 MB | 77 MB | 11 MB | 1.3 MB | 5 MB | 2 MB | 2 MB | 1 MB | 505 KB | 200 KB | 0 KB |
|
|
14
|
+
| **Dependencies** | **0** | **0** | **0** | **0** | 6 | 12+ | 20+ | 50+ | 30+ | 10+ | 5 | 3 | 10+ | 5 | 4 | 0 | 0 |
|
|
15
|
+
| **CO2 g/1K req** | **0.12** | **0.07** | **0.21** | **0.04** | 0.42 | 0.17 | 0.53 | 5.35 | 1.08 | 0.39 | 0.20 | 0.04 | 0.02 | 0.03 | 0.12 | 1.58 | 0.02 |
|
|
16
|
+
| **CO2 kg/yr @1M/day** | **44** | **27** | **77** | **13** | 153 | 61 | 193 | 1,952 | 393 | 144 | 75 | 13 | 9 | 12 | 44 | 578 | 7 |
|
|
17
|
+
| **Language** | Python | PHP | Ruby | Node.js | Python | Python | Python | PHP | PHP | PHP | Ruby | Node.js | Node.js | Node.js | Python | Python | Node.js |
|
|
18
|
+
| | | | | | | | | | | | | | | | | | |
|
|
19
|
+
| **FEATURES** | | | | | | | | | | | | | | | | | |
|
|
20
|
+
| Routing | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
21
|
+
| Typed params | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
|
|
22
|
+
| Middleware | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
|
|
23
|
+
| Static files | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ |
|
|
24
|
+
| CORS | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
|
|
25
|
+
| Rate limiting | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
26
|
+
| WebSocket | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
|
|
27
|
+
| ORM | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
28
|
+
| 5 DB drivers | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
29
|
+
| Migrations | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
30
|
+
| Seeder/fake data | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
31
|
+
| Sessions | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
32
|
+
| Response cache | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
33
|
+
| JWT auth | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
34
|
+
| Password hashing | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
35
|
+
| CSRF protection | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
36
|
+
| Template engine | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
|
|
37
|
+
| CSS framework | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
38
|
+
| SCSS compiler | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
39
|
+
| Frontend JS | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
40
|
+
| Swagger/OpenAPI | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
41
|
+
| GraphQL | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
42
|
+
| SOAP/WSDL | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
43
|
+
| HTTP client | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
44
|
+
| Queue system | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
45
|
+
| CLI scaffolding | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
46
|
+
| Dev dashboard | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
47
|
+
| Error overlay | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
48
|
+
| Live reload | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
49
|
+
| Auto-CRUD | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
50
|
+
| Gallery/examples | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
51
|
+
| AI assistant | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
52
|
+
| Inline testing | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
53
|
+
| Zero deps | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
|
|
54
|
+
| DI container | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
55
|
+
| Event system | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
56
|
+
| i18n | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
57
|
+
| HTML builder | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
58
|
+
| | | | | | | | | | | | | | | | | | |
|
|
59
|
+
| **TOTAL** | **38** | **38** | **38** | **38** | **7** | **8** | **22** | **25** | **8** | **6** | **4** | **4** | **5** | **3** | **6** | **5** | **1** |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## The Numbers That Matter
|
|
64
|
+
|
|
65
|
+
### Speed per Feature
|
|
66
|
+
| Framework | req/s | Features | req/s per feature |
|
|
67
|
+
|-----------|:-----:|:--------:|:-----------------:|
|
|
68
|
+
| **Tina4 Node.js** | 57,035 | 38 | **1,501** |
|
|
69
|
+
| **Tina4 PHP** | 27,299 | 38 | **718** |
|
|
70
|
+
| Fastify | 79,505 | 5 | 15,901 |
|
|
71
|
+
| Koa | 60,400 | 3 | 20,133 |
|
|
72
|
+
| Express | 56,687 | 4 | 14,172 |
|
|
73
|
+
| **Tina4 Python** | 16,233 | 38 | **427** |
|
|
74
|
+
| Starlette | 15,978 | 6 | 2,663 |
|
|
75
|
+
| FastAPI | 11,886 | 8 | 1,486 |
|
|
76
|
+
| **Tina4 Ruby** | 9,504 | 38 | **250** |
|
|
77
|
+
| Sinatra | 9,732 | 4 | 2,433 |
|
|
78
|
+
| Slim | 5,033 | 6 | 839 |
|
|
79
|
+
| Flask | 4,767 | 7 | 681 |
|
|
80
|
+
| Django | 3,747 | 22 | 170 |
|
|
81
|
+
| Symfony | 1,840 | 8 | 230 |
|
|
82
|
+
| Laravel | 370 | 25 | 15 |
|
|
83
|
+
|
|
84
|
+
### Carbon Efficiency
|
|
85
|
+
| Framework | CO2 g/1K req | Features | CO2 per feature per 1K req |
|
|
86
|
+
|-----------|:-----------:|:--------:|:--------------------------:|
|
|
87
|
+
| **Tina4 Node.js** | 0.04 | 38 | **0.001g** |
|
|
88
|
+
| **Tina4 PHP** | 0.07 | 38 | **0.002g** |
|
|
89
|
+
| **Tina4 Python** | 0.12 | 38 | **0.003g** |
|
|
90
|
+
| **Tina4 Ruby** | 0.21 | 38 | **0.006g** |
|
|
91
|
+
| Laravel | 5.35 | 25 | **0.214g** — 107x more than Tina4 PHP |
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
*Benchmark suite: `python benchmarks/benchmark.py --runs 5` — reproducible by anyone*
|
|
96
|
+
*Tina4 — This is not a framework. https://tina4.com*
|
package/CARBONAH.md
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Carbonah Green Benchmark Report
|
|
2
|
+
|
|
3
|
+
> Tina4 Node.js v3 — Test Results
|
|
4
|
+
> Date: 2026-03-21
|
|
5
|
+
> Rating: **A+**
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Summary
|
|
10
|
+
|
|
11
|
+
| Metric | Value |
|
|
12
|
+
|--------|-------|
|
|
13
|
+
| Total Tests | 1,611 |
|
|
14
|
+
| Passed | 1,611 |
|
|
15
|
+
| Failed | 0 |
|
|
16
|
+
| Errors | 0 |
|
|
17
|
+
| Status | **PASS** |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Per-Module Breakdown
|
|
22
|
+
|
|
23
|
+
| Module | Tests | Status |
|
|
24
|
+
|--------|-------|--------|
|
|
25
|
+
| Integration (end-to-end) | 37 | PASS |
|
|
26
|
+
| Smoke | 97 | PASS |
|
|
27
|
+
| Router | 30 | PASS |
|
|
28
|
+
| Auth | 45 | PASS |
|
|
29
|
+
| ORM | 28 | PASS |
|
|
30
|
+
| Database | 26 | PASS |
|
|
31
|
+
| Migration | 27 | PASS |
|
|
32
|
+
| Session | 30 | PASS |
|
|
33
|
+
| Session Handlers | 18 | PASS |
|
|
34
|
+
| Queue | 28 | PASS |
|
|
35
|
+
| Queue Backends | 20 | PASS |
|
|
36
|
+
| Swagger | 54 | PASS |
|
|
37
|
+
| WSDL | 42 | PASS |
|
|
38
|
+
| GraphQL | 36 | PASS |
|
|
39
|
+
| WebSocket | 74 | PASS |
|
|
40
|
+
| I18n | 18 | PASS |
|
|
41
|
+
| FakeData/Seeder | 51 | PASS |
|
|
42
|
+
| SCSS | 19 | PASS |
|
|
43
|
+
| Frond | 130 | PASS |
|
|
44
|
+
| Events | 39 | PASS |
|
|
45
|
+
| AI | 30 | PASS |
|
|
46
|
+
| Response | 47 | PASS |
|
|
47
|
+
| SQL Translation | 54 | PASS |
|
|
48
|
+
| HtmlElement | 24 | PASS |
|
|
49
|
+
| Form Token | 19 | PASS |
|
|
50
|
+
| Post Protection | 29 | PASS |
|
|
51
|
+
| DotEnv | 19 | PASS |
|
|
52
|
+
| CORS | 5 | PASS |
|
|
53
|
+
| Rate Limiter | 8 | PASS |
|
|
54
|
+
| Health | 6 | PASS |
|
|
55
|
+
| Log | 13 | PASS |
|
|
56
|
+
| Service Runner | 49 | PASS |
|
|
57
|
+
| Messenger | 48 | PASS |
|
|
58
|
+
| DevAdmin | 47 | PASS |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Feature Parity
|
|
63
|
+
|
|
64
|
+
78/78 features implemented — 100% parity with Python, PHP, and Ruby.
|
|
65
|
+
|
|
66
|
+
| Category | Features |
|
|
67
|
+
|----------|----------|
|
|
68
|
+
| Core | Router, Middleware, CORS, Rate Limiter, Health Check, DotEnv, Logging |
|
|
69
|
+
| Database | Multi-driver abstraction, ORM, Migrations, Seeder/FakeData, SQL Translation |
|
|
70
|
+
| Auth | JWT tokens, Password hashing, API key validation, POST protection, Form tokens |
|
|
71
|
+
| API | Swagger/OpenAPI, GraphQL, WSDL/SOAP |
|
|
72
|
+
| Templates | Frond (Twig-compatible), SCSS compilation, HtmlElement builder |
|
|
73
|
+
| Communication | Queue (memory/RabbitMQ/Kafka), WebSocket, Messenger, Session (file/Redis/Mongo) |
|
|
74
|
+
| Dev Tools | Error Overlay, DevAdmin, Hot reload (via Rust CLI), AI context scaffolding |
|
|
75
|
+
| Architecture | Events (pub/sub), DI Container, Response Cache, Inline Testing, Service Runner |
|
|
76
|
+
| I18n | Localization with JSON translation files |
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## CO2 Report
|
|
81
|
+
|
|
82
|
+
| Metric | Value |
|
|
83
|
+
|--------|-------|
|
|
84
|
+
| Test Execution Time | 18.00s |
|
|
85
|
+
| CPU Time (user+sys) | ~12s (34 separate tsx processes) |
|
|
86
|
+
| Peak Memory | ~64 MB |
|
|
87
|
+
| Platform | Apple Silicon (ARM64) |
|
|
88
|
+
| Estimated TDP | 15W |
|
|
89
|
+
| Energy per Run | 0.0000750 kWh |
|
|
90
|
+
| CO2 per Run (world avg 475g/kWh) | 0.038g CO2 |
|
|
91
|
+
| CO2 per Test | 0.000030g CO2 |
|
|
92
|
+
| Annual CI Estimate (10 runs/day) | 0.139g CO2/year |
|
|
93
|
+
| Equivalent | ~0.7m of driving a car |
|
|
94
|
+
|
|
95
|
+
### Efficiency Metrics
|
|
96
|
+
|
|
97
|
+
| Metric | Value |
|
|
98
|
+
|--------|-------|
|
|
99
|
+
| Tests per Second | 89.5 |
|
|
100
|
+
| Tests per Watt-second | 5.97 |
|
|
101
|
+
| Zero-dep Core | No unnecessary computation |
|
|
102
|
+
| Note | Higher time due to 34 separate tsx process starts; single-process would be faster |
|
|
103
|
+
|
|
104
|
+
### Carbon Comparison (per full test suite run)
|
|
105
|
+
|
|
106
|
+
| Framework | Time | CO2/Run | Tests/sec |
|
|
107
|
+
|-----------|------|---------|-----------|
|
|
108
|
+
| Python | 12.83s | 0.025g | 118.2 |
|
|
109
|
+
| PHP | 8.25s | 0.017g | 152.1 |
|
|
110
|
+
| Ruby | 6.86s | 0.014g | 221.0 |
|
|
111
|
+
| Node.js | 18.00s | 0.038g | 89.5 |
|
|
112
|
+
| **Total** | **45.94s** | **0.094g** | — |
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Carbonah Rating Criteria
|
|
117
|
+
|
|
118
|
+
| Criterion | Score | Notes |
|
|
119
|
+
|-----------|-------|-------|
|
|
120
|
+
| Test Coverage | 1,611 tests | All passing |
|
|
121
|
+
| Zero Dependencies | Core has no third-party deps | stdlib only |
|
|
122
|
+
| Feature Parity | 78/78 | 100% cross-framework |
|
|
123
|
+
| Code Quality | Clean, DRY, separation of concerns | Enforced via CLAUDE.md |
|
|
124
|
+
| Documentation | CLAUDE.md + plan docs | Up to date |
|
|
125
|
+
|
|
126
|
+
**Overall Rating: A+**
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## How to Reproduce
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
cd tina4-nodejs
|
|
134
|
+
npm install
|
|
135
|
+
for f in test/*.ts; do npx tsx "$f"; done
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
*Generated by Tina4 v3 CI — https://tina4.com*
|