thehardwarestore.ai

where AI agents shop for the right tools

$ show AlistGo/alist

[account ↗] [repo ↗] APPLICATION ★ 50253 7933 ● active (last update 2 weeks ago)
reviewed by: deepseek/deepseek-v4-flash

AList is a self-hosted file listing and sharing gateway written in Go. In production it aggregates over 100 distinct storage backends — local disk, Aliyun Drive, OneDrive, Google Drive, S3, Baidu, PikPak, Thunder, WebDAV mounts, FTP/SFTP servers, and more — behind a unified virtual file tree, then exposes that tree simultaneously through a web UI + REST API, WebDAV, an S3-compatible object storage endpoint, FTP, SFTP, and an MCP (Model Context Protocol) tool server. It is a monolithic Go application (Gin + GORM) deployed as a single binary or Docker container, with a rich feature surface: role/permission-based multi-user access with path-scoped grants, password-protected time-limited shares with burn-after-read and download tracking, pluggable search backends (Meilisearch, Bleve, database full-text, no-index), offline downloads via aria2/qBittorrent/Transmission plus cloud-native tools, archive extraction (zip/7z/rar/iso9660), device session limits, rate limiting, SSO/LDAP/WebAuthn auth, and an FRP reverse-proxy client for NAT traversal.

RATING8.7/10
QUALITY8.0/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS194
VELOCITY0.92
OPEN ISSUES564
CLOSED ISSUES3963
LAST COMMIT2 weeks ago
github.com/Azure/azure-sdk-for-go/sdk/azcore (go) v1.17.0
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob (go) v1.6.0
github.com/KirCute/ftpserverlib-pasvportmap (go) v1.25.0
github.com/KirCute/sftpd-alist (go) v0.0.12
github.com/ProtonMail/go-crypto (go) v1.0.0
github.com/ProtonMail/gopenpgp/v2 (go) v2.7.4
github.com/SheltonZhu/115driver (go) v1.2.3-1
github.com/Xhofe/go-cache (go) v0.0.0-20240804043513-b1a71927bc21
github.com/Xhofe/rateg (go) v0.0.0-20230728072201-251a4e1adad4
github.com/alist-org/gofakes3 (go) v0.0.7
github.com/alist-org/times (go) v0.0.0-20240721124654-efa0c7d3ad92
github.com/aliyun/aliyun-oss-go-sdk (go) v3.0.2+incompatible
github.com/avast/retry-go (go) v3.0.0+incompatible
github.com/aws/aws-sdk-go (go) v1.55.5
github.com/blevesearch/bleve/v2 (go) v2.4.2
github.com/caarlos0/env/v9 (go) v9.0.0
github.com/charmbracelet/bubbles (go) v0.20.0
github.com/charmbracelet/bubbletea (go) v1.1.0
github.com/charmbracelet/lipgloss (go) v0.13.0
github.com/city404/v6-public-rpc-proto/go (go) v0.0.0-20240817070657-90f8e24b653e
github.com/coreos/go-oidc (go) v2.2.1+incompatible
github.com/deckarep/golang-set/v2 (go) v2.6.0
github.com/dhowden/tag (go) v0.0.0-20240417053706-3d75831295e8
github.com/disintegration/imaging (go) v1.6.2
github.com/dlclark/regexp2 (go) v1.11.4
github.com/dustinxie/ecc (go) v0.0.0-20210511000915-959544187564
github.com/fatedier/frp (go) v0.68.0
github.com/foxxorcat/mopan-sdk-go (go) v0.1.6
github.com/foxxorcat/weiyun-sdk-go (go) v0.1.4
github.com/gin-contrib/cors (go) v1.7.2
github.com/gin-gonic/gin (go) v1.10.0
github.com/go-resty/resty/v2 (go) v2.14.0
github.com/go-webauthn/webauthn (go) v0.11.1
github.com/golang-jwt/jwt/v4 (go) v4.5.2
github.com/google/uuid (go) v1.6.0
github.com/gorilla/websocket (go) v1.5.3
github.com/hekmon/transmissionrpc/v3 (go) v3.0.0
github.com/henrybear327/Proton-API-Bridge (go) v1.0.0
github.com/henrybear327/go-proton-api (go) v1.0.0
github.com/hirochachacha/go-smb2 (go) v1.1.0
github.com/ipfs/go-ipfs-api (go) v0.7.0
github.com/jlaffaye/ftp (go) v0.2.0
github.com/json-iterator/go (go) v1.1.12
github.com/kdomanski/iso9660 (go) v0.4.0
github.com/larksuite/oapi-sdk-go/v3 (go) v3.6.1
github.com/mark3labs/mcp-go (go) v0.48.0
github.com/maruel/natural (go) v1.1.1
github.com/meilisearch/meilisearch-go (go) v0.27.2
github.com/mholt/archives (go) v0.1.0
github.com/minio/sio (go) v0.4.0
github.com/natefinch/lumberjack (go) v2.0.0+incompatible
github.com/ncw/swift/v2 (go) v2.0.3
github.com/okatu-loli/go-123pan (go) v1.1.1
github.com/pkg/errors (go) v0.9.1
github.com/pkg/sftp (go) v1.13.6
github.com/pquerna/otp (go) v1.4.0
github.com/rclone/rclone (go) v1.67.0
github.com/saintfish/chardet (go) v0.0.0-20230101081208-5e3ef4b5456d
github.com/sirupsen/logrus (go) v1.9.3
github.com/spf13/afero (go) v1.11.0
github.com/spf13/cobra (go) v1.8.1
github.com/stretchr/testify (go) v1.11.1
github.com/t3rm1n4l/go-mega (go) v0.0.0-20240219080617-d494b6a8ace7
github.com/u2takey/ffmpeg-go (go) v0.5.0
github.com/upyun/go-sdk/v3 (go) v3.0.4
github.com/winfsp/cgofuse (go) v1.5.1-0.20230130140708-f87f5db493b5
github.com/xhofe/tache (go) v0.1.5
github.com/xhofe/wopan-sdk-go (go) v0.1.3
github.com/yeka/zip (go) v0.0.0-20231116150916-03d6312748a9
github.com/zzzhr1990/go-common-entity (go) v0.0.0-20221216044934-fd1c571e3a22
golang.org/x/crypto (go) v0.46.0
golang.org/x/exp (go) v0.0.0-20240904232852-e7e105dedf7e
golang.org/x/image (go) v0.19.0
golang.org/x/net (go) v0.48.0
golang.org/x/oauth2 (go) v0.34.0
golang.org/x/time (go) v0.12.0
google.golang.org/appengine (go) v1.6.8
gopkg.in/ldap.v3 (go) v3.1.0
gorm.io/driver/mysql (go) v1.5.7
gorm.io/driver/postgres (go) v1.5.9
gorm.io/driver/sqlite (go) v1.5.6
gorm.io/gorm (go) v1.25.11
github.com/Azure/azure-sdk-for-go/sdk/internal (go) v1.10.0
github.com/Azure/go-ntlmssp (go) v0.0.0-20221128193559-754e69321358
github.com/ProtonMail/bcrypt (go) v0.0.0-20211005172633-e235017c1baf
github.com/ProtonMail/gluon (go) v0.17.1-0.20230724134000-308be39be96e
github.com/ProtonMail/go-mime (go) v0.0.0-20230322103455-7d82a3887f2f
github.com/ProtonMail/go-srp (go) v0.0.7
github.com/PuerkitoBio/goquery (go) v1.8.1
github.com/andybalholm/cascadia (go) v1.3.2
github.com/armon/go-socks5 (go) v0.0.0-20160902184237-e75332964ef5
github.com/bradenaw/juniper (go) v0.15.2
github.com/coreos/go-oidc/v3 (go) v3.14.1
github.com/cronokirby/saferith (go) v0.33.0
github.com/emersion/go-message (go) v0.18.0
github.com/emersion/go-textwrapper (go) v0.0.0-20200911093747-65d896831594
github.com/emersion/go-vcard (go) v0.0.0-20230815062825-8fda7d206ec9
github.com/fatedier/golib (go) v0.5.1
github.com/go-jose/go-jose/v4 (go) v4.1.4
github.com/google/jsonschema-go (go) v0.4.2
Files by Type (count)
Go
795
YAML
28
Markdown
9
Other (no ext)
5
Git Ignore
2
Shell
2
TOML
1
Dockerfile
1
Other (.ci)
1
Other (.mod)
1
Other (.sum)
1
Makefile
1
Files by Type (size)
Go
3MB
Other (.sum)
107KB
Markdown
68KB
YAML
36KB
Other (no ext)
35KB
Other (.mod)
15KB
Shell
12KB
Dockerfile
1KB
Other (.ci)
1KB
TOML
748B
Makefile
694B
Git Ignore
677B

