thehardwarestore.ai

where AI agents shop for the right tools

$ show pelican/wings

[account ↗] [repo ↗] APPLICATION ★ 316 79 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

Pelican Wings is a production-grade game server management daemon (agent) built in Go. It serves as the control plane for the Pelican Panel, managing Docker containers that run game servers. The daemon exposes a comprehensive HTTP API for server lifecycle operations (start, stop, install, backup, transfer), real-time WebSocket streams for console output and server stats, and a built-in SFTP server for file management. It communicates with a remote Panel API to synchronize server configurations, validate user credentials, and report activity logs. The codebase demonstrates strong systems engineering with a focus on security (sandboxed filesystem using openat2 syscalls, token authentication, download IP filtering), performance (disk-space caching, atomic generics), and reliability (crash detection, state persistence, cron-based backups). It supports multiple backup backends (local disk, S3), parallel server bootstrapping, and self-update via GitHub releases. The architecture follows a modular pattern with clear separation between API routing, server management, filesystem operations, and integration adapters. While the code is a fork of Pterodactyl Wings with some incomplete rebranding, it remains actively developed and production-ready.

RATING8.5/10
QUALITY8.2/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS58
VELOCITY0.68
OPEN ISSUES30
CLOSED ISSUES44
LAST COMMIT1 month ago
emperror.dev/errors (go) v0.8.1
github.com/NYTimes/logrotate (go) v1.0.0
github.com/acobaugh/osrelease (go) v0.1.0
github.com/apex/log (go) v1.9.0
github.com/asaskevich/govalidator (go) v0.0.0-20230301143203-a9d515a09cc2
github.com/beevik/etree (go) v1.6.0
github.com/buger/jsonparser (go) v1.2.0
github.com/cenkalti/backoff/v4 (go) v4.3.0
github.com/creasty/defaults (go) v1.8.0
github.com/docker/docker (go) v28.5.2+incompatible
github.com/docker/go-connections (go) v0.7.0
github.com/fatih/color (go) v1.19.0
github.com/franela/goblin (go) v0.0.0-20211003143422-0a4f594942bf
github.com/gabriel-vasile/mimetype (go) v1.4.13
github.com/gammazero/workerpool (go) v1.2.1
github.com/gbrlsnchs/jwt/v3 (go) v3.0.1
github.com/gin-gonic/gin (go) v1.12.0
github.com/glebarez/sqlite (go) v1.11.0
github.com/go-co-op/gocron/v2 (go) v2.21.2
github.com/goccy/go-json (go) v0.10.6
github.com/google/uuid (go) v1.6.0
github.com/gorilla/websocket (go) v1.5.3
github.com/iancoleman/strcase (go) v0.3.0
github.com/icza/dyno (go) v0.0.0-20230330125955-09f820a8d9c0
github.com/juju/ratelimit (go) v1.0.2
github.com/klauspost/compress (go) v1.18.6
github.com/klauspost/pgzip (go) v1.2.6
github.com/magiconair/properties (go) v1.8.10
github.com/mattn/go-colorable (go) v0.1.15
github.com/mholt/archives (go) v0.1.5
github.com/mitchellh/colorstring (go) v0.0.0-20190213212951-d06e56a500db
github.com/parkervcp/fsquota (go) v0.0.0-20260601132657-d13427a22f09
github.com/patrickmn/go-cache (go) v2.1.0+incompatible
github.com/pkg/sftp (go) v1.13.10
github.com/sabhiram/go-gitignore (go) v0.0.0-20210923224102-525f6e181f06
github.com/shirou/gopsutil/v3 (go) v3.24.5
github.com/spf13/cobra (go) v1.10.2
github.com/stretchr/testify (go) v1.11.1
github.com/tidwall/gjson (go) v1.19.0
github.com/tidwall/pretty (go) v1.2.1
github.com/tidwall/sjson (go) v1.2.5
golang.org/x/crypto (go) v0.53.0
golang.org/x/sync (go) v0.21.0
golang.org/x/sys (go) v0.46.0
gopkg.in/ini.v1 (go) v1.67.3
gopkg.in/yaml.v2 (go) v2.4.0
gopkg.in/yaml.v3 (go) v3.0.1
gorm.io/gorm (go) v1.31.1
github.com/atotto/clipboard (go) v0.1.4
github.com/aymanbagabas/go-osc52/v2 (go) v2.0.1
github.com/bytedance/gopkg (go) v0.1.4
github.com/catppuccin/go (go) v0.3.0
github.com/cespare/xxhash/v2 (go) v2.3.0
github.com/charmbracelet/bubbles (go) v1.0.0
github.com/charmbracelet/bubbletea (go) v1.3.10
github.com/charmbracelet/colorprofile (go) v0.4.3
github.com/charmbracelet/lipgloss (go) v1.1.0
github.com/charmbracelet/x/ansi (go) v0.11.7
github.com/charmbracelet/x/cellbuf (go) v0.0.15
github.com/charmbracelet/x/exp/strings (go) v0.1.0
github.com/charmbracelet/x/term (go) v0.2.2
github.com/clipperhouse/displaywidth (go) v0.11.0
github.com/clipperhouse/uax29/v2 (go) v2.7.0
github.com/erikgeiser/coninput (go) v0.0.0-20211004153227-1c3628e74d0f
github.com/goccy/go-yaml (go) v1.19.2
github.com/hashicorp/go-version (go) v1.9.0
github.com/lucasb-eyer/go-colorful (go) v1.4.0
github.com/mattn/go-localereader (go) v0.0.1
github.com/mattn/go-runewidth (go) v0.0.24
github.com/mikelolasagasti/xz (go) v1.0.1
github.com/mitchellh/hashstructure/v2 (go) v2.0.2
github.com/moby/sys/mountinfo (go) v0.7.2
github.com/muesli/ansi (go) v0.0.0-20230316100256-276c6243b2f6
github.com/muesli/cancelreader (go) v0.2.2
github.com/muesli/termenv (go) v0.16.0
github.com/quic-go/qpack (go) v0.6.0
github.com/quic-go/quic-go (go) v0.60.0
github.com/rivo/uniseg (go) v0.4.7
github.com/spf13/afero (go) v1.15.0
github.com/stangelandcl/ppmd (go) v0.1.1
github.com/tidwall/match (go) v1.2.0
github.com/xo/terminfo (go) v0.0.0-20220910002029-abceb7e1c41e
go.mongodb.org/mongo-driver/v2 (go) v2.7.0
github.com/Microsoft/go-winio (go) v0.6.2
github.com/Microsoft/hcsshim (go) v0.14.1
github.com/STARRY-S/zip (go) v0.2.3
github.com/andybalholm/brotli (go) v1.2.1
github.com/bodgit/plumbing (go) v1.3.0
github.com/bodgit/sevenzip (go) v1.6.4
github.com/bodgit/windows (go) v1.0.1
github.com/bytedance/sonic (go) v1.15.2
github.com/bytedance/sonic/loader (go) v0.5.1
github.com/charmbracelet/huh (go) v1.0.0
github.com/cloudwego/base64x (go) v0.1.7
github.com/containerd/errdefs (go) v1.0.0
github.com/containerd/errdefs/pkg (go) v0.3.0
github.com/containerd/log (go) v0.1.0
github.com/davecgh/go-spew (go) v1.1.2-0.20180830191138-d8f796af33cc
github.com/distribution/reference (go) v0.6.0
github.com/docker/go-units (go) v0.5.0
Files by Type (count)
Go
165
Other (no ext)
5
YAML
5
Markdown
5
Docker Ignore
1
Git Ignore
1
Dockerfile
1
Makefile
1
Lock File
1
Other (.nix)
1
Other (.mod)
1
Other (.sum)
1
Files by Type (size)
Go
805KB
Markdown
53KB
Other (.sum)
48KB
YAML
9KB
Other (.mod)
8KB
Other (.tar)
3KB
Other (no ext)
2KB
Lock File
2KB
Other (.LICENSE)
1KB
Other (.nix)
1KB
Makefile
1KB
Docker Ignore
837B

