* Land share-email links in the Dashboard's Shared view A share email's links opened the item on the desktop, and "Open Puter" went to the bare origin — the recipient arrived on Home with nothing to say what had just been shared. Every link now lands in the Dashboard's Files tab, on Shared, with the shared items selected. Each named file still links to itself. "Open Puter" carries every item in the mail (?shared=a&shared=b), so the whole batch lands highlighted; the digest records now keep each item's masked path for that. The button's href is rendered raw like the item links, so `=` and `&` read the same in the html and text parts, and the unsubscribe link is built from a separate origin value. On the GUI side `/?shared=` boots the dashboard rather than the desktop; `/desktop?shared=` keeps opening the item in place. The Files tab selects the rows by uid, which survives a rename. A share only reaches a real account, so a share link never mints a temp user and an existing temp session is asked to sign in first, as the desktop already did. The address-bar cleanup both shells need moves into a helper. * Keep the share email's button link within what mail clients tolerate The "Open Puter" link names every item in the mail, capped at twenty. But a single item's parameter is ~150 characters once the owner, uuid and an encoded name are in it, so twenty of them run to several kilobytes — past the ~2000 characters where older mail clients cut a URL off or stop making it clickable — and the count alone couldn't do what its comment promised for the mail's primary button. Add a length budget beside the count: items go in, in digest order, only while the whole link stays under it, so the button always works and the first items are the ones highlighted. A single item always fits. * Keep a share link's own item however long its name runs `shareDeepLink` now builds through `sharedViewLink`, whose length budget applied to the first item too: a parameter that alone overran it was dropped, and the link came out as a bare `?shared=`. A name of a few hundred characters — the GUI allows five hundred, and encoding triples every non-ASCII one — was enough, so that item's own link in the mail landed on Shared with nothing picked out, where it used to open the item. The first item now always goes in; the budget only decides how many more join it. One long link is still the item the mail is about, and it is no worse than a bare origin for the clients that truncate it.
The Open-Source Internet Computer!
« LIVE DEMO »
Puter.com
·
App Store
·
Developers
·
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.
- X (Twitter): x.com/HeyPuter
- 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

