Launching an app to serve another one took focus away from the app the user was working in, and they had to click it to get it back. Typing a guest name into Calendar's event editor — which launches Contacts to read the address book — dropped the user out of the field mid-word. Four things conspired, all of them variations on "a window nobody can see is treated as the window in front": `window-active` was hardcoded into every window's markup, including windows created hidden. focusWindow() — the thing that normally grants that class, and strips it from everyone else — is already skipped for a hidden window, so two windows ended up claiming it. It now follows the same rule as the window_stack push a few lines above: visible windows only. Both "focus the window once its IPC attaches" sites read that class to decide, so a hidden child window pulled focus a beat after launching. Neither focuses a window with data-is_visible="0" any more. makeWindowInvisible left `window-active` on the window it had just hidden. Since focusWindow() disables pointer events on every other app's iframe, an app calling puter.ui.hideWindow() on itself left whoever launched it both unfocused AND unclickable until the next click. It now hands activation back to the top of the window stack, the way closing a window does, and drops itself out of the activation order until it is shown again. showWindow only ever un-minimized: for a window hidden by hideWindow() (which keeps its geometry and writes no data-orig-*) every branch left it hidden and stamped NaN geometry on it from the missing attributes. It now routes such a window to makeWindowVisible. That is what makes the taskbar item a real handle on a background app — clicking the item calls showWindow on the group.
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

