5198081c2b
Almost entirely clarifying use of window fields /puter/src/initgui.js 82:28 error 'api_origin' is not defined no-undef 118:34 error 'url_query_params' is not defined no-undef 120:17 error 'app_query_params' is not defined no-undef 136:8 error 'url_query_params' is not defined no-undef 136:51 error 'url_query_params' is not defined no-undef 136:105 error 'url_query_params' is not defined no-undef 138:14 error 'url_query_params' is not defined no-undef 138:57 error 'url_query_params' is not defined no-undef 138:110 error 'url_query_params' is not defined no-undef 154:8 error 'url_query_params' is not defined no-undef 154:54 error 'url_query_params' is not defined no-undef 154:110 error 'url_query_params' is not defined no-undef 164:17 error 'openerOrigin' is not defined no-undef 171:30 error 'openerOrigin' is not defined no-undef 173:37 error 'is_auth' is not defined no-undef 184:23 error 'getUserAppToken' is not defined no-undef 184:39 error 'openerOrigin' is not defined no-undef 186:41 error 'is_auth' is not defined no-undef 195:23 error 'getUserAppToken' is not defined no-undef 195:39 error 'openerOrigin' is not defined no-undef 205:8 error 'url_query_params' is not defined no-undef 206:32 error 'url_query_params' is not defined no-undef 218:23 error 'url_query_params' is not defined no-undef 219:22 error 'openerOrigin' is not defined no-undef 219:38 error 'url_query_params' is not defined no-undef 220:26 error 'url_query_params' is not defined no-undef 228:29 error 'embedded_in_popup' is not defined no-undef 238:20 error 'url_query_params' is not defined no-undef 239:21 error 'url_query_params' is not defined no-undef 270:36 error 'openerOrigin' is not defined no-undef 271:30 error 'checkUserSiteRelationship' is not defined no-undef 271:56 error 'openerOrigin' is not defined no-undef 274:44 error 'logged_in_users' is not defined no-undef 274:76 error 'userAppToken' is not defined no-undef 274:92 error 'url_query_params' is not defined no-undef 284:17 error 'userAppToken' is not defined no-undef 288:25 error 'is_auth' is not defined no-undef 302:13 error 'url_query_params' is not defined no-undef 303:38 error 'url_query_params' is not defined no-undef 309:17 error 'logout' is not defined no-undef 331:13 error 'update_auth_data' is not defined no-undef 363:8 error 'is_auth' is not defined no-undef 388:13 error 'update_auth_data' is not defined no-undef 394:23 error 'get_auto_arrange_data' is not defined no-undef 395:31 error 'desktop_path' is not defined no-undef 403:30 error 'url_query_params' is not defined no-undef 405:38 error 'getUserAppToken' is not defined no-undef 405:62 error 'openerOrigin' is not defined no-undef 415:35 error 'user' is not defined no-undef 417:24 error 'openerOrigin' is not defined no-undef 430:24 error 'openerOrigin' is not defined no-undef 438:20 error 'openerOrigin' is not defined no-undef 439:37 error 'getAppUIDFromOrigin' is not defined no-undef 439:57 error 'openerOrigin' is not defined no-undef 444:35 error 'url_query_params' is not defined no-undef 508:46 error 'url_query_params' is not defined no-undef 630:54 error 'busy_indicator_hide_delay' is not defined no-undef 636:49 error 'busy_indicator_hide_delay' is not defined no-undef 647:13 error 'update_sites_cache' is not defined no-undef 656:9 error 'refresh_desktop_background' is not defined no-undef 661:9 error 'is_auth' is not defined no-undef 661:23 error 'first_visit_ever' is not defined no-undef 662:12 error 'logged_in_users' is not defined no-undef 679:14 error 'is_auth' is not defined no-undef 679:27 error 'first_visit_ever' is not defined no-undef 693:12 error 'url_query_params' is not defined no-undef 696:47 error 'url_query_params' is not defined no-undef 704:18 error 'gui_origin' is not defined no-undef 715:17 error 'update_auth_data' is not defined no-undef 728:8 error 'feature_flags' is not defined no-undef 746:19 error 'get_auto_arrange_data' is not defined no-undef 747:27 error 'desktop_path' is not defined no-undef 755:26 error 'url_query_params' is not defined no-undef 758:34 error 'getUserAppToken' is not defined no-undef 758:58 error 'openerOrigin' is not defined no-undef 768:31 error 'user' is not defined no-undef 770:20 error 'openerOrigin' is not defined no-undef 783:20 error 'openerOrigin' is not defined no-undef 792:16 error 'openerOrigin' is not defined no-undef 793:33 error 'getAppUIDFromOrigin' is not defined no-undef 793:53 error 'openerOrigin' is not defined no-undef 801:31 error 'url_query_params' is not defined no-undef 864:42 error 'url_query_params' is not defined no-undef 987:50 error 'busy_indicator_hide_delay' is not defined no-undef 993:45 error 'busy_indicator_hide_delay' is not defined no-undef 1021:13 error 'update_explorer_footer_selected_items_count' is not defined no-undef 1057:13 error 'active_item_container' is not defined no-undef 1061:17 error 'active_item_container' is not defined no-undef 1065:21 error 'active_item_container' is not defined no-undef 1071:9 error 'active_element' is not defined no-undef 1179:21 error 'select_ctxmenu_item' is not defined no-undef 1185:21 error 'select_ctxmenu_item' is not defined no-undef 1198:21 error 'select_ctxmenu_item' is not defined no-undef 1211:21 error 'select_ctxmenu_item' is not defined no-undef 1222:25 error 'select_ctxmenu_item' is not defined no-undef 1255:22 error 'active_item_container' is not defined no-undef 1256:39 error 'active_item_container' is not defined no-undef 1257:21 error 'active_element' is not defined no-undef 1258:23 error 'active_item_container' is not defined no-undef 1263:27 error 'active_item_container' is not defined no-undef 1264:39 error 'active_item_container' is not defined no-undef 1267:27 error 'active_item_container' is not defined no-undef 1268:39 error 'active_element' is not defined no-undef 1268:74 error 'active_element' is not defined no-undef 1268:93 error 'active_element' is not defined no-undef 1271:27 error 'active_item_container' is not defined no-undef 1272:39 error 'active_item_container' is not defined no-undef 1275:39 error 'active_element' is not defined no-undef 1275:74 error 'active_element' is not defined no-undef 1275:93 error 'active_element' is not defined no-undef 1323:114 error 'active_item_container' is not defined no-undef 1331:21 error 'active_element' is not defined no-undef 1334:27 error 'active_item_container' is not defined no-undef 1390:37 error 'active_element' is not defined no-undef 1407:31 error 'delete_item' is not defined no-undef 1419:37 error 'active_element' is not defined no-undef 1419:115 error 'trash_path' is not defined no-undef 1436:31 error 'delete_item' is not defined no-undef 1438:55 error 'trash_path' is not defined no-undef 1445:59 error 'trash_path' is not defined no-undef 1446:61 error 'trash_path' is not defined no-undef 1452:37 error 'active_element' is not defined no-undef 1456:25 error 'move_items' is not defined no-undef 1456:53 error 'trash_path' is not defined no-undef 1467:16 error 'keypress_item_seach_term' is not defined no-undef 1468:30 error 'keypress_item_seach_buffer_timeout' is not defined no-undef 1470:13 error 'keypress_item_seach_buffer_timeout' is not defined no-undef 1471:17 error 'keypress_item_seach_term' is not defined no-undef 1474:13 error 'keypress_item_seach_term' is not defined no-undef 1477:38 error 'active_item_container' is not defined no-undef 1480:108 error 'keypress_item_seach_term' is not defined no-undef 1485:30 error 'active_item_container' is not defined no-undef 1487:78 error 'keypress_item_seach_term' is not defined no-undef 1505:19 error 'active_item_container' is not defined no-undef 1509:17 error 'update_explorer_footer_selected_items_count' is not defined no-undef 1509:63 error 'active_element' is not defined no-undef 1518:16 error 'keypress_item_seach_term' is not defined no-undef 1519:30 error 'keypress_item_seach_buffer_timeout' is not defined no-undef 1521:13 error 'keypress_item_seach_buffer_timeout' is not defined no-undef 1522:17 error 'keypress_item_seach_term' is not defined no-undef 1525:13 error 'keypress_item_seach_term' is not defined no-undef 1531:97 error 'keypress_item_seach_term' is not defined no-undef 1538:67 error 'keypress_item_seach_term' is not defined no-undef 1581:39 error 'active_element' is not defined no-undef 1583:39 error 'active_element' is not defined no-undef 1590:17 error 'update_explorer_footer_selected_items_count' is not defined no-undef 1600:36 error 'active_element' is not defined no-undef 1602:36 error 'active_element' is not defined no-undef 1615:15 error 'mouseover_window' is not defined no-undef 1616:15 error 'mouseover_window' is not defined no-undef 1616:55 error 'trash_path' is not defined no-undef 1621:38 error 'active_element' is not defined no-undef 1623:38 error 'active_element' is not defined no-undef 1628:21 error 'clipboard' is not defined no-undef 1629:21 error 'clipboard_op' is not defined no-undef 1632:58 error 'trash_path' is not defined no-undef 1636:25 error 'clipboard' is not defined no-undef 1648:38 error 'active_element' is not defined no-undef 1650:38 error 'active_element' is not defined no-undef 1655:21 error 'clipboard' is not defined no-undef 1656:21 error 'clipboard_op' is not defined no-undef 1658:25 error 'clipboard' is not defined no-undef 1668:107 error 'last_enter_pressed_to_rename_ts' is not defined no-undef 1682:21 error 'launch_app' is not defined no-undef 1705:21 error 'select_ctxmenu_item' is not defined no-undef 1713:21 error 'active_item_container' is not defined no-undef 1714:37 error 'active_item_container' is not defined no-undef 1717:25 error 'open_item' is not defined no-undef 1736:16 error 'clipboard' is not defined no-undef 1745:37 error 'trash_path' is not defined no-undef 1745:74 error 'trash_path' is not defined no-undef 1745:96 error 'clipboard_op' is not defined no-undef 1748:20 error 'clipboard_op' is not defined no-undef 1749:21 error 'copy_clipboard_items' is not defined no-undef 1750:25 error 'clipboard_op' is not defined no-undef 1751:21 error 'move_clipboard_items' is not defined no-undef 1760:13 error 'undo_last_action' is not defined no-undef 1767:9 error 'mouseX' is not defined no-undef 1768:9 error 'mouseY' is not defined no-undef 1771:13 error 'mouseX' is not defined no-undef 1771:29 error 'mouseY' is not defined no-undef 1771:38 error 'toolbar_height' is not defined no-undef 1771:63 error 'mouseX' is not defined no-undef 1771:78 error 'mouseY' is not defined no-undef 1772:13 error 'current_active_snap_zone' is not defined no-undef 1774:17 error 'mouseX' is not defined no-undef 1774:32 error 'mouseY' is not defined no-undef 1774:49 error 'mouseY' is not defined no-undef 1774:58 error 'desktop_height' is not defined no-undef 1775:13 error 'current_active_snap_zone' is not defined no-undef 1777:17 error 'mouseX' is not defined no-undef 1777:32 error 'mouseY' is not defined no-undef 1777:41 error 'desktop_height' is not defined no-undef 1778:13 error 'current_active_snap_zone' is not defined no-undef 1780:17 error 'mouseX' is not defined no-undef 1780:26 error 'desktop_width' is not defined no-undef 1780:48 error 'mouseY' is not defined no-undef 1780:65 error 'mouseY' is not defined no-undef 1780:74 error 'desktop_height' is not defined no-undef 1781:13 error 'current_active_snap_zone' is not defined no-undef 1783:18 error 'mouseX' is not defined no-undef 1783:27 error 'desktop_width' is not defined no-undef 1783:50 error 'mouseY' is not defined no-undef 1783:59 error 'toolbar_height' is not defined no-undef 1783:84 error 'mouseX' is not defined no-undef 1783:93 error 'desktop_width' is not defined no-undef 1783:115 error 'mouseY' is not defined no-undef 1784:13 error 'current_active_snap_zone' is not defined no-undef 1786:17 error 'mouseX' is not defined no-undef 1786:26 error 'desktop_width' is not defined no-undef 1786:48 error 'mouseY' is not defined no-undef 1786:58 error 'desktop_height' is not defined no-undef 1787:13 error 'current_active_snap_zone' is not defined no-undef 1789:17 error 'mouseY' is not defined no-undef 1789:26 error 'toolbar_height' is not defined no-undef 1789:49 error 'mouseX' is not defined no-undef 1789:66 error 'mouseX' is not defined no-undef 1789:75 error 'desktop_width' is not defined no-undef 1790:13 error 'current_active_snap_zone' is not defined no-undef 1793:13 error 'current_active_snap_zone' is not defined no-undef 1802:21 error 'mouseX' is not defined no-undef 1802:41 error 'mouseX' is not defined no-undef 1802:75 error 'mouseY' is not defined no-undef 1802:95 error 'mouseY' is not defined no-undef 1819:21 error 'mouseX' is not defined no-undef 1819:41 error 'mouseX' is not defined no-undef 1819:75 error 'mouseY' is not defined no-undef 1819:95 error 'mouseY' is not defined no-undef 1840:12 error 'mouseover_window' is not defined no-undef 1841:15 error 'mouseover_window' is not defined no-undef 1876:17 error 'upload_items' is not defined no-undef 1934:21 error 'logout' is not defined no-undef 1936:17 error 'logout' is not defined no-undef 1946:22 error 'gui_origin' is not defined no-undef 1951:50 error 'auth_token' is not defined no-undef 1958:18 error Empty block statement no-empty |
||
---|---|---|
.github | ||
doc | ||
incubator/x86emu | ||
packages | ||
src | ||
tools | ||
volatile | ||
.commit | ||
.dockerignore | ||
.env.example | ||
.gitattributes | ||
.gitignore | ||
.is_puter_repository | ||
build.js | ||
CHANGELOG.md | ||
CONTRIBUTING.md | ||
dev-server.js | ||
docker-compose.yml | ||
Dockerfile | ||
eslint.config.js | ||
exports.js | ||
l_checker_config.json | ||
LICENSE.txt | ||
package-lock.json | ||
package.json | ||
puter-gui.json | ||
README.md | ||
run-selfhosted.js | ||
SECURITY-ACKNOWLEDGEMENTS.md | ||
SECURITY.md | ||
test.txt | ||
utils.js |
The Internet OS! Free, Open-Source, and Self-Hostable.
« LIVE DEMO »
Puter.com
·
SDK
·
Discord
·
Reddit
·
X (Twitter)
·
Bug Bounty
Puter
Puter is an advanced, open-source internet operating system designed to be feature-rich, exceptionally fast, and highly extensible. It can be used to build remote desktop environments or serve as an interface for cloud storage services, remote servers, web hosting platforms, and more.
Getting Started
After reading this section, please proceed to Self-Hosting and Configuration below. Read these instructions carefully or you may see errors due to an invalid setup.
Local Development
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
This will launch Puter at http://localhost:4000 (or the next available port).
Using Docker
note: it is not necessary to run this within a clone of this repository. For contributors, it is recommended to use the Local Development instructions.
mkdir puter && cd puter && mkdir -p puter/config puter/data && sudo chown -R 1000:1000 puter && docker run --rm -p 4100:4100 -v `pwd`/puter/config:/etc/puter -v `pwd`/puter/data:/var/puter ghcr.io/heyputer/puter
Using Docker Compose
note: it is not necessary to run this within a clone of this repository. For contributors, it is recommended to use the Local Development instructions.
mkdir -p puter/config puter/data
sudo chown -R 1000:1000 puter
wget https://raw.githubusercontent.com/HeyPuter/puter/main/docker-compose.yml
docker compose up
See Configuration for next steps.
⚠️ Self-Hosting ⚠️
The self-hosted version of Puter is currently in alpha stage and should not be used in production yet. It is under active development and may contain bugs, other issues. Please exercise caution and use it for testing and evaluation purposes only.
Self-Hosting Differences
Currently, the self-hosted version of Puter is different in a few ways from Puter.com:
- There is no built-in way to install or create other apps (see below)
- Several "core" apps are missing, such as Code or Draw, because we can't include them in this repository
- Some icons are different
Work is ongoing to improve the App Center and make it available on self-hosted.
Until then, it's possible to add other apps by manually editing the database file.
This process is not recommended unless you know what you are doing.
The file will appear after you first launch Puter, and should be found in puter/data/puter-database.sqlite
for Docker,
or volatile/runtime/puter-database.sqlite
otherwise.
You will need a database tool that can understand SQLite databases.
Configuration
Running the server will generate a configuration file in one of these locations:
config/config.json
when Using Dockervolatile/config/config.json
in Local Development/etc/puter/config.json
on a server (or within a Docker container)
Domain Name
To access Puter on your device, you can simply go to the address printed in
the server console (usually puter.localhost:4100
).
To access Puter from another device, a domain name must be configured, as well as
an api
subdomain. For example, example.local
might be the domain name pointing
to the IP address of the server running puter, and api.example.com
must point to
this address as well. This domain must be specified in the configuration file
(usually volatile/config/config.json
) as well.
See domain configuration for more information.
Configure the Port
- You can specify a custom port by setting
http_port
to a desired value - If you're using a reverse-proxy such as nginx or cloudflare, you should
also set
pub_port
to the public (external) port (usually443
) - If you have HTTPS enabled on your reverse-proxy, ensure that
protocol
in config.json is set accordingly
Default User
By default, Puter will create a user called default_user
.
This user will have a randomly generated password, which will be printed
in the development console.
A warning will persist in the dev console until this user's
password is changed. Please login to this user and change the password as
your first step.
License
This repository is licensed under AGPL-3.0; However, our SDK (puter.js) is also available under Apache 2.0, as indicated by the license file in that section (packages/puter-js) of this repository.
FAQ
❓ What's the use case for Puter?
Puter can be used as:
- An alternative to Dropbox, Google Drive, OneDrive, etc. with a fresh interface and powerful features.
- Remote desktop environment for servers and workstations.
- A platform for building and hosting websites, web apps, and games.
- A friendly, open-source project and community to learn about web development, cloud computing, distributed systems, and much more!
❓ Why isn't Puter built with React, Angular, Vue, etc.?
For performance reasons, Puter is built with vanilla JavaScript and jQuery. Additionally, we'd like to avoid complex abstractions and to remain in control of the entire stack, as much as possible.
Also partly inspired by some of our favorite projects that are not built with frameworks: VSCode, Photopea, and OnlyOffice.
❓ Why jQuery?
Puter interacts directly with the DOM and jQuery provides an elegant yet powerful API to manipulate the DOM, handle events, and much more. It's also fast, mature, and battle-tested.
#DoesItRunPuter
- Minecraft | video
- Samsung Watch
- PlayStation 4
- Skyworth TV
- A Fridge!
- Oculus Quest 2
- Tesla Model 3
- Tesla Model S
- Tesla Model Y
- Nintendo Switch
- Steam Deck
Credits
The default wallpaper is created by Milad Fakurian and published on Unsplash.
Icons by Papirus under GPL-3.0 license.
Icons by Iconoir under MIT license.
Icons by Elementary Icons under GPL-3.0 license.
Icons by Tabler Icons under MIT license.
Icons by bootstrap-icons under MIT license.