{"id":34726821,"url":"https://github.com/calagopus/wings","last_synced_at":"2026-05-30T12:00:50.333Z","repository":{"id":292769337,"uuid":"979876470","full_name":"calagopus/wings","owner":"calagopus","description":"Pterodactyl Wings alternative written in Rust with more Speed, more Features and more Maintainability.","archived":false,"fork":false,"pushed_at":"2026-05-28T20:30:33.000Z","size":6847,"stargazers_count":158,"open_issues_count":1,"forks_count":16,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-05-28T22:15:53.092Z","etag":null,"topics":["pterodactyl","pterodactyl-api","pterodactyl-wings"],"latest_commit_sha":null,"homepage":"https://calagopus.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/calagopus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["calagopus","0x7d8"],"ko_fi":"rjansen"}},"created_at":"2025-05-08T07:55:51.000Z","updated_at":"2026-05-28T20:31:09.000Z","dependencies_parsed_at":"2025-05-28T20:24:34.720Z","dependency_job_id":"5d091058-b55a-437d-ae2f-e2635ac7e567","html_url":"https://github.com/calagopus/wings","commit_stats":null,"previous_names":["0x7d8/wings-rust","0x7d8/wings-rs","pterodactyl-rs/wings","calagopus-rs/wings"],"tags_count":206,"template":false,"template_full_name":null,"purl":"pkg:github/calagopus/wings","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calagopus%2Fwings","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calagopus%2Fwings/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calagopus%2Fwings/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calagopus%2Fwings/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/calagopus","download_url":"https://codeload.github.com/calagopus/wings/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calagopus%2Fwings/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33691312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pterodactyl","pterodactyl-api","pterodactyl-wings"],"created_at":"2025-12-25T02:30:39.220Z","updated_at":"2026-05-30T12:00:50.326Z","avatar_url":"https://github.com/calagopus.png","language":"Rust","funding_links":["https://github.com/sponsors/calagopus","https://github.com/sponsors/0x7d8","https://ko-fi.com/rjansen"],"categories":[],"sub_categories":[],"readme":"![Calagopus Logo](https://calagopus.com/fulllogo.svg)\n\n# Calagopus Wings\n\n[![Rust](https://img.shields.io/badge/rust-stable-orange.svg?logo=rust)](https://www.rust-lang.org/)\n[![License](https://img.shields.io/github/license/calagopus/wings?color=blue)](https://github.com/calagopus/wings/blob/main/LICENSE)\n[![GitHub issues](https://img.shields.io/github/issues/calagopus/wings)](https://github.com/calagopus/wings/issues)\n[![GitHub stars](https://img.shields.io/github/stars/calagopus/wings)](https://github.com/calagopus/wings/stargazers)\n[![Discord](https://img.shields.io/discord/1429911351777824892?label=discord\u0026logo=discord\u0026color=5865F2)](https://discord.gg/uSM8tvTxBV)\n\nA rewrite of [Pterodactyl Wings](https://github.com/pterodactyl/wings) in the Rust programming language. This rewrite aims to be 100% API compatible while implementing new features and better performance.\n\n[Todo](https://notes.rjns.dev/workspace/cb7ccae8-0508-4f90-9161-d1e69b0ca8f0/uAVAL7iHSQpDk1SiSUPL1)\n\n## Installation\n\nFor installation instructions, please refer to the [Docs](https://calagopus.com/docs/wings/installation).\n\n## Added Config Options\n\n[Read full Config Reference](https://calagopus.com/docs/wings/configuration)\n\n```yml\napi:\n  # custom redirects for the api server, e.g. / -\u003e https://yourpanel.com\n  redirects: {}\n  # max amount of active file pulls per server\n  server_remote_download_limit: 3\n  # cidrs to block on the remote download pull endpoint\n  remote_download_blocked_cidrs:\n  - '127.0.0.0/8'\n  - '10.0.0.0/8'\n  - '172.16.0.0/12'\n  - '192.168.0.0/16'\n  - '169.254.0.0/16'\n  - ::1\n  - fe80::/10\n  - fc00::/7\n  # whether to disable the /openapi.json endpoint\n  disable_openapi_docs: false\n  # how many entries can be listed on a single page on the /list-directory API call, 0 means unlimited\n  directory_entry_limit: 10000\n  # send server logs of an offline server when connecting to ws\n  send_offline_server_logs: false\n  # how many threads to use when searching files using file search\n  file_search_threads: 4\n  # how many threads to use when copying directories\n  file_copy_threads: 4\n  # how many threads to use when decompressing .zip/.7z/.ddup\n  file_decompression_threads: 2\n  # how many threads to use when compressing .gz/.xz/.7z\n  file_compression_threads: 2\n  # how often a jwt can be used to download a file/backup until expiry, 0 means unlimited (2 minimum recommended)\n  max_jwt_uses: 5\n\nsystem:\n  # path for temporary mountpoints for servers\n  vmount_directory: /var/lib/pterodactyl/vmounts\n\n  # how many concurrent disk checks to allow for all servers globally, this applies to all disk checks - so also partial checks.\n  # 2 means no more than 2 servers will be checked at any given time\n  disk_check_concurrency: 2\n  # how often to do a full disk check when inotify is used, this is to prevent gradual desync between the\n  # actual disk usage and the inotify events. 6 means that a full disk check will be done every 6 inotify disk checks.\n  # so, if disk_check_interval is 150 seconds, then a full disk check will be done every 900 seconds (15 minutes)\n  full_disk_check_every: 6\n  # apply a real quota limit to each server\n  # none, btrfs_subvolume, zfs_dataset, xfs_quota, (experimental) fuse_quota\n  disk_limiter_mode: none\n  # use inotify to selectively rescan disk usage instead of forcing full rescans\n  system_disk_check_use_inotify: true\n\n  # use multiple threads to run chown on server startup\n  check_permissions_on_boot_threads: 4\n\n  sftp:\n    # whether to even enable to sftp (ssh) server\n    enabled: true\n    # the algorithm to use for the ssh host key\n    key_algorithm: ssh-ed25519\n    # whether to disable password auth for the sftp (ssh) server\n    disable_password_auth: false\n    # how many entries can be listed on readdir, 0 means unlimited\n    directory_entry_limit: 20000\n    # how many entries to send on each readdir call (chunk size)\n    directory_entry_send_amount: 500\n\n    limits:\n      # how many failed password authentication attempts within cooldown\n      authentication_password_attempts: 3\n      # how many failed public key authentication attempts within cooldown\n      authentication_pubkey_attempts: 20\n      # how long in seconds to cooldown after reaching max authentication attempts (if 0, no cooldown is applied)\n      # the cooldown is a sliding window, so if you make 3 failed attempts in 1 minute, you will have to wait 60 seconds from the last attempt\n      authentication_cooldown: 60\n\n    shell:\n      # whether to enable the wings remote shell (allows server management over ssh)\n      enabled: true\n\n      cli:\n        # what to call the internal cli for managing server actions (e.g. \".wings help\")\n        name: \".wings\"\n\n    activity:\n      # whether to log successful sftp logins in server activity\n      log_logins: false\n      # whether to log file read actions in server activity\n      log_file_reads: false\n\n  file_history:\n    enabled: true\n    zstd_level: 19\n    anchor_interval: 4\n    keep_chains: 2\n    file_size_cap: 1048576\n    per_file_disk_budget: 5242880\n    per_server_disk_budget: 209715200\n    maintenance_interval: 3600\n\n  backups:\n    # what compression level to use? best_speed, good_speed, good_compression, best_compression (higher compression = more CPU usage, better compression)\n    compression_level: best_speed\n    # allow browsing backups via the web file manager\n    mounting:\n      # whether backup \"mounting\" is enabled\n      enabled: true\n      # what the start of the path should be for browsing\n      # in this case, \".backups/\u003cbackup uuid\u003e\"\n      path: .backups\n\n    # settings for the wings backup driver\n    wings:\n      # how many threads to use when creating a .gz/.xz/.7z wings backup\n      create_threads: 4\n      # how many threads to use when restoring a zip wings backup\n      restore_threads: 4\n      # what archive format to use for local (wings) backups\n      # tar, tar_gz, tar_xz, tar_lzip, tar_bz2, tar_lz4, tar_zstd, zip, seven_zip\n      archive_format: tar_gz\n\n    # settings for the s3 backup driver\n    s3:\n      # how many threads to use when creating a .gz s3 backup\n      create_threads: 4\n      # how long in seconds to wait until a backup part is uploaded to s3\n      part_upload_timeout: 7200\n      # how often to attempt retrying each failed backup part\n      retry_limit: 10\n\n    # settings for the ddup-bak backup driver\n    ddup_bak:\n      # how many threads to use when creating a ddup-bak backup\n      create_threads: 4\n      # the compression format to use for each ddup-bak chunk\n      # none, deflate, gzip, brotli\n      compression_format: deflate\n\n    # settings for the restic backup driver\n    restic:\n      # the repository to use for restic backups (must already be initialized, can be overriden by panel)\n      repository: /var/lib/pterodactyl/backups/restic\n      # the password file to use for authenticating against the repository (can be overriden by panel)\n      password-file: /var/lib/pterodactyl/backups/restic_password\n      # how long to wait for a repository lock if locked in seconds (can be overriden by panel)\n      retry_lock_seconds: 60\n      # the restic cli environment for each command (useful for s3 credentials, etc, can be overriden by panel)\n      environment: {}\n\n    # settings for the btrfs backup driver\n    btrfs:\n      # how many threads to use when restoring a btrfs backup (snapshot)\n      restore_threads: 4\n      # whether to create the snapshots as read-only\n      create_read_only: true\n\n    # settings for the zfs backup driver\n    zfs:\n      # how many threads to use when restoring a zfs backup (snapshot)\n      restore_threads: 4\n\ndocker:\n  # the docker-compatible socket or http address to connect to\n  socket: /var/run/docker.sock\n  # whether to add (part) of the server name in the container name\n  server_name_in_container_name: false\n  # delete docker containers when a server is stopped/killed/crashes (a lot better for your cpu)\n  delete_container_on_stop: true\n\n  network:\n    # whether to disable binding to a specific ip\n    disable_interface_binding: false\n\n  installer_limits:\n    # how long in seconds to wait until an install container is considered failed, 0 means no limit\n    timeout: 1800\n\nremote_headers: {}\n\nremote_query:\n  # how often to attempt retrying some important api requests (exponential backoff)\n  retry_limit: 10\n\n# whether to ignore requests to upgrade wings remotely\nignore_panel_wings_upgrades: false\n```\n\n## Added Features\n\n### API\n\n- `GET /openapi.json` endpoint for getting a full OpenAPI documentation of the wings API\n- `GET /api/stats` API endpoint for seeing node usage\n- `GET /api/system/logs` API endpoint for listing all wings log files\n- `GET /api/system/logs/{file}` API endpoint for reading a wings log file\n- `POST /api/system/upgrade` API endpoint for remotely upgrading the wings binary\n- `POST /api/servers/{server}/script` API endpoint for running custom scripts async on the server\n- `POST /api/servers/{server}/ws/permissions` API endpoint for live updating user permissions on a server\n- `POST /api/servers/{server}/ws/broadcast` API endpoint for broadcasting a websocket message to multiple users\n- `POST /api/servers/{server}/install/abort` API endpoint for aborting a server installation process\n- `GET /api/servers/{server}/logs/install` API endpoint for getting server installation logs\n- `GET /api/servers/{server}/version` API endpoint for getting a version hash for a server\n- `GET /api/servers/{server}/files/fingerprints` API endpoint for getting fingerprints for many files at once\n- `GET /api/servers/{server}/files/list` API endpoint for listing files with pagination and file sorting\n- `POST /api/servers/{server}/files/search` API endpoint for searching for file names/content\n- `GET /api/servers/{server}/download/directory` API endpoint for downloading directories on-the-fly as archives\n\n---\n\n- properly support egg `file_denylist`\n- add support for browsing `.zip`, `.7z`, and `.ddup` archives in the file manager\n- add support for browsing `/home/container/` mounts as virtual directories in the file manager\n- add support for `name` property on `POST /api/servers/{server}/files/copy`\n- add support for opening individual compressed file (e.g. `.log.gz`) in `GET /api/servers/{server}/files/contents`\n- add (real) folder size support on `GET /api/servers/{server}/files/list-directory`\n- add multithreading support to `POST /api/servers/{server}/files/decompress`\n- add zip and 7z support to `POST /api/servers/{server}/files/compress`\n- add support for `ignored_files` in the file upload jwt\n- allow transferring backups in server transfers\n- reworked file operations so progress can be tracked via websocket events and in the background\n\n### Shell\n\n- add ability to connect via ssh and access server console\n- add `.wings` CLI to do basic server actions like power\n\n### SFTP\n\n- add support for the [check-file](https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-extensions-00#section-3) SFTP extension\n- add support for the [copy-file](https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-extensions-00#section-6) SFTP extension\n- add support for the [space-available](https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-extensions-00#section-4) SFTP extension\n- add support for the [limits@openssh.com](https://github.com/openssh/openssh-portable/blob/5f98660c51e673f521e0216c7ed20205c4af10ed/PROTOCOL#L524) SFTP extension\n- add support for the [statvfs@openssh.com](https://github.com/openssh/openssh-portable/blob/5f98660c51e673f521e0216c7ed20205c4af10ed/PROTOCOL#L437) SFTP extension\n- add support for the [hardlink@openssh.com](https://github.com/openssh/openssh-portable/blob/5f98660c51e673f521e0216c7ed20205c4af10ed/PROTOCOL#L478) SFTP extension\n- add support for the [fsync@openssh.com](https://github.com/openssh/openssh-portable/blob/5f98660c51e673f521e0216c7ed20205c4af10ed/PROTOCOL#L494) SFTP extension\n- add support for the [lsetstat@openssh.com](https://github.com/openssh/openssh-portable/blob/5f98660c51e673f521e0216c7ed20205c4af10ed/PROTOCOL#L508) SFTP extension\n- add support for the [users-groups-by-id@openssh.com](https://github.com/openssh/openssh-portable/blob/5f98660c51e673f521e0216c7ed20205c4af10ed/PROTOCOL#L643) SFTP extension\n- properly support egg `file_denylist`\n\n### Backups\n\n- add [`ddup-bak`](https://github.com/0x7d8/ddup-bak) backup driver\n- add [`btrfs`](https://github.com/kdave/btrfs-progs) backup driver\n- add [`zfs`](https://github.com/openzfs/zfs) backup driver\n- add [`restic`](https://github.com/restic/restic) backup driver\n- add ability to create `zip` and `7z` archives on `wings` backup driver\n- add ability to browse backups (for some drivers)\n\n### CLI\n\n- add `service-install` command to automatically setup a service for wings\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=calagopus/wings\u0026type=date\u0026legend=top-left)](https://www.star-history.com/#calagopus/wings\u0026type=date\u0026legend=top-left)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalagopus%2Fwings","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcalagopus%2Fwings","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalagopus%2Fwings/lists"}