← Back to Skyladder

Source Code

Last updated: October 28, 2026

Skyladder's connection engine is Xray-core, open-source software licensed under the Mozilla Public License 2.0 (MPL-2.0). This page says where its source code is, including the files Skyladder changes.

Xray-core

The app is built from Xray-core v26.7.28, commit 5ca6f4b, and runs it on the phone through libXray (MIT license). Apart from the changes below, Xray-core's files are exactly as published there.

The files Skyladder changes

transport/internet/hysteria/dialer.go, line 95. Skyladder always sends the QUIC transport parameter max_datagram_frame_size to Hysteria2 servers: without it, a Hysteria2 server run by sing-box relays no UDP traffic, and DNS through the VPN fails.

-OmitMaxDatagramFrameSize: time.Now().After(time.Date(2026, 9, 1, 0, 0, 0, 0, time.UTC)),
+OmitMaxDatagramFrameSize: false, // Skyladder: always send it; sing-box servers relay no UDP without it

Download the changed file. Like the rest of Xray-core, it is licensed under the MPL-2.0.

features/dns/localdns/client.go, lines 5 and 36. Where the app sets up a resolver of its own, the engine's own DNS lookups use it, and it asks the phone's network for the answer; without it they found no DNS server, and servers given by name connected slowly or not at all:

+stdnet "net"
-if len(internet.Controllers) > 0 {
+if len(internet.Controllers) > 0 && stdnet.DefaultResolver.Dial == nil { // Skyladder: a resolver the app installed (libXray SetDNS) is used

Download the changed file. Like the rest of Xray-core, it is licensed under the MPL-2.0.

proxy/tun/tun_darwin.go, lines 67–81 and 148–150. Each time the engine starts, it reads the VPN's network interface through a copy of the descriptor of its own, and closes that copy when it stops. Before, an engine restarted for a new server shared the descriptor with the one before it: the old one's reader stayed behind, and the descriptor could be closed while the new engine was using it:

+fd, err = unix.Dup(fd)
 …
-if t.ownsFd {
-	return xerrors.Combine(routeErr, t.tunFile.Close())
-}
-// iOS: don't close the fd, it's owned by NetworkExtension
-return routeErr
+return xerrors.Combine(routeErr, t.tunFile.Close())

Download the changed file. Like the rest of Xray-core, it is licensed under the MPL-2.0.

go.mod and go.sum. Skyladder adds amneziawg-go (MIT license), which its AmneziaWG connections use, to Xray-core's dependencies; adding it also moved one library Xray-core uses indirectly to a newer version. Two libraries that only the old Shadowsocks 2022 code used (below) are gone:

+	github.com/amnezia-vpn/amneziawg-go/v3 v3.1.20260828
-	github.com/google/btree v1.1.2 // indirect
+	github.com/google/btree v1.1.3 // indirect
-	github.com/sagernet/sing v0.5.1
-	github.com/sagernet/sing-shadowsocks v0.2.7

Download the changed go.mod and go.sum. Like the rest of Xray-core, they are licensed under the MPL-2.0.

Shadowsocks 2022. Skyladder runs it on the code Xray-core itself has used since v26.9.30 (commits 65e853e and 0086362) instead of the code in v26.7.28: the files in proxy/shadowsocks_2022/ are replaced, along with their tests, common/singbridge/ is removed, and infra/conf/shadowsocks.go changes to match. One line is Skyladder's own, in proxy/shadowsocks_2022/stream.go: the app waits for the whole of the server's first reply, which the network may deliver in pieces (upstream's line, then ours):

-n, err := r.Read(headerSlice)
+n, err := io.ReadFull(r, headerSlice)

Download the changed files:

Like the rest of Xray-core, they are licensed under the MPL-2.0.

Questions

Email support@sky-ladder.com.