Introducing Projects: Organize Your Real-time Apps Without Changing a Line of Code
PushFlo now has projects — isolated namespaces for channels and API keys. Group apps and environments, monitor them separately, and switch by swapping one API key.
You know the feeling. You start with one app on PushFlo. A handful of channels — orders, notifications, dashboard-metrics. Clean, readable, easy to monitor.
Then you add a second app. And a staging environment. And that weekend prototype you never deleted. Now your channel list looks like myapp-orders, otherapp-orders, staging-orders, test-orders-2, and the live console is a firehose of everything at once. Which app is actually busy right now? Good luck.
Today we're shipping the fix: Projects.
What projects are
A project is an isolated namespace inside your organization. Each project gets:
- Its own channels — two projects can both have an
orderschannel without colliding - Its own API keys — credentials scoped to exactly one project
- Its own monitoring — a dedicated console view with live connections, message counts, and an at-a-glance "active now / last active 2h ago" status
Think of it as folders for your real-time infrastructure. One project per app, or per environment, or per customer — however you slice your work.
The part we're most proud of: zero code changes
Here's the thing we obsessed over. Adding projects to your setup requires no changes to your application code. None.
The scoping lives in the API key, not in your code. When you create a credential inside a project, every channel that credential touches is automatically namespaced to that project — on our side, invisibly.
// This exact code works org-wide OR inside a project.
// The only difference is which key you configure.
const client = new PushFloClient({
publishKey: process.env.NEXT_PUBLIC_PUSHFLO_KEY,
});
client.subscribe('orders', {
onMessage: (message) => updateOrderList(message.content),
});
Deploy your staging app with a staging-project key and your production app with a production-project key. Same code, same channel names, fully isolated traffic. Moving an app into a project is literally a config change.
We wrote about this pattern in more depth in our tutorial on running multiple apps from one account.
Your existing setup keeps working
If you never create a project, nothing changes. Your channels stay where they are, your keys work exactly as before, and the console keeps showing everything. Organization-wide credentials continue to see all channels across all projects, so your existing integrations and dashboards don't break when you start adopting projects for new apps.
That was a hard requirement for us: projects are opt-in, not a migration.
Manage projects from code
The console is the easy way to create projects (Projects → Create Project), but everything is scriptable too. SDK v1.1.0 adds full project management with a management key:
import { PushFloServer } from '@pushflodev/sdk/server';
const pushflo = new PushFloServer({ secretKey: 'mgmt_xxxxxxxxxxxxx' });
// Spin up a namespace for a new app
const project = await pushflo.createProject({
name: 'My New App',
slug: 'my-new-app',
});
// See what you're running
const { projects } = await pushflo.listProjects();
for (const p of projects) {
console.log(p.name, '-', p.channelCount, 'channels,', p.credentialCount, 'keys');
}
There's a matching REST API if you'd rather curl — it's all in the docs.
The honest fine print
A few things to know before you reorganize everything:
- Project slugs are immutable. The slug is the namespace identifier under the hood, so pick it like you'd pick a database name. The display name you can rename anytime.
- Deleting a project deletes its channels and their message history. Its API keys survive but revert to organization-wide. The console makes you type the project slug before deleting — this one deserves the friction.
- Plan limits: the Free plan includes 1 project, Starter 3, Pro 10, and Business unlimited. Channels without a project don't count against anything — the flat setup remains first-class.
Try it
Projects are live for every account right now — including the free tier, because a feature like this shouldn't be an upsell. Open your console, click Projects in the sidebar, and give that prototype of yours a proper home.
If you're new here: PushFlo is real-time messaging (WebSockets, pub/sub) built for serverless apps — here's how it works.
Give every app its own space
Projects are live on every plan, including free. Create one in the console and move an app over in minutes — no code changes.
Written by Marek
Indie developer building PushFlo — real-time messaging for serverless apps. Every post comes from running the thing in production. More about PushFlo →
Related Articles
We Raised the Free Tier — and Shipped Pro & Business Plans
The free tier now includes 100 connections, 100 channels, and double the publish rate — and Pro ($49) and Business ($149) plans cover apps that outgrew Starter. Plus: what soft limits actually mean.
Run Multiple Apps on One PushFlo Account with Projects
A step-by-step guide to splitting two apps into isolated PushFlo projects: scoped API keys, identical code, clean channel names, and per-app monitoring.
Do You Really Need Millions of Messages? The Real-time Pricing Trap
Why most real-time services sell you quotas you'll never use. A honest look at what indie developers actually need from WebSocket infrastructure.