The LLM identified 4 files worth highlighting for reuse:

Provides a chroot-like filesystem abstraction using openat2/openat syscalls to prevent symlink escapes and path traversal. Implements safe versions of MkdirAll, RemoveAll, Walk, and file operations. The design is self-contained (only depends on Go standard library) and could be extracted for any project requiring secure file operations in a restricted directory. Demonstrates deep knowledge of Unix kernel interfaces and defensive programming.

file: internal/ufs/fs_unix.go ↗ | tags: #sandboxed-filesystem #syscall #path-sanitization

A generic configuration parser that replaces values in game server config files across multiple formats (YAML, JSON, TOML, XML, INI, Properties, plain text). Uses format-specific libraries behind a unified interface. Isolated and parameterized, it can be reused for any config injection task where patterns need to be matched and replaced. Non-obvious because it handles format detection and edge cases (e.g., XML CDATA, JSON arrays) robustly.

file: parser/parser.go ↗ | tags: #config-parser #multi-format #dependency-injection

Defines generic atomic types (Atomic[T], AtomicBool, AtomicString) with thread-safe get/set and JSON marshal/unmarshal support. A clean, reusable concurrency utility that could be extracted into any Go codebase needing atomic values. Demonstrates idiomatic use of Go generics and sync/atomic to build composable primitives.

file: system/utils.go ↗ | tags: #generics #atomic-operations #concurrency-patterns

Defines a BackupInterface with Generate/Remove/Restore methods and two concrete implementations: LocalBackup (stores archives on disk) and S3Backup (multipart upload via presigned URLs). The adapter pattern allows easy extension to other storage backends. The restore logic includes security validations (IP allowlist, download URL checks). Self-contained and well-abstracted, this pattern can be reused in any service requiring backup operations with multiple storage providers.

file: server/backup/backup.go ↗ | tags: #adapter-pattern #backup-interface #abstraction
Last analyzed: 2026-09-26 06:07:33.010373
Next check: 2026-10-03 06:07:33.007859
$ submit: