Stream inspector
Your own stream, live: what the hub sends this tab, what zstd makes of it, and what the memory budget gave its encoder.
live
Your stream
connecting
…
- Setting from the budget
waiting- Reserved for your encoder
- waiting
The last frame, events to wire
On the wire, frame by frame
- Events sent
- On the wire
- Ratio so far
- Heartbeats
The site
0 streams open on this site
nothing reserved : this process has no memory limit, so the budget only counts
The payload
256 rows, 1,536 cells. Every 250 ms 8 cells change.
| node | req/s | p50 ms | p99 ms | cpu % | heap MiB | errors |
|---|---|---|---|---|---|---|
| node-001 | 4,478 | 2.9 | 89 | 20 | 221 | 0 |
| node-002 | 2,130 | 2.0 | 26 | 81 | 313 | 0 |
| node-003 | 4,301 | 2.5 | 100 | 20 | 96 | 7 |
| node-004 | 3,370 | 3.5 | 96 | 39 | 380 | 0 |
| node-005 | 1,734 | 2.6 | 105 | 79 | 359 | 6 |
| node-006 | 3,346 | 0.9 | 31 | 12 | 60 | 3 |
| node-007 | 1,514 | 0.7 | 63 | 10 | 247 | 0 |
| node-008 | 2,097 | 3.2 | 54 | 91 | 128 | 0 |
| node-009 | 1,609 | 1.5 | 30 | 77 | 185 | 0 |
| node-010 | 1,833 | 1.3 | 67 | 73 | 127 | 0 |
| node-011 | 2,651 | 3.7 | 52 | 27 | 129 | 0 |
| node-012 | 4,648 | 3.6 | 138 | 77 | 275 | 0 |
| node-013 | 3,425 | 1.1 | 102 | 44 | 207 | 0 |
| node-014 | 4,155 | 3.9 | 124 | 36 | 381 | 9 |
| node-015 | 2,501 | 3.0 | 39 | 35 | 266 | 0 |
| node-016 | 3,546 | 4.4 | 66 | 44 | 384 | 0 |
| node-017 | 3,775 | 3.7 | 140 | 53 | 272 | 0 |
| node-018 | 1,586 | 2.7 | 72 | 44 | 172 | 0 |
| node-019 | 1,296 | 2.7 | 32 | 11 | 401 | 9 |
| node-020 | 3,477 | 2.8 | 16 | 71 | 195 | 7 |
| node-021 | 340 | 1.9 | 82 | 23 | 82 | 5 |
| node-022 | 3,507 | 2.9 | 10 | 30 | 308 | 0 |
| node-023 | 4,319 | 3.3 | 86 | 52 | 356 | 0 |
| node-024 | 507 | 1.3 | 45 | 25 | 330 | 0 |
| node-025 | 2,809 | 3.9 | 44 | 7 | 370 | 8 |
| node-026 | 3,803 | 2.1 | 79 | 8 | 46 | 0 |
| node-027 | 2,566 | 0.9 | 26 | 35 | 220 | 0 |
| node-028 | 1,267 | 3.0 | 33 | 52 | 88 | 0 |
| node-029 | 1,980 | 4.7 | 130 | 48 | 440 | 0 |
| node-030 | 3,343 | 3.5 | 68 | 61 | 393 | 0 |
| node-031 | 1,894 | 3.7 | 70 | 11 | 176 | 0 |
| node-032 | 2,889 | 2.9 | 59 | 17 | 353 | 0 |
| node-033 | 4,427 | 1.4 | 68 | 61 | 222 | 0 |
| node-034 | 1,277 | 2.3 | 17 | 16 | 309 | 5 |
| node-035 | 498 | 3.1 | 58 | 41 | 397 | 0 |
| node-036 | 2,502 | 2.6 | 44 | 21 | 186 | 0 |
| node-037 | 3,916 | 4.4 | 36 | 59 | 260 | 0 |
| node-038 | 1,188 | 1.5 | 47 | 77 | 400 | 0 |
| node-039 | 2,807 | 3.8 | 57 | 4 | 63 | 0 |
| node-040 | 2,645 | 4.4 | 70 | 74 | 216 | 0 |
| node-041 | 305 | 1.4 | 10 | 28 | 295 | 0 |
| node-042 | 3,658 | 1.7 | 106 | 81 | 220 | 2 |
| node-043 | 4,676 | 2.3 | 142 | 47 | 376 | 0 |
| node-044 | 1,287 | 3.5 | 54 | 12 | 62 | 0 |
| node-045 | 4,218 | 2.9 | 61 | 40 | 55 | 0 |
| node-046 | 2,632 | 4.6 | 74 | 52 | 115 | 0 |
| node-047 | 554 | 4.1 | 80 | 41 | 404 | 0 |
| node-048 | 3,358 | 2.4 | 46 | 67 | 416 | 0 |
| node-049 | 497 | 3.9 | 63 | 82 | 348 | 0 |
| node-050 | 1,751 | 2.6 | 111 | 51 | 121 | 0 |
| node-051 | 3,881 | 1.6 | 60 | 75 | 158 | 1 |
| node-052 | 4,355 | 2.6 | 17 | 47 | 188 | 0 |
| node-053 | 4,781 | 1.4 | 24 | 35 | 315 | 0 |
| node-054 | 3,012 | 1.8 | 61 | 33 | 335 | 0 |
| node-055 | 2,574 | 1.1 | 19 | 55 | 262 | 0 |
| node-056 | 2,806 | 1.6 | 57 | 24 | 282 | 0 |
| node-057 | 2,323 | 2.9 | 63 | 3 | 312 | 0 |
| node-058 | 3,281 | 0.7 | 58 | 12 | 414 | 0 |
| node-059 | 1,874 | 0.9 | 63 | 10 | 190 | 0 |
| node-060 | 2,491 | 3.9 | 57 | 65 | 71 | 0 |
| node-061 | 2,709 | 0.8 | 85 | 46 | 77 | 0 |
| node-062 | 2,461 | 3.2 | 100 | 83 | 326 | 0 |
| node-063 | 1,233 | 1.4 | 31 | 61 | 404 | 0 |
| node-064 | 984 | 2.4 | 102 | 32 | 382 | 0 |
| node-065 | 4,218 | 1.9 | 65 | 29 | 372 | 0 |
| node-066 | 2,758 | 2.3 | 31 | 11 | 84 | 2 |
| node-067 | 1,805 | 2.4 | 27 | 12 | 237 | 0 |
| node-068 | 1,877 | 3.3 | 22 | 20 | 232 | 0 |
| node-069 | 3,704 | 4.3 | 99 | 18 | 296 | 0 |
| node-070 | 2,497 | 2.7 | 88 | 61 | 154 | 0 |
| node-071 | 4,860 | 0.9 | 9 | 64 | 96 | 6 |
| node-072 | 4,516 | 0.9 | 39 | 49 | 282 | 0 |
| node-073 | 559 | 1.6 | 128 | 23 | 126 | 7 |
| node-074 | 2,985 | 3.3 | 36 | 59 | 196 | 8 |
| node-075 | 314 | 2.6 | 83 | 68 | 397 | 0 |
| node-076 | 4,864 | 3.6 | 11 | 23 | 96 | 0 |
| node-077 | 554 | 4.3 | 43 | 75 | 297 | 0 |
| node-078 | 3,306 | 0.7 | 60 | 69 | 429 | 0 |
| node-079 | 2,693 | 1.1 | 37 | 13 | 281 | 0 |
| node-080 | 908 | 2.1 | 50 | 33 | 344 | 0 |
| node-081 | 4,056 | 4.7 | 54 | 84 | 142 | 7 |
| node-082 | 1,195 | 3.1 | 111 | 13 | 80 | 0 |
| node-083 | 5,240 | 3.5 | 36 | 84 | 214 | 0 |
| node-084 | 3,602 | 4.6 | 36 | 81 | 75 | 0 |
| node-085 | 3,521 | 3.9 | 39 | 88 | 288 | 0 |
| node-086 | 521 | 1.6 | 80 | 53 | 241 | 7 |
| node-087 | 2,422 | 3.7 | 80 | 59 | 63 | 0 |
| node-088 | 808 | 1.7 | 25 | 53 | 206 | 0 |
| node-089 | 2,519 | 2.2 | 78 | 7 | 132 | 4 |
| node-090 | 2,890 | 2.4 | 79 | 35 | 152 | 0 |
| node-091 | 4,533 | 4.0 | 38 | 45 | 345 | 0 |
| node-092 | 1,301 | 3.5 | 68 | 55 | 190 | 0 |
| node-093 | 4,161 | 2.8 | 27 | 39 | 416 | 0 |
| node-094 | 322 | 4.3 | 72 | 84 | 50 | 0 |
| node-095 | 4,953 | 1.7 | 37 | 75 | 262 | 0 |
| node-096 | 1,395 | 2.2 | 35 | 53 | 245 | 0 |
| node-097 | 1,003 | 1.6 | 88 | 32 | 213 | 0 |
| node-098 | 2,198 | 2.1 | 35 | 41 | 147 | 0 |
| node-099 | 1,525 | 3.6 | 80 | 21 | 237 | 0 |
| node-100 | 1,595 | 0.9 | 53 | 81 | 390 | 0 |
| node-101 | 4,174 | 3.6 | 18 | 14 | 420 | 2 |
| node-102 | 2,674 | 3.1 | 55 | 44 | 445 | 0 |
| node-103 | 3,733 | 0.9 | 98 | 73 | 55 | 0 |
| node-104 | 2,818 | 1.1 | 33 | 47 | 44 | 0 |
| node-105 | 513 | 2.4 | 66 | 90 | 217 | 0 |
| node-106 | 1,099 | 3.4 | 98 | 57 | 320 | 0 |
| node-107 | 1,140 | 1.7 | 136 | 36 | 192 | 7 |
| node-108 | 1,036 | 4.5 | 91 | 1 | 150 | 0 |
| node-109 | 3,730 | 2.4 | 34 | 47 | 203 | 0 |
| node-110 | 4,541 | 4.0 | 15 | 18 | 169 | 0 |
| node-111 | 4,763 | 1.0 | 52 | 50 | 248 | 0 |
| node-112 | 5,179 | 1.0 | 26 | 48 | 378 | 0 |
| node-113 | 1,566 | 2.5 | 51 | 52 | 156 | 0 |
| node-114 | 2,807 | 2.7 | 22 | 22 | 281 | 0 |
| node-115 | 2,708 | 1.8 | 58 | 66 | 257 | 0 |
| node-116 | 2,523 | 4.4 | 121 | 91 | 51 | 0 |
| node-117 | 4,032 | 1.7 | 46 | 29 | 86 | 0 |
| node-118 | 4,173 | 2.6 | 80 | 23 | 345 | 0 |
| node-119 | 3,042 | 1.6 | 72 | 82 | 61 | 0 |
| node-120 | 4,342 | 4.1 | 108 | 12 | 130 | 9 |
| node-121 | 4,294 | 3.5 | 91 | 75 | 52 | 0 |
| node-122 | 608 | 2.3 | 43 | 78 | 152 | 2 |
| node-123 | 1,494 | 2.4 | 72 | 48 | 157 | 0 |
| node-124 | 958 | 1.9 | 87 | 64 | 343 | 0 |
| node-125 | 2,389 | 4.1 | 37 | 67 | 390 | 8 |
| node-126 | 4,806 | 4.1 | 43 | 50 | 262 | 3 |
| node-127 | 1,133 | 1.3 | 71 | 67 | 211 | 0 |
| node-128 | 2,108 | 2.2 | 74 | 24 | 362 | 0 |
| node-129 | 3,810 | 1.7 | 31 | 25 | 132 | 4 |
| node-130 | 4,992 | 0.8 | 37 | 11 | 183 | 0 |
| node-131 | 3,801 | 1.0 | 34 | 66 | 142 | 0 |
| node-132 | 2,670 | 3.5 | 63 | 24 | 267 | 0 |
| node-133 | 4,886 | 2.9 | 50 | 18 | 123 | 0 |
| node-134 | 2,967 | 2.5 | 24 | 30 | 359 | 0 |
| node-135 | 1,021 | 3.8 | 77 | 36 | 93 | 0 |
| node-136 | 3,680 | 1.3 | 45 | 40 | 260 | 0 |
| node-137 | 3,493 | 1.3 | 51 | 23 | 216 | 2 |
| node-138 | 3,234 | 2.5 | 59 | 82 | 65 | 0 |
| node-139 | 1,113 | 2.0 | 81 | 69 | 455 | 2 |
| node-140 | 2,348 | 3.7 | 52 | 29 | 387 | 0 |
| node-141 | 1,392 | 2.0 | 42 | 77 | 242 | 8 |
| node-142 | 637 | 2.4 | 40 | 55 | 95 | 7 |
| node-143 | 1,524 | 1.1 | 38 | 39 | 325 | 0 |
| node-144 | 424 | 1.8 | 25 | 56 | 53 | 0 |
| node-145 | 2,550 | 3.0 | 82 | 39 | 159 | 3 |
| node-146 | 1,595 | 1.2 | 72 | 45 | 67 | 0 |
| node-147 | 3,464 | 1.3 | 37 | 13 | 341 | 0 |
| node-148 | 3,986 | 4.3 | 79 | 42 | 336 | 0 |
| node-149 | 1,809 | 3.5 | 15 | 56 | 279 | 0 |
| node-150 | 1,623 | 3.0 | 48 | 52 | 161 | 0 |
| node-151 | 3,773 | 0.9 | 73 | 65 | 297 | 0 |
| node-152 | 1,353 | 4.1 | 24 | 93 | 455 | 0 |
| node-153 | 3,345 | 1.8 | 81 | 3 | 197 | 0 |
| node-154 | 592 | 3.0 | 15 | 55 | 330 | 0 |
| node-155 | 2,571 | 1.0 | 87 | 76 | 237 | 7 |
| node-156 | 2,217 | 3.7 | 48 | 51 | 205 | 0 |
| node-157 | 1,123 | 0.9 | 42 | 89 | 258 | 0 |
| node-158 | 3,970 | 3.9 | 126 | 38 | 376 | 0 |
| node-159 | 1,527 | 1.5 | 73 | 67 | 279 | 0 |
| node-160 | 3,499 | 1.6 | 67 | 50 | 211 | 0 |
| node-161 | 4,555 | 4.1 | 24 | 68 | 115 | 0 |
| node-162 | 4,003 | 3.2 | 23 | 88 | 304 | 0 |
| node-163 | 1,332 | 1.0 | 75 | 80 | 288 | 0 |
| node-164 | 4,093 | 1.5 | 104 | 19 | 332 | 4 |
| node-165 | 4,985 | 3.5 | 90 | 17 | 255 | 0 |
| node-166 | 2,347 | 0.6 | 76 | 49 | 254 | 8 |
| node-167 | 3,938 | 1.6 | 119 | 81 | 173 | 0 |
| node-168 | 3,096 | 3.5 | 42 | 54 | 205 | 0 |
| node-169 | 2,816 | 2.8 | 144 | 73 | 83 | 0 |
| node-170 | 1,991 | 3.7 | 23 | 6 | 317 | 0 |
| node-171 | 302 | 1.7 | 42 | 15 | 94 | 0 |
| node-172 | 4,062 | 0.9 | 42 | 80 | 152 | 0 |
| node-173 | 2,161 | 1.2 | 120 | 26 | 331 | 7 |
| node-174 | 659 | 3.2 | 82 | 16 | 178 | 0 |
| node-175 | 3,371 | 0.7 | 100 | 42 | 465 | 5 |
| node-176 | 1,207 | 3.4 | 76 | 63 | 192 | 0 |
| node-177 | 541 | 1.6 | 44 | 63 | 233 | 2 |
| node-178 | 2,497 | 2.9 | 71 | 2 | 420 | 0 |
| node-179 | 5,134 | 2.4 | 58 | 15 | 124 | 0 |
| node-180 | 2,817 | 3.7 | 36 | 62 | 175 | 0 |
| node-181 | 1,910 | 3.2 | 27 | 26 | 63 | 0 |
| node-182 | 366 | 3.4 | 88 | 55 | 146 | 0 |
| node-183 | 2,615 | 0.9 | 61 | 76 | 282 | 0 |
| node-184 | 4,378 | 4.2 | 24 | 22 | 287 | 0 |
| node-185 | 1,972 | 3.5 | 103 | 17 | 202 | 0 |
| node-186 | 4,494 | 1.1 | 54 | 2 | 427 | 7 |
| node-187 | 673 | 2.1 | 28 | 27 | 153 | 0 |
| node-188 | 5,099 | 2.9 | 37 | 23 | 150 | 4 |
| node-189 | 3,380 | 2.3 | 34 | 36 | 263 | 0 |
| node-190 | 2,286 | 1.1 | 62 | 39 | 231 | 0 |
| node-191 | 2,929 | 2.8 | 47 | 68 | 227 | 4 |
| node-192 | 2,144 | 4.1 | 83 | 84 | 394 | 0 |
| node-193 | 3,454 | 1.5 | 81 | 84 | 88 | 0 |
| node-194 | 3,325 | 1.9 | 87 | 46 | 290 | 0 |
| node-195 | 1,771 | 2.9 | 90 | 45 | 66 | 0 |
| node-196 | 3,492 | 1.6 | 92 | 92 | 126 | 0 |
| node-197 | 1,085 | 0.8 | 33 | 86 | 52 | 0 |
| node-198 | 2,343 | 3.3 | 55 | 84 | 234 | 0 |
| node-199 | 2,385 | 2.7 | 19 | 18 | 212 | 0 |
| node-200 | 4,693 | 3.7 | 79 | 32 | 160 | 0 |
| node-201 | 3,365 | 2.5 | 124 | 9 | 125 | 0 |
| node-202 | 2,188 | 2.9 | 6 | 39 | 368 | 0 |
| node-203 | 3,794 | 0.9 | 15 | 30 | 323 | 0 |
| node-204 | 3,458 | 1.4 | 94 | 74 | 290 | 0 |
| node-205 | 926 | 1.4 | 47 | 61 | 453 | 0 |
| node-206 | 3,267 | 3.5 | 62 | 37 | 329 | 0 |
| node-207 | 297 | 2.1 | 91 | 58 | 278 | 3 |
| node-208 | 2,303 | 3.8 | 33 | 43 | 283 | 0 |
| node-209 | 3,220 | 3.6 | 105 | 15 | 66 | 0 |
| node-210 | 2,968 | 1.6 | 42 | 44 | 143 | 5 |
| node-211 | 4,295 | 2.2 | 92 | 6 | 282 | 0 |
| node-212 | 899 | 3.7 | 106 | 46 | 67 | 0 |
| node-213 | 389 | 3.2 | 70 | 91 | 315 | 0 |
| node-214 | 3,096 | 3.6 | 56 | 24 | 359 | 0 |
| node-215 | 2,507 | 0.8 | 111 | 57 | 233 | 5 |
| node-216 | 3,589 | 1.4 | 44 | 37 | 119 | 7 |
| node-217 | 2,072 | 2.0 | 67 | 27 | 71 | 0 |
| node-218 | 3,242 | 1.6 | 79 | 46 | 212 | 0 |
| node-219 | 3,144 | 3.6 | 14 | 19 | 320 | 6 |
| node-220 | 1,139 | 1.2 | 25 | 74 | 361 | 9 |
| node-221 | 841 | 3.4 | 91 | 81 | 261 | 0 |
| node-222 | 2,065 | 2.7 | 45 | 23 | 135 | 0 |
| node-223 | 3,185 | 1.9 | 85 | 43 | 443 | 3 |
| node-224 | 2,953 | 1.8 | 142 | 68 | 97 | 0 |
| node-225 | 4,250 | 2.4 | 88 | 87 | 128 | 0 |
| node-226 | 3,049 | 1.8 | 71 | 64 | 367 | 0 |
| node-227 | 2,253 | 3.0 | 64 | 25 | 315 | 8 |
| node-228 | 810 | 1.7 | 18 | 81 | 401 | 0 |
| node-229 | 1,479 | 2.6 | 50 | 77 | 359 | 5 |
| node-230 | 756 | 1.6 | 97 | 76 | 249 | 0 |
| node-231 | 4,033 | 2.3 | 66 | 68 | 409 | 0 |
| node-232 | 512 | 2.8 | 62 | 81 | 227 | 0 |
| node-233 | 2,135 | 2.0 | 96 | 28 | 173 | 3 |
| node-234 | 2,267 | 0.8 | 22 | 12 | 384 | 7 |
| node-235 | 2,770 | 3.7 | 95 | 34 | 319 | 4 |
| node-236 | 4,191 | 1.4 | 47 | 81 | 268 | 0 |
| node-237 | 4,603 | 3.3 | 36 | 22 | 416 | 0 |
| node-238 | 628 | 3.2 | 66 | 20 | 151 | 0 |
| node-239 | 3,385 | 1.3 | 144 | 63 | 199 | 0 |
| node-240 | 3,956 | 2.0 | 66 | 11 | 101 | 9 |
| node-241 | 3,230 | 2.1 | 49 | 84 | 336 | 5 |
| node-242 | 2,935 | 1.9 | 34 | 28 | 104 | 0 |
| node-243 | 4,340 | 1.1 | 84 | 69 | 95 | 0 |
| node-244 | 1,382 | 1.3 | 72 | 48 | 390 | 0 |
| node-245 | 4,296 | 2.7 | 78 | 45 | 61 | 0 |
| node-246 | 3,408 | 2.4 | 101 | 39 | 125 | 0 |
| node-247 | 2,395 | 3.5 | 109 | 35 | 63 | 0 |
| node-248 | 4,174 | 2.0 | 96 | 48 | 131 | 0 |
| node-249 | 1,357 | 3.8 | 65 | 38 | 84 | 0 |
| node-250 | 3,584 | 0.7 | 75 | 38 | 260 | 0 |
| node-251 | 998 | 1.4 | 65 | 77 | 51 | 0 |
| node-252 | 790 | 2.9 | 27 | 19 | 331 | 0 |
| node-253 | 1,652 | 1.4 | 46 | 27 | 253 | 1 |
| node-254 | 4,578 | 1.5 | 94 | 78 | 331 | 0 |
| node-255 | 961 | 3.6 | 95 | 70 | 218 | 0 |
| node-256 | 1,646 | 1.4 | 37 | 50 | 252 | 0 |
How it works
The report
The numbers ride on your stream itself. The report view renders a probe, one value for every tab, and the site's frame writer keeps your stream's probe from then on. Each time it writes a tick's frames, it first asks the probe for a report, which reads the stream at that moment:
func read(st *sse.Stream, m *demo.Meter, now time.Time) Reading {
r := Reading{Frames: m.Frames, Coding: st.Encoding(), Last: m.Last, FPS: m.Rate(now, 4*time.Second), Beats: m.Beats}
r.Tier, r.Heap = st.Tier()
r.Events, r.Wire = st.Sent()
if b := st.Budget(); b != nil {
r.Budget = b.Stats()
}
return r
}
demo.Meter is the frame writer's count of the stream's writes: the bytes of each, when they went out, and what the hub sent in between. The report goes out as a patch of $_stream in the same write as the frames, so it describes the stream up to the frame before. On this page every frame carries one; in the landing page's slot, one a second at most.
The coding
sse.Negotiate picks the coding with the highest weight in your browser's Accept-Encoding, zstd before brotli before gzip when they tie. Chrome, Edge and Firefox accept zstd, Safari from 26.3. zstd sends more bytes than brotli for a sixth of its CPU or less: on one core, a 57 KB page with five rows changed per frame took zstd 36 to 41 µs a frame for 405 bytes on the wire, and brotli at quality 4 251 to 265 µs for 121 bytes. The coding reads none when your browser accepted none, or when the budget had no room for a brotli or gzip encoder.
The setting from the budget
The hub shares a memory budget among its streams' encoders: half the process's memory limit. This site runs with GOMEMLIMIT=192MiB, so the encoders share 96 MiB. A stream gets the largest setting that fits both its fair share, the limit divided by the open streams, and what is left of the limit:
| Setting | Window | Reserved |
|---|---|---|
zstd 2^19 |
512 KiB, with twice that as history | 1.66 MiB |
zstd 2^19 low memory |
512 KiB | 1.08 MiB |
zstd 2^18 low memory |
256 KiB | 848 KiB |
br q4 2^18 |
256 KiB | 2.14 MiB |
The window is how far back the encoder looks for what a frame repeats. Low memory keeps zstd's history at the window, for more CPU per frame. When a new stream finds no room, every zstd stream above the new fair share moves down at its next write, so your setting can change while you watch; when not even 2^18 fits, a stream goes out uncompressed. zstd asleep is a zstd stream that holds no encoder: after a hibernation, or while the budget has no room for it, when its frames go out in raw blocks.
Reserved for your encoder
The heap that the budget reserves for your setting: what lith measured an encoder of that setting to hold after a session of 142 KB frames, rounded up. The budget adds up these reservations; it does not measure the heap.
Events and the wire
Events are the Datastar events as the server formats them: datastar-patch-elements with your table's HTML and datastar-patch-signals with these numbers in JSON. The wire is what your encoder made of them, the bytes the server wrote, before TLS and HTTP framing. The ratio so far divides the one by the other, from the stream's first byte.
The last frame
A frame here is one write: the views that changed in a tick, compressed and flushed together. Its ratio tells how many bytes of events went into each byte on the wire. The large table's frame carries about 28 KB of events; with calm churn eight of its 1,536 cells change, and the frame takes a few hundred bytes. With storm a quarter of the cells change, and the ratio falls to about 7:1.
The window must hold the frame before, or there is nothing to refer back to. In lith's measurements a board of 142 KB a frame takes 1,471 bytes on the wire with a 2^19 window, 2,703 at 2^18 with low memory, and 10,831 at 2^17, where the frame before is out of reach. A stream's first frame has no history at all, and neither has the first frame after a hibernation: those are the spikes in the line.
Frames a second
The table view renders every 250 ms, and a little more than that apart in practice: each render is due 250 ms after the tick that ran the one before. The rate counts the writes of the last four seconds.
Heartbeats
After 20 s without a frame, the hub sends an SSE comment, three bytes of events, so that proxies keep the connection open. The page never sees a comment; the meter finds the heartbeats as the bytes the stream sent between two of its writes. While the table moves there are none. Pick Still, wait half a minute and pick Calm again: the next report counts them.
Hibernation
After a minute without a frame, the hub hibernates the stream (live.Options.Hibernate): the stream ends its zstd frame, gives its encoder to a pool and its reservation back to the budget, and its setting reads zstd asleep. A heartbeat then goes out in a zstd frame of its own, 15 bytes instead of 6. The next frame takes an encoder from the pool and starts without history: lith measured a 37 KB list at 3,790 bytes on the wire after waking.
The site's streams and the budget
Every stream of the hub opens through the budget, which counts them by what they hold: that gives the number of open streams and the list under the meter. The meter is the reserved heap against the limit. With 200 open streams this site measured 110 MB resident, 100 MB of it the encoders' budget, with 115 streams at zstd 2^18 with low memory and the rest uncompressed.
The payload
Your choice of size and churn is your tab's row in site_tabs, written by a command. Still freezes the table at the step it was chosen:
func (c SetPayload) Apply(tx *writer.Tx) error {
var s TabState
if err := demo.LoadTab(tx.Context(), tx, Slug, c.Viewer, &s); err != nil {
return err
}
if c.Size != "" {
s.Size = c.Size
}
if c.Churn == Still && s.churn() != Still {
s.Frozen, s.From = StepAt(c.At), s.churn()
}
if c.Churn != "" {
s.Churn = c.Churn
}
s.Op = c.Op
return demo.SaveTab(tx, Slug, c.Viewer, s, c.At)
}
The table at a step is a function of its size, its churn and the step: the cells change in an order that visits every cell before it comes round again, a fixed number of them per step. So the tabs that chose the same share one render of each step, and your tab's view only reads your row and picks that render.
What the inspector costs the server
Measured on 2026-10-13 on an Intel i5-13500, with the site's binary on four cores and GOMEMLIMIT=192MiB as deployed: 100 inspectors with the large table, read by a load test on other cores that does not decompress them, over 60 s each:
| Churn | CPU | Bytes a frame | Heap after a collection |
|---|---|---|---|
| Calm | 0.08 cores | 503 | 87 MiB |
| Busy | 0.09 cores | 1,619 | 87 MiB |
| Storm | 0.16 cores | 4,413 | 89 MiB |
The budget gave all 100 streams zstd 2^18 low memory, 82.8 of its 96 MiB, which is most of that heap. The CPU goes into compressing about 400 frames a second; the table renders once a step for all the tabs that share it. Between collections the heap grows to the goal that the memory limit sets, so the process stayed at 190 to 197 MiB resident, below the unit's MemoryHigh=224M.