Go to file
Sam Atkins d39fd8659e chore: Clarify usage of window fields in UIWindow.js
And also add some missing imports.

/puter/src/UI/UIWindow.js
    33:20   error  'global_element_id' is not defined                            no-undef
    34:5    error  'last_window_zindex' is not defined                           no-undef
    48:5    error  'window_stack' is not defined                                 no-undef
    69:52   error  'uuidv4' is not defined                                       no-undef
    90:9    error  'is_embedded' is not defined                                  no-undef
   174:52   error  'last_window_zindex' is not defined                           no-undef
   174:94   error  'last_window_zindex' is not defined                           no-undef
   244:77   error  'is_embedded' is not defined                                  no-undef
   289:57   error  'navbar_path' is not defined                                  no-undef
   436:25   error  'launch_app' is not defined                                   no-undef
   456:9    error  'window_nav_history' is not defined                           no-undef
   457:9    error  'window_nav_history_current_position' is not defined          no-undef
   524:9    error  'animate_window_opening' is not defined                       no-undef
   599:17   error  'validate_fsentry_name' is not defined                        no-undef
   790:9    error  'navbar_path_droppable' is not defined                        no-undef
   791:9    error  'sidebar_item_droppable' is not defined                       no-undef
   801:33   error  'window_nav_history' is not defined                           no-undef
   801:63   error  'window_nav_history_current_position' is not defined          no-undef
   804:46   error  'root_dirname' is not defined                                 no-undef
   812:17   error  'window_nav_history_current_position' is not defined          no-undef
   812:68   error  'window_nav_history_current_position' is not defined          no-undef
   813:34   error  'window_nav_history' is not defined                           no-undef
   813:64   error  'window_nav_history_current_position' is not defined          no-undef
   815:17   error  'update_window_path' is not defined                           no-undef
   825:29   error  'window_nav_history_current_position' is not defined          no-undef
   826:38   error  'window_nav_history' is not defined                           no-undef
   834:25   error  'window_nav_history_current_position' is not defined          no-undef
   835:42   error  'window_nav_history' is not defined                           no-undef
   835:72   error  'window_nav_history_current_position' is not defined          no-undef
   840:59   error  'root_dirname' is not defined                                 no-undef
   847:29   error  'update_window_path' is not defined                           no-undef
   869:33   error  'window_nav_history' is not defined                           no-undef
   869:63   error  'window_nav_history_current_position' is not defined          no-undef
   872:46   error  'root_dirname' is not defined                                 no-undef
   880:17   error  'window_nav_history_current_position' is not defined          no-undef
   882:37   error  'window_nav_history' is not defined                           no-undef
   882:67   error  'window_nav_history_current_position' is not defined          no-undef
   885:21   error  'update_window_path' is not defined                           no-undef
   896:29   error  'window_nav_history_current_position' is not defined          no-undef
   896:86   error  'window_nav_history' is not defined                           no-undef
   897:38   error  'window_nav_history' is not defined                           no-undef
   905:25   error  'window_nav_history_current_position' is not defined          no-undef
   906:42   error  'window_nav_history' is not defined                           no-undef
   906:72   error  'window_nav_history_current_position' is not defined          no-undef
   911:59   error  'root_dirname' is not defined                                 no-undef
   918:29   error  'update_window_path' is not defined                           no-undef
   941:50   error  'root_dirname' is not defined                                 no-undef
   950:17   error  'window_nav_history' is not defined                           no-undef
   950:46   error  'window_nav_history' is not defined                           no-undef
   950:82   error  'window_nav_history_current_position' is not defined          no-undef
   951:17   error  'window_nav_history' is not defined                           no-undef
   952:17   error  'window_nav_history_current_position' is not defined          no-undef
   954:17   error  'update_window_path' is not defined                           no-undef
   968:25   error  'update_window_layout' is not defined                         no-undef
   983:25   error  'update_window_layout' is not defined                         no-undef
   986:25   error  'update_window_layout' is not defined                         no-undef
   997:13   error  'is_auth' is not defined                                      no-undef
  1023:13   error  'update_explorer_footer_selected_items_count' is not defined  no-undef
  1106:21   error  'active_element' is not defined                               no-undef
  1117:13   error  'update_explorer_footer_selected_items_count' is not defined  no-undef
  1143:18   error  'mouseover_window' is not defined                             no-undef
  1205:82   error  'mouseX' is not defined                                       no-undef
  1205:107  error  'mouseY' is not defined                                       no-undef
  1219:83   error  'mouseover_window' is not defined                             no-undef
  1244:31   error  'mouseover_window' is not defined                             no-undef
  1246:17   error  'copy_items' is not defined                                   no-undef
  1246:45   error  'mouseover_window' is not defined                             no-undef
  1252:21   error  'create_shortcut' is not defined                              no-undef
  1255:27   error  'mouseover_window' is not defined                             no-undef
  1264:17   error  'move_items' is not defined                                   no-undef
  1264:45   error  'mouseover_window' is not defined                             no-undef
  1286:13   error  'scale_window' is not defined                                 no-undef
  1302:13   error  'scale_window' is not defined                                 no-undef
  1359:21   error  'upload_items' is not defined                                 no-undef
  1413:47   error  'window_width_threshold_for_sidebar' is not defined           no-undef
  1414:49   error  'window_width_threshold_for_sidebar' is not defined           no-undef
  1420:53   error  'window_width_threshold_for_sidebar' is not defined           no-undef
  1435:17   error  'last_window_zindex' is not defined                           no-undef
  1460:29   error  'current_active_snap_zone' is not defined                     no-undef
  1469:50   error  'current_active_snap_zone' is not defined                     no-undef
  1473:43   error  'desktop_height' is not defined                               no-undef
  1474:40   error  'toolbar_height' is not defined                               no-undef
  1476:44   error  'last_window_zindex' is not defined                           no-undef
  1480:55   error  'current_active_snap_zone' is not defined                     no-undef
  1484:43   error  'desktop_height' is not defined                               no-undef
  1485:40   error  'toolbar_height' is not defined                               no-undef
  1487:44   error  'last_window_zindex' is not defined                           no-undef
  1491:55   error  'current_active_snap_zone' is not defined                     no-undef
  1495:43   error  'desktop_height' is not defined                               no-undef
  1496:40   error  'toolbar_height' is not defined                               no-undef
  1497:41   error  'desktop_width' is not defined                                no-undef
  1498:44   error  'last_window_zindex' is not defined                           no-undef
  1502:55   error  'current_active_snap_zone' is not defined                     no-undef
  1506:43   error  'desktop_height' is not defined                               no-undef
  1507:40   error  'toolbar_height' is not defined                               no-undef
  1510:44   error  'last_window_zindex' is not defined                           no-undef
  1514:55   error  'current_active_snap_zone' is not defined                     no-undef
  1517:42   error  'desktop_width' is not defined                                no-undef
  1518:43   error  'desktop_height' is not defined                               no-undef
  1519:40   error  'toolbar_height' is not defined                               no-undef
  1521:44   error  'last_window_zindex' is not defined                           no-undef
  1525:55   error  'current_active_snap_zone' is not defined                     no-undef
  1528:40   error  'toolbar_height' is not defined                               no-undef
  1528:57   error  'desktop_height' is not defined                               no-undef
  1531:43   error  'desktop_height' is not defined                               no-undef
  1532:44   error  'last_window_zindex' is not defined                           no-undef
  1536:55   error  'current_active_snap_zone' is not defined                     no-undef
  1539:40   error  'toolbar_height' is not defined                               no-undef
  1539:57   error  'desktop_height' is not defined                               no-undef
  1540:41   error  'desktop_width' is not defined                                no-undef
  1542:43   error  'desktop_height' is not defined                               no-undef
  1543:44   error  'last_window_zindex' is not defined                           no-undef
  1559:52   error  'current_active_snap_zone' is not defined                     no-undef
  1590:28   error  'current_active_snap_zone' is not defined                     no-undef
  1592:40   error  'toolbar_height' is not defined                               no-undef
  1595:43   error  'desktop_height' is not defined                               no-undef
  1599:33   error  'current_active_snap_zone' is not defined                     no-undef
  1601:40   error  'toolbar_height' is not defined                               no-undef
  1604:43   error  'desktop_height' is not defined                               no-undef
  1608:33   error  'current_active_snap_zone' is not defined                     no-undef
  1610:40   error  'toolbar_height' is not defined                               no-undef
  1613:43   error  'desktop_height' is not defined                               no-undef
  1617:33   error  'current_active_snap_zone' is not defined                     no-undef
  1619:40   error  'toolbar_height' is not defined                               no-undef
  1619:57   error  'desktop_height' is not defined                               no-undef
  1622:43   error  'desktop_height' is not defined                               no-undef
  1626:33   error  'current_active_snap_zone' is not defined                     no-undef
  1628:40   error  'toolbar_height' is not defined                               no-undef
  1628:57   error  'desktop_height' is not defined                               no-undef
  1629:41   error  'desktop_width' is not defined                                no-undef
  1631:43   error  'desktop_height' is not defined                               no-undef
  1635:33   error  'current_active_snap_zone' is not defined                     no-undef
  1637:40   error  'toolbar_height' is not defined                               no-undef
  1640:43   error  'desktop_height' is not defined                               no-undef
  1644:33   error  'current_active_snap_zone' is not defined                     no-undef
  1645:29   error  'scale_window' is not defined                                 no-undef
  1656:51   error  'window_width_threshold_for_sidebar' is not defined           no-undef
  1657:53   error  'window_width_threshold_for_sidebar' is not defined           no-undef
  1663:57   error  'window_width_threshold_for_sidebar' is not defined           no-undef
  1674:71   error  'taskbar_height' is not defined                               no-undef
  1676:51   error  'taskbar_height' is not defined                               no-undef
  1703:35   error  'window_width_threshold_for_sidebar' is not defined           no-undef
  1718:36   error  'window_width_threshold_for_sidebar' is not defined           no-undef
  1719:49   error  'window_width_threshold_for_sidebar' is not defined           no-undef
  1725:42   error  'window_width_threshold_for_sidebar' is not defined           no-undef
  1733:50   error  'toolbar_height' is not defined                               no-undef
  1734:38   error  'toolbar_height' is not defined                               no-undef
  1736:32   error  'toolbar_height' is not defined                               no-undef
  1773:13   error  'setItem' is not defined                                      no-undef
  1820:21   error  'scale_window' is not defined                                 no-undef
  1867:51   error  'trash_path' is not defined                                   no-undef
  1881:41   error  'sort_items' is not defined                                   no-undef
  1882:41   error  'set_sort_by' is not defined                                  no-undef
  1889:41   error  'sort_items' is not defined                                   no-undef
  1890:41   error  'set_sort_by' is not defined                                  no-undef
  1897:41   error  'sort_items' is not defined                                   no-undef
  1898:41   error  'set_sort_by' is not defined                                  no-undef
  1905:41   error  'sort_items' is not defined                                   no-undef
  1906:41   error  'set_sort_by' is not defined                                  no-undef
  1918:41   error  'sort_items' is not defined                                   no-undef
  1919:41   error  'set_sort_by' is not defined                                  no-undef
  1927:41   error  'sort_items' is not defined                                   no-undef
  1928:41   error  'set_sort_by' is not defined                                  no-undef
  1973:40   error  'clipboard' is not defined                                    no-undef
  1975:36   error  'clipboard_op' is not defined                                 no-undef
  1976:37   error  'copy_clipboard_items' is not defined                         no-undef
  1977:41   error  'clipboard_op' is not defined                                 no-undef
  1978:37   error  'move_clipboard_items' is not defined                         no-undef
  1986:39   error  'actions_history' is not defined                              no-undef
  1988:33   error  'undo_last_action' is not defined                             no-undef
  1998:33   error  'init_upload_using_dialog' is not defined                     no-undef
  2014:48   error  'UIWindowSaveAccount' is not defined                          no-undef
  2023:85   error  'UIWindowEmailConfirmationRequired' is not defined            no-undef
  2036:33   error  'launch_app' is not defined                                   no-undef
  2059:44   error  'mouseX' is not defined                                       no-undef
  2063:43   error  'mouseY' is not defined                                       no-undef
  2102:68   error  'trash_path' is not defined                                   no-undef
  2103:37   error  'delete_item' is not defined                                  no-undef
  2110:67   error  'trash_path' is not defined                                   no-undef
  2110:128  error  'trash_path' is not defined                                   no-undef
  2146:21   error  'upload_items' is not defined                                 no-undef
  2163:13   error  'enter_fullpage_mode' is not defined                          no-undef
  2173:8    error  'active_element' is not defined                               no-undef
  2174:9    error  'active_element' is not defined                               no-undef
  2195:25   error  'item_icon' is not defined                                    no-undef
  2210:9    error  'window_nav_history' is not defined                           no-undef
  2210:45   error  'window_nav_history' is not defined                           no-undef
  2210:88   error  'window_nav_history_current_position' is not defined          no-undef
  2211:9    error  'window_nav_history' is not defined                           no-undef
  2212:9    error  'window_nav_history_current_position' is not defined          no-undef
  2214:9    error  'update_window_path' is not defined                           no-undef
  2257:37   error  'item_icon' is not defined                                    no-undef
  2364:9    error  'update_window_path' is not defined                           no-undef
  2380:38   error  'root_dirname' is not defined                                 no-undef
  2389:9    error  'window_nav_history' is not defined                           no-undef
  2389:45   error  'window_nav_history' is not defined                           no-undef
  2389:88   error  'window_nav_history_current_position' is not defined          no-undef
  2390:9    error  'window_nav_history' is not defined                           no-undef
  2391:9    error  'window_nav_history_current_position' is not defined          no-undef
  2391:62   error  'window_nav_history' is not defined                           no-undef
  2392:9    error  'update_window_path' is not defined                           no-undef
  2436:59   error  'root_dirname' is not defined                                 no-undef
  2453:19   error  'clipboard' is not defined                                    no-undef
  2455:16   error  'clipboard_op' is not defined                                 no-undef
  2456:17   error  'copy_clipboard_items' is not defined                         no-undef
  2457:21   error  'clipboard_op' is not defined                                 no-undef
  2458:17   error  'move_clipboard_items' is not defined                         no-undef
  2484:18   error  'mouseover_window' is not defined                             no-undef
  2503:21   error  'create_shortcut' is not defined                              no-undef
  2515:17   error  'move_items' is not defined                                   no-undef
  2525:18   error  'mouseover_window' is not defined                             no-undef
  2605:12   error  'window_nav_history' is not defined                           no-undef
  2605:42   error  'window_nav_history' is not defined                           no-undef
  2605:84   error  'window_nav_history_current_position' is not defined          no-undef
  2612:12   error  'window_nav_history_current_position' is not defined          no-undef
  2626:55   error  'navbar_path' is not defined                                  no-undef
  2687:17   error  'update_window_layout' is not defined                         no-undef
  2690:21   error  'update_details_layout_sort_visuals' is not defined           no-undef
  2698:13   error  'update_window_path' is not defined                           no-undef
  2707:54   error  'root_dirname' is not defined                                 no-undef
  2712:9    error  'navbar_path_droppable' is not defined                        no-undef
  2715:5    error  'update_explorer_footer_selected_items_count' is not defined  no-undef
  2727:18   error  'mouseover_window' is not defined                             no-undef
  2746:21   error  'create_shortcut' is not defined                              no-undef
  2758:17   error  'move_items' is not defined                                   no-undef
  2768:18   error  'mouseover_window' is not defined                             no-undef
  2807:36   error  'sendWindowWillCloseMsg' is not defined                       no-undef
  2819:23   error  'window_stack' is not defined                                 no-undef
  2829:17   error  'remove_taskbar_item' is not defined                          no-undef
  2836:17   error  'exit_fullpage_mode' is not defined                           no-undef
  2853:31   error  'window_stack' is not defined                                 no-undef
  2854:73   error  'window_stack' is not defined                                 no-undef
  2854:86   error  'window_stack' is not defined                                 no-undef
  2857:47   error  'window_stack' is not defined                                 no-undef
  2857:60   error  'window_stack' is not defined                                 no-undef
  2916:22   error  'window_stack' is not defined                                 no-undef
  2924:13   error  'active_item_container' is not defined                        no-undef
  2949:20   error  'toolbar_height' is not defined                               no-undef
  3007:14   error  'api_origin' is not defined                                   no-undef
  3017:40   error  'auth_token' is not defined                                   no-undef
  3021:17   error  'logout' is not defined                                       no-undef
  3083:43   error  'last_window_zindex' is not defined                           no-undef
  3123:38   error  'last_window_zindex' is not defined                           no-undef
  3127:98   error  'last_window_zindex' is not defined                           no-undef
  3131:100  error  'last_window_zindex' is not defined                           no-undef
  3147:81   error  'mouseX' is not defined                                       no-undef
  3147:106  error  'mouseY' is not defined                                       no-undef
  3151:9    error  'active_item_container' is not defined                        no-undef
  3153:34   error  'active_item_container' is not defined                        no-undef
  3155:9    error  'window_stack' is not defined                                 no-undef
  3157:11   error  'active_item_container' is not defined                        no-undef
  3252:5    error  'sort_items' is not defined                                   no-undef
  3253:5    error  'set_sort_by' is not defined                                  no-undef
  3258:14   error  'api_origin' is not defined                                   no-undef
  3267:40   error  'auth_token' is not defined                                   no-undef
  3271:17   error  'logout' is not defined                                       no-undef
  3280:21   error  'update_details_layout_sort_visuals' is not defined           no-undef
