Vercel Ship Announced: What It Means for Small Development Agencies
Vercel's new all-in-one deployment suite launched. We tested it on 3 client projects to see if it's worth consolidating our tool stack.
Last week at Next.js Conf, Vercel announced Ship—a new all-in-one deployment platform that promises to consolidate monitoring, storage, conformance testing, and security scanning into a single suite. The pitch is simple: stop stitching together five different tools and manage everything from one dashboard.
As a small agency running a dozen client projects on Vercel, our immediate reaction was "sounds great, but what's the catch?" We currently juggle Sentry for error tracking, a mix of Vercel KV and Postgres for storage, manual conformance checks, and basic security scanning. Could Ship actually replace this stack? And more importantly, would it save us money or cost more?
We spent the last week testing Ship on three real client projects. Here's what we learned.
What Actually Is Vercel Ship?
Ship is Vercel's new integrated platform that bundles six core capabilities:
- Deployment: The same edge deployment we already use
- Monitoring: Real-time performance metrics, error tracking, and logs
- Storage: Postgres, KV (Redis), and Blob storage, all managed
- Conformance: Automated checks for Next.js best practices and performance
- Security: Dependency scanning, secret detection, and vulnerability alerts
- Analytics: Web vitals, user analytics, and custom events
Previously, you'd get deployment with Vercel and cobble together the rest. Now it's one integrated offering. The official Ship documentation positions it as "everything you need to ship production-grade applications."
The key promise: fewer integrations, less context switching, unified billing.
Our Testing Methodology: 3 Real Projects
We picked three client projects with different requirements to see how Ship performed across various use cases.
Project 1: E-commerce Site (Next.js 14, High Traffic)
- Stack: Next.js 14, Postgres, Redis for session storage
- Current tools: Vercel deployment, Supabase Postgres, Upstash Redis, Sentry
- Monthly cost: Around £120 total
- Traffic: 50k monthly visits, 2k daily active users
We migrated this to Ship's managed Postgres and KV storage, plus enabled the full monitoring suite.
Project 2: SaaS Dashboard (App Router, Real-time Features)
- Stack: Next.js 14 App Router, Postgres, Blob storage for uploads
- Current tools: Vercel deployment, self-hosted Postgres on Railway, S3 for files
- Monthly cost: Around £45 total
- Traffic: Lower volume but critical uptime requirements
This one was perfect for testing Ship's conformance tools since we're using newer App Router patterns.
Project 3: Marketing Site (Static-Heavy, Low Complexity)
- Stack: Next.js 14, mostly static pages with some dynamic API routes
- Current tools: Vercel deployment, no additional services
- Monthly cost: £0 (on Hobby plan)
- Traffic: 5k monthly visits
A simple case to see if Ship added value to projects that don't need much infrastructure.
What We Actually Did: Migration Process
Migrating Storage (Projects 1 & 2)
The storage migration was surprisingly smooth. For Project 1, we created a new Vercel Postgres database and used pg_dump to transfer data:
# Export from Supabase
pg_dump $SUPABASE_CONNECTION_STRING > backup.sql
# Import to Vercel Postgres
psql $VERCEL_POSTGRES_URL < backup.sqlRedis migration to Vercel KV required updating our session handling code slightly. Vercel KV uses the same Redis protocol but with different connection patterns:
// Before (Upstash)
import { Redis } from '@upstash/redis'
const redis = new Redis({
url: process.env.UPSTASH_URL,
token: process.env.UPSTASH_TOKEN
})
// After (Vercel KV)
import { kv } from '@vercel/kv'
// Connection details pulled from env automatically
await kv.set('session:123', data)Total migration time for Project 1: About 3 hours, mostly waiting for data to transfer.
Enabling Monitoring
This was the easiest part. Ship's monitoring is automatically enabled for all deployments—no SDK to install, no configuration needed. It just starts collecting data once you opt in via the dashboard.
Within 24 hours, we had:
- Real-time error tracking
- Core Web Vitals per route
- API endpoint performance metrics
- Database query analytics
Setting Up Conformance Rules
The conformance feature caught us off guard. It automatically scans your Next.js codebase for anti-patterns and performance issues. On Project 2, it immediately flagged:
- Unused client components that should be server components
- Missing
loading.tsxfiles for routes with data fetching - Non-optimized images using
<img>instead ofnext/image
We fixed two of these issues and saw measurable improvement in Core Web Vitals within a week.
Problems We Hit
Issue 1: Database Connection Limits
Vercel Postgres has aggressive connection limits on lower tiers. Project 1 hit the 100 connection limit within 48 hours of launch because we weren't using connection pooling properly.
Error we saw:
Error: too many connections for role "default"
The fix: We had to implement Prisma's connection pooling and add a connection limiter:
// prisma/schema.prisma
datasource db {
provider = "postgresql"
url = env("POSTGRES_PRISMA_URL") // Uses pooling
directUrl = env("POSTGRES_URL_NON_POOLING") // For migrations
}This wasn't well-documented in the Ship migration guide. We found the solution in Vercel's Postgres best practices docs.
Issue 2: KV Pricing Shock
Vercel KV pricing is based on commands, not storage. On Project 1 (the e-commerce site), our session management pattern was calling GET and SET on every request. Within a week, we'd burned through the included 100k commands and were getting charged per command.
Monthly projection: £65 just for KV (vs. £8 with Upstash).
The fix: We implemented a caching layer to reduce Redis calls by 70%:
// Cache user sessions in memory for 5 minutes
const sessionCache = new Map()
async function getSession(sessionId: string) {
const cached = sessionCache.get(sessionId)
if (cached && Date.now() - cached.timestamp < 300000) {
return cached.data
}
const session = await kv.get(`session:${sessionId}`)
sessionCache.set(sessionId, { data: session, timestamp: Date.now() })
return session
}Issue 3: Monitoring Noise
Ship's error tracking caught everything—including third-party script errors we couldn't control. Our error dashboard was flooded with noise from Google Analytics, Facebook Pixel, and other client-side scripts.
We couldn't find a way to filter these out in the Ship dashboard. With Sentry, we had ignore patterns configured. This made the monitoring less useful than we'd hoped.
How Ship Compares to Our Old Stack
The Good
Unified dashboard: Having errors, performance metrics, and database queries in one place is genuinely useful. No more switching between Sentry, Vercel Analytics, and Railway dashboards.
Conformance is a hidden gem: The automated Next.js best practice checks caught issues we didn't know we had. On Project 2, fixing the flagged issues improved Lighthouse scores by 12 points.
Zero-config monitoring: Not having to install error tracking SDKs or configure sourcemaps saves hours of setup time.
Storage co-location: Vercel Postgres lives on the same infrastructure as your functions. We saw 20-30ms faster database queries compared to our previous Railway setup (which was in a different region).
The Not-So-Good
Pricing can escalate quickly: For high-traffic projects, Vercel KV costs can spiral. Our e-commerce site would cost more on Ship than our current Upstash + Supabase combo.
Limited customization: Error tracking isn't as configurable as Sentry. No custom ignore rules, no release tracking, no user feedback forms.
Lock-in anxiety: Moving all infrastructure to one provider feels risky for a small agency. If Vercel has an outage, everything goes down. With our distributed stack, we had some redundancy.
Overkill for simple projects: Project 3 (the marketing site) didn't benefit from Ship at all. Monitoring a static site with minimal features felt unnecessary.
What Ship Could Replace in Your Stack
Based on our testing, Ship can reasonably replace:
✅ Error tracking (Sentry, Bugsnag) - for simple use cases ✅ Basic analytics (Google Analytics, Plausible) - if you only need web vitals ✅ Managed Postgres (Supabase, Railway, PlanetScale) ✅ Redis hosting (Upstash, Redis Cloud) - if traffic is low to moderate ✅ File storage (S3, Cloudinary) - for straightforward blob storage ✅ Performance monitoring (Lighthouse CI, SpeedCurve)
It probably can't replace:
❌ Advanced error tracking - Sentry's features (release tracking, custom tags, user feedback) are more mature ❌ Complex analytics - No conversion funnels, user paths, or custom events like Mixpanel ❌ High-volume KV storage - Pricing becomes expensive fast ❌ Multi-cloud redundancy - Everything is Vercel infrastructure
Our Pricing Analysis
Here's what we'd pay for Project 1 (the e-commerce site) on Ship vs. our current stack:
Current stack:
- Vercel Pro: £20/month
- Supabase Postgres: £25/month
- Upstash Redis: £8/month
- Sentry: £26/month
- Total: £79/month
Ship (projected):
- Vercel Pro (includes Ship monitoring): £20/month
- Vercel Postgres (Pro tier for connection limits): £40/month
- Vercel KV (with our optimizations): £25/month
- Total: £85/month
It's slightly more expensive, but the time savings from not managing four separate platforms might justify the £6/month premium. For Project 2 (the SaaS dashboard), Ship was actually £12/month cheaper.
So Is It Worth Consolidating?
For us, selectively.
We're moving Project 2 (SaaS dashboard) entirely to Ship. The unified experience and conformance tooling provide real value, and the pricing is competitive.
Project 1 (e-commerce) is staying on our hybrid stack for now. The KV costs are too high for our traffic patterns, and we'd miss Sentry's advanced error tracking features.
Project 3 (marketing site) doesn't need Ship at all. The free Vercel Hobby plan handles it fine.
Our recommendation: Ship makes sense if you're starting a new Next.js project on Vercel and want to avoid infrastructure decisions. You'll get a solid, integrated platform with good defaults. For existing projects with established tooling and optimized costs, the migration might not save you money—but it could save you time.
What We're Watching
A few areas where Ship needs to mature before we'd commit fully:
- Better error filtering: Let us ignore third-party script errors
- More transparent KV pricing: Show projected costs in the dashboard before we get surprised
- Release tracking: Tag errors and metrics by deployment for easier debugging
- Multi-region Postgres: Option to deploy databases closer to users outside the US
Vercel has a track record of listening to feedback and iterating fast. We expect many of these will improve over the next few quarters.
Key Takeaways
- Ship is a genuine attempt to simplify the modern web stack, not just vendor lock-in
- Storage co-location with your functions is noticeably faster
- Conformance tooling catches real performance issues automatically
- Pricing can escalate for high-traffic projects—watch your KV usage carefully
- For new projects, Ship is a smart default; for existing setups, run the numbers first
- The unified dashboard actually does reduce cognitive overhead
If you're building a new Next.js application, Ship is worth considering seriously. If you're running production apps on a tight budget, migrate one project first and measure the costs before going all-in.
Planning a Next.js project and unsure about infrastructure? We've now deployed on Ship, Railway, Supabase, and several other platforms. Get in touch if you'd like help choosing the right stack for your requirements and budget.