fshy

fshy / Compute / Storage

Val Town

val.town · Compute, Storage · 3 records · JSON

Val Town Compute

caveatemailno cardDretention-clamped

www.val.town/limits · serverless runtime · compute/val-town · JSON · compare

Free tierA 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
Pricenone stated
Per-object capnot applicable
RetentionThe 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.
Egressnot stated
Identityemail not published
Limits
  • 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. source
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.
Bindingretention-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.
Interfacerest inferred from the tooling the provider documents; not probed
Toolingnot stated
Composes withA 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
Reliabilityno reliability event recorded
NotesVal 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 rungdocumented
Checked2026-10-22 (live); stale on 2026-11-21
Parsed numbers
  • $.limits[0].value limit:retention-clamped 15.0 minutes
Evidence (3)
datesourcewhat it proved
2026-10-22www.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-22www.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-22www.val.town/pricingthe 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.metered egress-unknown
  • $.egress.terms not-stated
  • $.identity_cost.detail process
  • $.per_object_cap.notes process
  • $.per_object_cap.stated not-applicable
  • $.reliability_note none-observed
  • $.retention.notes process
  • $.tooling not-stated

Val Town Storage

fails: quotaemail?card?R

val.town · serverless · storage/val-town · JSON · compare

Free tierFree 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
Pricenone stated
Per-object capnot stated
Retentionnot stated
EgressVals serve HTTP by default with no transfer meter — the serving side is genuinely free.
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaces3, rest rest
Toolingstd/blob TypeScript API (scoped blobs on S3, global blobs on Cloudflare R2); vals themselves are HTTP endpoints at <val>.web.val.run.
Composes withVal 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.
ReliabilityThe R2/S3 backing is real and fast; the quota is the blocker, not the tech.
NotesFree 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 rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (2)
datesourcewhat it proved
2026-10-21docs.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-21www.val.town/limitsFree: 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_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.per_object_cap.notes not-extracted
  • $.per_object_cap.stated not-extracted
  • $.retention.notes not-extracted
  • $.retention.stated not-extracted

val town — blob storage Storage

fails: quotaemail?card?R

docs.val.town/std/blob/ · rejected-provider · storage/val-town-blob-storage · JSON · compare

Free tierBlob 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
Pricenone stated
Per-object capnot recorded
Retentionnot recorded
Egressnot recorded
Identityemail (placeholder) not published
Bindingnone no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit
Interfaceunknown
Toolingnot recorded
Composes withnot recorded
ReliabilityBlob 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
NotesBlob 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 rungreported
Checked2026-10-21 (inherited); stale on 2026-11-04
Evidence (2)
datesourcewhat it proved
2026-10-21docs.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-21www.val.town/pricingcited 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)
  • $.chaining not-recorded
  • $.confidence_note withheld
  • $.egress.terms not-recorded
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.identity_cost.detail defaulted
  • $.identity_cost.kind identity-defaulted
  • $.interface interface-unknown
  • $.interface_detail withheld
  • $.limits_note process
  • $.per_object_cap.notes not-recorded
  • $.per_object_cap.stated not-recorded
  • $.retention.notes process
  • $.retention.stated not-recorded
  • $.tooling not-recorded