2024-05-02 11:21:50 +01:00
.github Update Docker CI 2024-04-24 11:29:44 +02:00
doc refactor: normalize email calls 2024-04-29 17:34:24 -04:00
incubator/x86emu Add checklists for x86 emulation project 2024-03-14 14:15:10 -04:00
packages fix: Add missing TextEncoder to PTT 2024-05-02 11:21:50 +01:00
src chore: Clarify usage of window fields in UIWindow.js 2024-05-02 11:21:50 +01:00
tools Check that all uses of i18n() use keys that exist 2024-04-01 12:12:31 +01:00
volatile Release backend 2024-03-30 19:08:03 -04:00
.commit fix: use primary read in signup 2024-04-25 19:46:39 -04:00
.dockerignore Fix Dockerfile 2024-04-15 19:03:00 -04:00
.env.example Implement .env support for PORT property 2024-03-12 22:42:13 -07:00
.gitattributes Initial commit 2024-03-02 18:39:14 -08:00
.gitignore Fix casualty of phoenix due to Docker naming conventions 2024-04-15 12:12:28 -04:00
.is_puter_repository Release backend 2024-03-30 19:08:03 -04:00
build.js Migrate to JavaScript modules 2024-03-20 14:10:39 +00:00
CHANGELOG.md chore(main): release 2.2.0 2024-04-23 02:03:34 +00:00
CONTRIBUTING.md Add April-1st-appropriate commit message guidelines 2024-04-01 19:33:11 -04:00
dev-server.js Migrate to JavaScript modules 2024-03-20 14:10:39 +00:00
docker-compose.yml Update instructions & docker-compose to reflect production paths 2024-04-02 07:45:14 +02:00
Dockerfile Set NO_VAR_RUNTIME in Dockerfile 2024-04-15 20:47:27 -04:00
eslint.config.js chore: Set-up eslint 2024-05-02 11:21:50 +01:00
exports.js Release backend 2024-03-30 19:08:03 -04:00
l_checker_config.json Release backend 2024-03-30 19:08:03 -04:00
LICENSE.txt Initial commit 2024-03-02 18:39:14 -08:00
package-lock.json chore: Set-up eslint 2024-05-02 11:21:50 +01:00
package.json chore: Set-up eslint 2024-05-02 11:21:50 +01:00
puter-gui.json Add WIP color sliders 2024-04-06 02:35:06 -04:00
README.md docs: Explain self-host differences 2024-04-30 16:29:57 +01:00
run-selfhosted.js chore: Add missing import for node:console 2024-05-02 11:21:50 +01:00
SECURITY-ACKNOWLEDGEMENTS.md Update SECURITY-ACKNOWLEDGEMENTS.md to add Tim's GitHub 2024-03-13 18:55:14 -07:00
SECURITY.md Create SECURITY.md 2024-03-13 16:33:03 -07:00
test.txt fix: test release-please action #4 2024-04-22 18:40:49 -04:00
utils.js Migrate to JavaScript modules 2024-03-20 14:10:39 +00:00

Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time.

The Internet OS! Free, Open-Source, and Self-Hostable.

« LIVE DEMO »

Puter.com · SDK · Discord · Reddit · X (Twitter) · Bug Bounty

#1 on Hacker News #1 on Hacker News

screenshot


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 Docker
  • volatile/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 (usually 443)
  • 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


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.