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
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.jsonwhen Using Dockervolatile/config/config.jsonin Local Development/etc/puter/config.jsonon 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_portto a desired value - If you're using a reverse-proxy such as nginx or cloudflare, you should
also set
pub_portto the public (external) port (usually443) - If you have HTTPS enabled on your reverse-proxy, ensure that
protocolin 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.

