{"architecture":"amd64","config":{"ExposedPorts":{"20128/tcp":{}},"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NODE_VERSION=22.23.2","YARN_VERSION=1.22.22","NODE_ENV=production","PORT=20128","HOSTNAME=0.0.0.0","NEXT_TELEMETRY_DISABLED=1","DATA_DIR=/app/data"],"Entrypoint":["/entrypoint.sh"],"Cmd":["node","custom-server.js"],"WorkingDir":"/app","Labels":{"org.opencontainers.image.created":"2026-09-05T17:20:56.213Z","org.opencontainers.image.description":"Unlimited FREE AI coding. Connect Claude Code, Codex, Cursor, Cline, Copilot, Antigravity to FREE Claude/GPT/Gemini via 40+ providers. Auto-fallback, RTK -40% tokens, never hit limits.","org.opencontainers.image.licenses":"MIT","org.opencontainers.image.revision":"eb712ca821f0ba6bc41043fbd14494c5af5daba5","org.opencontainers.image.source":"https://github.com/decolua/9router","org.opencontainers.image.title":"9router","org.opencontainers.image.url":"https://github.com/decolua/9router","org.opencontainers.image.version":"0.5.69"},"ArgsEscaped":true},"created":"2026-09-05T17:25:45.844634159Z","history":[{"created":"2026-06-16T00:01:29.967161902Z","created_by":"ADD alpine-minirootfs-3.24.1-x86_64.tar.gz / # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-06-16T00:01:29.967161902Z","created_by":"CMD [\"/bin/sh\"]","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-07-29T17:26:55.339439555Z","created_by":"ENV NODE_VERSION=22.23.2","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-07-29T17:26:55.339439555Z","created_by":"RUN /bin/sh -c addgroup -g 1000 node \u0026\u0026 adduser -u 1000 -G node -s /bin/sh -D node \u0026\u0026 apk add --no-cache libstdc++ \u0026\u0026 apk add --no-cache --virtual .build-deps curl \u0026\u0026 ARCH= OPENSSL_ARCH='linux*' \u0026\u0026 alpineArch=\"$(apk --print-arch)\" \u0026\u0026 case \"${alpineArch##*-}\" in x86_64) ARCH='x64' CHECKSUM=\"2d18b5731055f7efa6c899004909b00ee110e38d3775745f60ec9ccf1f9982e7\" OPENSSL_ARCH=linux-x86_64;; x86) OPENSSL_ARCH=linux-elf;; aarch64) OPENSSL_ARCH=linux-aarch64;; arm*) OPENSSL_ARCH=linux-armv4;; ppc64le) OPENSSL_ARCH=linux-ppc64le;; s390x) OPENSSL_ARCH=linux-s390x;; *) ;; esac \u0026\u0026 if [ -n \"${CHECKSUM}\" ]; then set -eu; curl -fsSLO --compressed \"https://unofficial-builds.nodejs.org/download/release/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH-musl.tar.xz\"; echo \"$CHECKSUM node-v$NODE_VERSION-linux-$ARCH-musl.tar.xz\" | sha256sum -c - \u0026\u0026 tar -xJf \"node-v$NODE_VERSION-linux-$ARCH-musl.tar.xz\" -C /usr/local --strip-components=1 --no-same-owner \u0026\u0026 ln -s /usr/local/bin/node /usr/local/bin/nodejs; else echo \"Building from source\" \u0026\u0026 apk add --no-cache --virtual .build-deps-full binutils-gold g++ gcc gnupg libgcc linux-headers make python3 py-setuptools \u0026\u0026 export GNUPGHOME=\"$(mktemp -d)\" \u0026\u0026 for key in 5BE8A3F6C8A5C01D106C0AD820B1A390B168D356 DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 CC68F5A3106FF448322E48ED27F5E38D5B0A215F 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C 108F52B48DB57BB0CC439B2997B01419BD92F80A A363A499291CBBC940DD62E41F10027AF002F8B0 655F3B5C1FB3FA8D1A0CA6BDE4A7D232B936D2FD ; do { gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$key\" \u0026\u0026 gpg --batch --fingerprint \"$key\"; } || { gpg --batch --keyserver keyserver.ubuntu.com --recv-keys \"$key\" \u0026\u0026 gpg --batch --fingerprint \"$key\"; } ; done \u0026\u0026 curl -fsSLO --compressed \"https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION.tar.xz\" \u0026\u0026 curl -fsSLO --compressed \"https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc\" \u0026\u0026 gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \u0026\u0026 gpgconf --kill all \u0026\u0026 rm -rf \"$GNUPGHOME\" \u0026\u0026 grep \" node-v$NODE_VERSION.tar.xz\\$\" SHASUMS256.txt | sha256sum -c - \u0026\u0026 tar -xf \"node-v$NODE_VERSION.tar.xz\" \u0026\u0026 cd \"node-v$NODE_VERSION\" \u0026\u0026 ./configure \u0026\u0026 make -j$(getconf _NPROCESSORS_ONLN) V= \u0026\u0026 make install \u0026\u0026 apk del .build-deps-full \u0026\u0026 cd .. \u0026\u0026 rm -Rf \"node-v$NODE_VERSION\" \u0026\u0026 rm \"node-v$NODE_VERSION.tar.xz\" SHASUMS256.txt.asc SHASUMS256.txt; fi \u0026\u0026 rm -f \"node-v$NODE_VERSION-linux-$ARCH-musl.tar.xz\" \u0026\u0026 find /usr/local/include/node/openssl/archs -mindepth 1 -maxdepth 1 ! -name \"$OPENSSL_ARCH\" -exec rm -rf {} \\; \u0026\u0026 apk del .build-deps \u0026\u0026 node --version \u0026\u0026 npm --version \u0026\u0026 rm -rf /tmp/* # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-07-29T17:26:55.339439555Z","created_by":"ENV YARN_VERSION=1.22.22","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-07-29T17:26:59.49531038Z","created_by":"RUN /bin/sh -c apk add --no-cache --virtual .build-deps-yarn curl gnupg tar \u0026\u0026 export GNUPGHOME=\"$(mktemp -d)\" \u0026\u0026 for key in 6A010C5166006599AA17F08146C2130DFD2497F5 ; do { gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys \"$key\" \u0026\u0026 gpg --batch --fingerprint \"$key\"; } || { gpg --batch --keyserver keyserver.ubuntu.com --recv-keys \"$key\" \u0026\u0026 gpg --batch --fingerprint \"$key\"; } ; done \u0026\u0026 curl -fsSLO --compressed \"https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz\" \u0026\u0026 curl -fsSLO --compressed \"https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc\" \u0026\u0026 gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \u0026\u0026 gpgconf --kill all \u0026\u0026 rm -rf \"$GNUPGHOME\" \u0026\u0026 mkdir -p /opt \u0026\u0026 tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \u0026\u0026 ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn \u0026\u0026 ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg \u0026\u0026 rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \u0026\u0026 apk del .build-deps-yarn \u0026\u0026 yarn --version \u0026\u0026 rm -rf /tmp/* # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-07-29T17:26:59.52113679Z","created_by":"COPY docker-entrypoint.sh /usr/local/bin/ # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-07-29T17:26:59.52113679Z","created_by":"ENTRYPOINT [\"docker-entrypoint.sh\"]","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-07-29T17:26:59.52113679Z","created_by":"CMD [\"node\"]","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-07-30T02:47:55.91004435Z","created_by":"WORKDIR /app","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-03T04:05:35.203811645Z","created_by":"LABEL org.opencontainers.image.title=9router","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-03T04:05:35.203811645Z","created_by":"ENV NODE_ENV=production","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-03T04:05:35.203811645Z","created_by":"ENV PORT=20128","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-03T04:05:35.203811645Z","created_by":"ENV HOSTNAME=0.0.0.0","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-03T04:05:35.203811645Z","created_by":"ENV NEXT_TELEMETRY_DISABLED=1","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-03T04:05:35.203811645Z","created_by":"ENV DATA_DIR=/app/data","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-03T04:05:35.203811645Z","created_by":"COPY /app/public ./public # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-05T17:25:33.855179742Z","created_by":"COPY /app/.next/static ./.next/static # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-05T17:25:34.677847999Z","created_by":"COPY /app/.next/standalone ./ # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-05T17:25:34.727764378Z","created_by":"COPY /app/custom-server.js ./custom-server.js # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-05T17:25:34.788713066Z","created_by":"COPY /app/open-sse ./open-sse # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-05T17:25:34.810723359Z","created_by":"COPY /app/src/mitm ./src/mitm # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-05T17:25:34.834708511Z","created_by":"COPY /app/node_modules/node-forge ./node_modules/node-forge # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-05T17:25:36.918199868Z","created_by":"COPY /app/node_modules/next ./node_modules/next # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-05T17:25:37.045223605Z","created_by":"COPY /app/node_modules/sql.js ./node_modules/sql.js # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-05T17:25:37.059889264Z","created_by":"COPY /app/node_modules/node-machine-id ./node_modules/node-machine-id # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-05T17:25:44.030924967Z","created_by":"RUN /bin/sh -c mkdir -p /app/data \u0026\u0026 chown -R node:node /app \u0026\u0026 mkdir -p /app/data-home \u0026\u0026 chown node:node /app/data-home \u0026\u0026 ln -sf /app/data-home /root/.9router 2\u003e/dev/null || true # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-05T17:25:45.844634159Z","created_by":"RUN /bin/sh -c apk --no-cache upgrade \u0026\u0026 apk --no-cache add su-exec \u0026\u0026 printf '#!/bin/sh\\nchown -R node:node /app/data /app/data-home 2\u003e/dev/null\\nexec su-exec node \"$@\"\\n' \u003e /entrypoint.sh \u0026\u0026 chmod +x /entrypoint.sh # buildkit","comment":"buildkit.dockerfile.v0"},{"created":"2026-09-05T17:25:45.844634159Z","created_by":"EXPOSE map[20128/tcp:{}]","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-05T17:25:45.844634159Z","created_by":"ENTRYPOINT [\"/entrypoint.sh\"]","comment":"buildkit.dockerfile.v0","empty_layer":true},{"created":"2026-09-05T17:25:45.844634159Z","created_by":"CMD [\"node\" \"custom-server.js\"]","comment":"buildkit.dockerfile.v0","empty_layer":true}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c","sha256:5654eeaf04645c03fadc59bca7835753203d173222ab6ad8729f75b3dde98784","sha256:fe2c6446e3d9c78c5f734536452b9ea4bf7c4c46c4b4a575d2973b79691ec57a","sha256:baf2266664bacf240e13831e4192f8c92196c603ce8a20a4a50035ad87f8f2fb","sha256:f40845e48e48a94bf2e0e9556522eaa0792dfacfae93ed9aa48aa07d419b198b","sha256:3cc705ae5eaa0dabd5d6edf8ab206fa878b55863436f0767015f9559c86d591e","sha256:48a391347cd9ac49cff87d53c3b81479fb4d970c3d625d89c2215d024f7c26e5","sha256:2d75a207416f174105dd6d8453d9c7638cb4b5dedcc9ef99bdaeeac83283734b","sha256:060c5c3e0d9b53ffc40b3d152fcdb1b085493dc0dc7afb2ea99c09027513bf4a","sha256:058bf900b035a26e1c57b7b9f32a0ba1218225f42dadb9a03e1d44b65b2db699","sha256:409d5ad8d7b802e478ec1a6fdd38489811040b711dbabcaaa16fe335701d24b2","sha256:5230e7076a0501a97e5294cd4de8a3dc00e776d6c869c6a72f4f349bd7d71653","sha256:52b4bb327e7351084c4214c2c801f215544ca830eedd868d8bfee6577b264faa","sha256:63a3d0e61ae82b0a86e62b516163f16109e17cd403ddebebcd3064e8bb678fab","sha256:6aeb6a093104fd005e33923444f4da2c427c9701a272466881b72711521ca12d","sha256:20a8d1fa14379464b65d99305cc5de6799fa31de944978df64e3b683c373115a","sha256:482e753f5491a172f7c2a982ee66002dd7d2d4db864de9544a8f4962309e2a62"]}}