floors.js for Apps
Your app has active users right now — but they have no idea anyone else is there. floors.js adds a social presence layer so users see each other, interact, and feel like they're part of something alive.
Get started — from $14/mo See how it works
The invisible user problem
Most apps feel like solo experiences. A user logs in, does their thing, and leaves. They never know that 50 other people were using the app at the same time. There's no sense of life, no social proof, no reason to stick around.
Your app works great — but it feels empty. Even with thousands of users, every session feels like a private one. That's a missed opportunity for engagement, retention, and word-of-mouth.
What floors.js does for apps
floors.js adds a real-time presence layer to your product. Every screen becomes a room. Every active user becomes a 3D avatar. When two users are on the same screen, they see each other and can chat — right inside your app.
- Instant social layer — users see other real people using the app right now
- Zero friction — no signup or extra auth needed, works alongside your existing user system
- Works on web and mobile — any app with a browser or WebView can run the script
- One script tag — no SDK, no backend changes, no database migrations
- Feels alive, not intrusive — a small widget in the corner, users open it when they want
Where apps use it
Dashboard & home screen
Users land on their dashboard and see others are online too. The app immediately feels active and alive — not like a lonely spreadsheet.
Feature pages
Someone is exploring a feature for the first time. Another user who already uses it is on the same page. They chat. Organic onboarding happens.
Pricing & upgrade pages
A user is hesitating on the pricing page. You (the founder) see them there and answer their question live. That's the conversion that wouldn't have happened otherwise.
Changelog & updates
You ship a new feature. Users gather on the changelog page to discuss it — instant feedback loop without leaving the app.
Why presence matters more than chat
You can add a chat widget to any app. But chat alone doesn't change how the app feels. A support chat is transactional — type a question, wait for a reply, close the ticket.
Presence is different. When users see 3D avatars walking around, the app feels inhabited. It's the difference between walking into an empty store and walking into one with people in it. You stay longer. You explore more. You come back.
floors.js gives your app that "people are here" feeling — which is the hardest thing to manufacture and the most powerful thing for retention.
One line to install
Paste it in your app's HTML shell, layout component, or WebView. Each route becomes a room automatically. Works with React, Next.js, Vue, Nuxt, Svelte, Angular, or any framework. For mobile apps using WebViews (React Native, Capacitor, Ionic), load it inside the WebView.
Frequently asked questions
Does it work in a mobile app?
Yes. If your mobile app uses a WebView (React Native WebView, Capacitor, etc.), you can load the script inside it. Native iOS/Android apps without a WebView would need a custom integration.Can users see each other across different screens?
Yes. Each route or screen becomes a room. The building overview shows all active screens and who is on each one. Users can see the whole app is alive.Does it slow down my app?
No. The widget shell loads instantly (< 1 KB). Three.js is loaded asynchronously after your app is ready. No impact on your load time or Core Web Vitals.Can I disable the chat and keep only presence?
Not yet, but private mode lets you control visibility. Users only see you (the owner), not each other — useful for support-style interactions.How is this different from adding a chat widget?
Chat widgets are for support tickets. floors.js adds presence — users see other real people using the app at the same time. That social layer makes the app feel alive, not just functional.