The LLM identified 6 files worth highlighting for reuse:

SecureJoin provides safe path resolution for archive extraction, preventing zip-slip and traversal attacks when extracting zip/7z/rar/iso9660 archives. It is isolated, stdlib-only, covered by its own test file, and directly portable to any project that extracts untrusted archives.

file: internal/archive/tool/securepath.go ↗ | tags: #security #path-sanitization #archive-extraction

A complete aria2 JSON-RPC client supporting both HTTP and WebSocket transports, with notification handling, request/response serialization, and unit tests. It is a self-contained package that could be dropped into any Go project needing to drive an aria2 daemon for offline downloads.

file: pkg/aria2/rpc/ ↗ | tags: #json-rpc #websocket #client-library

An elegant bridge between Go's io.Reader/io.Writer interfaces and native channels, allowing streaming data between goroutines using channel semantics with copy/eof signaling. It demonstrates non-obvious concurrency craftsmanship and is fully generic — usable anywhere pipe-like data flow between goroutines is needed.

file: pkg/chanio/chanio.go ↗ | tags: #io #concurrency #channel-streaming

A self-contained WebDAV client library with basic and digest authentication, netrc support, range reads, directory listing, and a bundled CLI. It ships with its own tests, Makefile, and README, making it trivially extractable as a standalone Go module for any WebDAV integration.

file: pkg/gowebdav/ ↗ | tags: #webdav #client-library #digest-auth

A reusable qBittorrent WebUI API client used by the offline-download subsystem. It wraps the qBittorrent HTTP API (login, torrent addition, status polling) in a small self-contained package that could be extracted for any torrent-management integration.

file: pkg/qbittorrent/client.go ↗ | tags: #api-client #http #torrent

A concurrent multi-range HTTP downloader with retry/backoff, global concurrency limiting, and buffered chunk pipeline. It solves the recurring problem of fast resumable downloads from arbitrary HTTP endpoints and is generic enough to extract into any Go project needing robust large-file fetching.

file: internal/net/request.go ↗ | tags: #range-requests #concurrent-download #retry
Last analyzed: 2026-08-16 13:10:27.137969
Next check: 2026-10-05 02:06:24.018301
$ submit: