feat(tables): raise per-plan table limits (free 5/50k, pro 100/100k, max 1k/500k) (#5135)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Theodore Li
2026-06-18 22:05:19 -04:00
committed by GitHub
co-authored by Claude Opus 4.8
parent f0b3550729
commit c419a34317
3 changed files with 17 additions and 17 deletions
@@ -38,7 +38,7 @@ const PRICING_TIERS: PricingTier[] = [
features: [
'1,000 credits (trial)',
'5GB file storage',
'3 tables · 1,000 rows each',
'5 tables · 50,000 rows each',
'1 personal workspace',
'5 min execution limit',
'7-day log retention',
@@ -56,7 +56,7 @@ const PRICING_TIERS: PricingTier[] = [
features: [
'6,000 credits/mo · +50/day',
'50GB file storage',
'25 tables · 5,000 rows each',
'100 tables · 100,000 rows each',
'Up to 3 personal workspaces',
'50 min execution · 150 runs/min',
'Unlimited log retention',
@@ -74,7 +74,7 @@ const PRICING_TIERS: PricingTier[] = [
features: [
'25,000 credits/mo · +200/day',
'500GB file storage',
'25 tables · 5,000 rows each',
'1,000 tables · 500,000 rows each',
'Up to 10 personal workspaces',
'50 min execution · 300 runs/min',
'Unlimited log retention',
@@ -91,7 +91,7 @@ const PRICING_TIERS: PricingTier[] = [
features: [
'Custom credits & infra limits',
'Custom file storage',
'10,000 tables · 1M rows each',
'Custom tables & rows',
'Unlimited shared workspaces',
'Custom execution limits',
'Unlimited log retention',
+6 -6
View File
@@ -75,12 +75,12 @@ export const env = createEnv({
TABLE_SNAPSHOT_CACHE: z.boolean().optional(), // Mount tables into sandboxes by reference via a version-keyed CSV snapshot in object storage instead of draining the whole table into web-process heap
// Table feature limits (per plan). Apply when billing is disabled (free tier defaults) or for billed plans.
FREE_TABLES_LIMIT: z.number().optional(), // Max user tables per workspace on free tier (default: 3)
FREE_TABLE_ROWS_LIMIT: z.number().optional(), // Max rows per table on free tier (default: 1000)
PRO_TABLES_LIMIT: z.number().optional(), // Max user tables per workspace on pro tier (default: 25)
PRO_TABLE_ROWS_LIMIT: z.number().optional(), // Max rows per table on pro tier (default: 5000)
TEAM_TABLES_LIMIT: z.number().optional(), // Max user tables per workspace on team tier (default: 100)
TEAM_TABLE_ROWS_LIMIT: z.number().optional(), // Max rows per table on team tier (default: 10000)
FREE_TABLES_LIMIT: z.number().optional(), // Max user tables per workspace on free tier (default: 5)
FREE_TABLE_ROWS_LIMIT: z.number().optional(), // Max rows per table on free tier (default: 50000)
PRO_TABLES_LIMIT: z.number().optional(), // Max user tables per workspace on pro tier (default: 100)
PRO_TABLE_ROWS_LIMIT: z.number().optional(), // Max rows per table on pro tier (default: 100000)
TEAM_TABLES_LIMIT: z.number().optional(), // Max user tables per workspace on team tier (default: 1000)
TEAM_TABLE_ROWS_LIMIT: z.number().optional(), // Max rows per table on team tier (default: 500000)
ENTERPRISE_TABLES_LIMIT: z.number().optional(), // Max user tables per workspace on enterprise tier (default: 10000)
ENTERPRISE_TABLE_ROWS_LIMIT: z.number().optional(), // Max rows per table on enterprise tier (default: 1000000)
+7 -7
View File
@@ -31,7 +31,7 @@ export const TABLE_LIMITS = {
* keyset-select and cancel/ownership-check granularity. */
DELETE_PAGE_SIZE: 10000,
/** Row count above which an export runs as a background job instead of a synchronous stream.
* Matches the default per-table row cap, so non-enterprise tables keep instant downloads. */
* Tables at or under this stream instantly; larger ones fall back to an async export job. */
EXPORT_ASYNC_THRESHOLD_ROWS: 10000,
/** Cap on the exclusion set ("select all, minus these") sent to an async delete job. */
MAX_EXCLUDE_ROW_IDS: 10000,
@@ -44,16 +44,16 @@ export const TABLE_LIMITS = {
*/
export const DEFAULT_TABLE_PLAN_LIMITS = {
free: {
maxTables: 3,
maxRowsPerTable: 1000,
maxTables: 5,
maxRowsPerTable: 50000,
},
pro: {
maxTables: 25,
maxRowsPerTable: 5000,
maxTables: 100,
maxRowsPerTable: 100000,
},
team: {
maxTables: 100,
maxRowsPerTable: 10000,
maxTables: 1000,
maxRowsPerTable: 500000,
},
enterprise: {
maxTables: 10000,