Val Town
val.town · Compute, Storage · 3 records · JSON
- Val Town Computecaveatemailno cardDretention-clamped
- Val Town Storagefails: quotaemail?card?R
- val town — blob storage Storagefails: quotaemail?card?R
Val Town Compute
caveatemailno cardDretention-clamped
| Free tier | A free plan whose crons run every 15 minutes at minimum and whose workers are killed after 10 seconds idle, with a hard 6-hour ceiling on any worker: quoted 'Worker idle timeout | 10 sec' and 'Worker runtime | 6 hrs Absolute ceiling on a single worker's lifetime, regardless of plan'. unit hours; metered on wall-clock; perpetual |
|---|---|
| Price | none stated |
| Per-object cap | not applicable |
| Retention | The 10-second idle timeout ends any process that is not answering requests, so the host is a scheduler and not a machine: what survives is the cron every 15 minutes, not a daemon. |
| Egress | not stated |
| Identity | email not published |
| Limits |
The 10-second idle timeout ends any process that is not answering requests, so the host is a scheduler and not a machine: what survives is the cron every 15 minutes, not a daemon. |
| Binding | retention-clamped The 10-second idle timeout ends any process that is not answering requests, so the host is a scheduler and not a machine: what survives is the cron every 15 minutes, not a daemon. |
| Interface | rest inferred from the tooling the provider documents; not probed |
| Tooling | not stated |
| Composes with | A 15-minute cron with 100,000 runs a day for nothing is the cheapest scheduler in this class, and 'Email yourself' makes it a free alerting path for a box that is expected to die |
| Reliability | no reliability event recorded |
| Notes | Val Town has no dossier record at all, which is the gap this row fills. The reaper is unusual and worth stating plainly: a worker is not a process, it lives 10 seconds past its last request and cannot exceed 6 hours even on a paid plan, so nothing daemon-shaped runs here. The interesting number is 100,000 runs a day at a 15-minute floor, which is a ceiling on scheduled work rather than on capacity. The free plan is now public-vals-only for new vals, per the operator's 2026-05-26 changelog, which matters for anything holding a secret. |
| Evidence rung | documented |
| Checked | 2026-10-22 (live); stale on 2026-11-21 |
| Parsed numbers |
|
Evidence (3)
| date | source | what it proved |
|---|---|---|
| 2026-10-22 | www.val.town/limits | 'Worker idle timeout | 10 sec How long a worker waits for more requests before shutting down' and 'Worker runtime | 6 hrs Absolute ceiling on a single worker's lifetime, regardless of plan' and 'Worker memory | 4 GiB', quoted |
| 2026-10-22 | www.val.town/limits | 'Minimum cron interval | 15 min' on Free, 'Execution timeout | 1 min' on Free, 'API requests per minute | 1,000' on Free, 'Crons per val | 10', quoted |
| 2026-10-22 | www.val.town/pricing | the Free column: '$0', '15 min cron intervals', '1 min wall clock time / run', 'Unlimited public vals', '100,000 runs / day', 'Email yourself', quoted |
More fields (1)
{
"wave2": {
"class": "paas-never-sleep",
"free_tier_kind": "perpetual",
"shape": {
"vcpu": null,
"ram_gib": 4,
"gpu_class": null,
"gpu_count": 0
}
}
}Unknown or withheld values (8)
$.egress.meteredegress-unknown$.egress.termsnot-stated$.identity_cost.detailprocess$.per_object_cap.notesprocess$.per_object_cap.statednot-applicable$.reliability_notenone-observed$.retention.notesprocess$.toolingnot-stated
Val Town Storage
fails: quotaemail?card?R
| Free tier | Free plan blob storage: '10mb on the free plan and 1gb on pro'. Pro is the ceiling, so there is no free path to bulk. unit none; metered on stored-bytes |
|---|---|
| Price | none stated |
| Per-object cap | not stated |
| Retention | not stated |
| Egress | Vals serve HTTP by default with no transfer meter — the serving side is genuinely free. |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | s3, rest rest |
| Tooling | std/blob TypeScript API (scoped blobs on S3, global blobs on Cloudflare R2); vals themselves are HTTP endpoints at <val>.web.val.run. |
| Composes with | Val creation is capped at 2,500 vals on Free with a 10 MB account-wide blob pool — the pool is per account, not per val, so it does not multiply. |
| Reliability | The R2/S3 backing is real and fast; the quota is the blocker, not the tech. |
| Notes | Free plan blob storage: '10mb on the free plan and 1gb on pro'. Pro is the ceiling, so there is no free path to bulk. |
| Evidence rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.val.town/std/blob/ | 'Blob-stored data counts towards your total Val Town storage – 10mb on the free plan and 1gb on pro' (page last updated September 10, 2026) |
| 2026-10-21 | www.val.town/limits | Free: 2,500 vals, 1 min execution timeout, 100,000 runs/day |
More fields (1)
{
"dead_end": {
"failure_class": "paid",
"why": "Free plan blob storage: '10mb on the free plan and 1gb on pro'. Pro is the ceiling, so there is no free path to bulk.",
"retry_when": null,
"first_recorded": "2026-10-21"
}
}Unknown or withheld values (8)
$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.per_object_cap.notesnot-extracted$.per_object_cap.statednot-extracted$.retention.notesnot-extracted$.retention.statednot-extracted
val town — blob storage Storage
fails: quotaemail?card?R
| Free tier | Blob storage counts against total Val Town storage, which is tiny: 'Blob-stored data counts towards your total Val Town storage – 10mb on the free plan and 1gb on pro.' Three orders of magni unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | Blob storage counts against total Val Town storage, which is tiny: 'Blob-stored data counts towards your total Val Town storage – 10mb on the free plan and 1gb on pro.' Three orders of magni |
| Notes | Blob storage counts against total Val Town storage, which is tiny: 'Blob-stored data counts towards your total Val Town storage – 10mb on the free plan and 1gb on pro.' Three orders of magni |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (2)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | docs.val.town/std/blob/ | Blob storage counts against total Val Town storage, which is tiny: 'Blob-stored data counts towards your total Val Town storage – 10mb on the free plan and 1gb on pro.' Three orders of magni |
| 2026-10-21 | www.val.town/pricing | cited as the basis of the rejection: Blob storage counts against total Val Town storage, which is tiny: 'Blob-stored data counts towards your total Val Town storage – 10mb on the free plan and 1gb on pro.' Three orders of magni |
More fields (1)
{
"dead_end": {
"failure_class": "quota",
"why": "Blob storage counts against total Val Town storage, which is tiny: 'Blob-stored data counts towards your total Val Town storage – 10mb on the free plan and 1gb on pro.' Three orders of magni",
"retry_when": null,
"first_recorded": "2026-10-21"
}
}Unknown or withheld values (15)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded