Drag one app onto another and let it settle: a well opens under the target and the drop makes a folder of the two. Dropping onto an existing folder joins it. A folder opens by growing out of its own icon into a card over a blurred grid, where its apps can be launched, rearranged, renamed, or carried back out. Hovering a tile mid-drag means two things — "push over, I'm passing through" and "swallow me" — and the tile is barely bigger than its icon, so pixels can't separate them; motion does. The shuffle is held while the folder offer stands and fires when the icon leaves the tile, or at the drop, so a quick drop onto a neighbour still reorders exactly as it did. The offer itself re-arms rather than cancelling on movement: the last events of a drag are the ones carrying the icon onto the target and nothing is dispatched while it rests, so a cancel-on-movement dwell could never fire at all. Folders are stored in their own kv key; the grid's ORDER stays entirely in the existing saved app order, with a folder occupying its first member's slot and its members contiguous. Every saved order therefore stays valid with no migration, and an app whose installedApps page failed to load keeps both its folder and its position. Folders never nest, one that drops below two apps dissolves, and a corrupt kv value degrades to "no folders" rather than a broken tab. Elsewhere: - Search looks THROUGH folders — a match the user then has to hunt for inside one is not an answer. - Minimize morphs into the FOLDER when an app lives in one, and a /app/<name> landing opens the folder so the launch grows out of the icon where the app actually is. - The uninstall FLIP keyed surviving tiles by app name, which a folder tile doesn't have; it now keys by identity. New pure model in appGroups.js with tests; verified end to end in the running dashboard (create, join, open, rename, reorder, eject, ungroup, launch-from-folder) alongside plain reorder, search, and uninstall.
The Open-Source Internet Computer!
« LIVE DEMO »
Puter.com
·
App Store
·
Developers
·
Discord
·
Reddit
·
X
Puter
Puter is an advanced, open-source, self-hostable internet computer designed to be feature-rich, fast, and highly extensible.
For Users
Puter's goal is to provide you with every app and feature you need to work, create, and play under one roof. From a simple Notepad and Voice Recorder to Spreadsheet and Camera, Puter wants to be the all-in-one solution for your digital life.
For Developers
Puter provides everything you need to build and publish web apps and games. From AI to Cloud Storage and Database to Serverless Workers, Puter has you covered. Puter also helps you get users! Once you build your app, you can publish it on our App Store to reach and monetize users.
Getting Started
💻 Local Development
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
→ This should launch Puter at http://puter.localhost:4100
🚀 Self-Hosting
Linux/macOS
curl -fsSL https://puter.com/selfhost | sh
Windows
irm https://puter.com/selfhost?os=windows | iex
→ For more details, see Self-Hosting Puter.
☁️ Puter.com
Puter is available as a hosted service at puter.com.
Support
Connect with the maintainers and community through these channels:
- Bug report or feature request? Please open an issue.
- Discord: discord.com/invite/PQcx7Teh8u
- X (Twitter): x.com/HeyPuter
- Reddit: reddit.com/r/puter/
- Mastodon: mastodon.social/@puter
- Security issues or abuse reports? security@puter.com
- Email maintainers at hi@puter.com
We are always happy to help you with any questions you may have. Don't hesitate to ask!
License
This repository, including all its contents, sub-projects, modules, and components, is licensed under AGPL-3.0 unless explicitly stated otherwise. Third-party libraries included in this repository may be subject to their own licenses.
Translations
- Arabic / العربية
- Armenian / Հայերեն
- Bengali / বাংলা
- Chinese / 中文
- Danish / Dansk
- English
- Farsi / فارسی
- Finnish / Suomi
- French / Français
- German / Deutsch
- Hebrew/ עברית
- Hindi / हिंदी
- Hungarian / Magyar
- Indonesian / Bahasa Indonesia
- Italian / Italiano
- Japanese / 日本語
- Korean / 한국어
- Malay / Bahasa Malaysia
- Malayalam / മലയാളം
- Polish / Polski
- Portuguese / Português
- Punjabi / ਪੰਜਾਬੀ
- Romanian / Română
- Russian / Русский
- Spanish / Español
- Swedish / Svenska
- Tamil / தமிழ்
- Telugu / తెలుగు
- Thai / ไทย
- Turkish / Türkçe
- Ukrainian / Українська
- Urdu / اردو
- Vietnamese / Tiếng Việt

