Limits at a glance
Synth enforces every limit below except the ones marked host, which the reference host enforces at run time.
| What | Limit |
|---|---|
| Files per captured directory | 32, 8 KiB each, 64 KiB together |
| Captured names (goal, trigger, lens, watch, channel, source, consumer, credential keys) | [a-z][a-z0-9-]{0,63} |
| Channel file | 64 KiB; {credential} at most once, nothing else in braces |
| Credentials | 32; description 512 characters; 1 to 32 oauth2 scopes |
| API entries / operations | 32 / 128; 64 writes; 64 parameters per operation; 256 paths and 1 MiB per document; 64 KiB apis.yml; 16 fixed headers |
| GraphQL | 1 to 32 operations, 32 variables each, 16 KiB per document, 64 KiB file, 16 fixed headers, 128 enum values |
| Data-pipe sources, consumers | 128 each; 256 bytes per source field; 64 KiB file |
| Websocket keepalive | 10 seconds to 5 minutes |
| Long-poll interval | at least 1 second (default 5), and never below the operator’s floor (host) |
| Webhook verification reply | 1 KiB |
| Dependencies | 8 on the reference host, modules up to 32 MiB, init script up to 1 MiB (host) |
| Producer joins / pushdown rules / pages | 8 / 16 / 16 |
| Producer fetch | 256 keys, 64 KiB arguments, 1 MiB output, 1,024 rows (host) |
| Graph query | 16 KiB statement, 128 parameters, LIMIT 1 to 512, 1 MiB of rows (host) |
| View aliases | 32 |
| Watches | 16; at least 5 minutes apart; criteria 2048 bytes, judge 1024 bytes; 32 items per run (host) |
| Apps | 32 apps, 32 handlers each, 8 KiB manifest; by default 16 resources, 10 MiB page, 10 MiB per resource and in total, changed with the --app-* flags or a profile |
| Write proposals | 64 KiB, 64 entries per object, 4 levels, 2048-byte key, 32 pending per installation (host; the generated types also refuse a fifth level) |

