[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-83453":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":13,"stars30d":13,"stars90d":15,"forks30d":15,"starsTrendScore":17,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":23,"readmeContent":24,"aiSummary":9,"trendingCount":15,"starSnapshotCount":15,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},83453,"aeroplane","xt42io\u002Faeroplane","xt42io","Deploy apps and databases on your own server.",null,"TypeScript",179,22,89,3,0,5,34,82.99,"Apache License 2.0",false,"main",[],"2026-06-12 04:01:41","# Aeroplane\n\nAeroplane is a self-hosted deployment control plane for running apps and databases on your own VPS. It connects to GitHub, builds projects with Railpack and BuildKit, runs services with Docker, manages environment variables, writes Caddy routes for domains, and gives you a dashboard for deployments, logs, variables, database data, backups, and system updates.\n\n## Overview\n\nAeroplane is designed for small teams and personal infrastructure where you want Railway-like workflows without giving up control of the server.\n\nIt currently supports:\n\n- GitHub-connected projects and services.\n- Manual and push-triggered deployments.\n- Railpack-based builds through BuildKit.\n- Docker service orchestration with zero-downtime container swaps.\n- Generated service domains from a wildcard root domain.\n- Custom domains through Caddy.\n- Environment variable management.\n- PostgreSQL, Redis, and MongoDB services.\n- Database browsing, editing, SQL console support where applicable, and backups.\n\n## Installation\n\nOn a fresh Ubuntu\u002FDebian VPS, run:\n\n```bash\ncurl -fsSL https:\u002F\u002Fget.aeroplane.run | sh\n```\n\nThe installer creates `\u002Fopt\u002Faeroplane`, clones this repository into `\u002Fopt\u002Faeroplane\u002Fsource`, writes a production `.env`, builds Aeroplane locally, and starts:\n\n- `aeroplane` as a systemd service from the Git checkout\n- `deploy-buildkit` on `127.0.0.1:1234`\n- `deploy-caddy` on host ports `80` and `443`\n\nAfter installation, open the printed URL and complete onboarding in the browser.\n\nDuring onboarding you can set a dashboard domain, for example `pilot.example.com`. Point that hostname at the VPS and Aeroplane will write the Caddy route for the control plane. The raw `http:\u002F\u002FIP:4310` URL remains available as a fallback.\n\n### Install Options\n\nYou can override installer defaults by passing environment variables to `sh`:\n\n```bash\ncurl -fsSL https:\u002F\u002Fget.aeroplane.run | \\\n  AEROPLANE_PUBLIC_URL=https:\u002F\u002Fpilot.example.com \\\n  AEROPLANE_REPO_BRANCH=main \\\n  AEROPLANE_PORT=4310 \\\n  sh\n```\n\nCommon options:\n\n- `AEROPLANE_HOME`: install directory, default `\u002Fopt\u002Faeroplane`\n- `AEROPLANE_REPO_URL`: Git repository to clone, default `https:\u002F\u002Fgithub.com\u002Fxt42io\u002Faeroplane.git`\n- `AEROPLANE_REPO_BRANCH`: Git branch to install and update from, default `main`\n- `AEROPLANE_PUBLIC_URL`: public URL written to `PUBLIC_URL`\n- `AEROPLANE_PORT`: control-plane port, default `4310`\n\n### Managing The Install\n\nOn the VPS:\n\n```bash\nsudo journalctl -u aeroplane -f\ncd \u002Fopt\u002Faeroplane\u002Fsource && git status\ncd \u002Fopt\u002Faeroplane && sudo docker compose logs -f caddy buildkit\n```\n\nIf UFW is enabled, allow the public ports:\n\n```bash\nsudo ufw allow 80\u002Ftcp\nsudo ufw allow 443\u002Ftcp\nsudo ufw allow 4310\u002Ftcp\n```\n\n## Local Development\n\n```bash\nnpm install\ncp .env.example .env\nnpm run dev\n```\n\nOpen `http:\u002F\u002Flocalhost:5173`.\n\nFor UI-only work, set this in `.env`:\n\n```bash\nDEPLOY_DRY_RUN=true\n```\n\nFor real local deployments, start the host services:\n\n```bash\ndocker compose up -d\n```\n\nThen use:\n\n```bash\nBUILDKIT_HOST=tcp:\u002F\u002F127.0.0.1:1234\nCADDY_CONFIG_PATH=.\u002Fdata\u002FCaddyfile\nCADDY_DATA_DIR=\u002Fsrv\u002Fdeploy-data\nCADDY_RELOAD_CMD=true\nDEPLOY_DRY_RUN=false\n```\n\n## GitHub App\n\nAeroplane works best with a GitHub App. Create one with these repository permissions:\n\n- `Contents: Read`\n- `Metadata: Read`\n\nSubscribe it to the `Push` webhook event and point the webhook URL at:\n\n```txt\nhttps:\u002F\u002FYOUR_PUBLIC_HOST\u002Fapi\u002Fgithub\u002Fapp\u002Fwebhook\n```\n\nThe app details can be entered during onboarding or later in system settings.\n\n## Domains\n\nSet a dashboard domain in onboarding or system settings to serve Aeroplane itself through Caddy:\n\n```txt\nA     pilot.example.com     YOUR_SERVER_IPV4\nAAAA  pilot.example.com     YOUR_SERVER_IPV6\n```\n\nSet a wildcard root domain in onboarding or system settings to generate service hostnames automatically.\n\nExample:\n\n```txt\nWildcard root domain: *.pilot.example.com\nService URL: api.pilot.example.com\n```\n\nFor custom domains, point DNS at the VPS:\n\n```txt\nA     app.example.com     YOUR_SERVER_IPV4\nAAAA  app.example.com     YOUR_SERVER_IPV6\n```\n\nCaddy handles routing and certificates once DNS resolves to the server.\n\n## Stack\n\n- TypeScript\n- React + Vite\n- Hono on Node.js\n- SQLite + Drizzle\n- Railpack + BuildKit\n- Docker Engine\n- Caddy\n\n## Security Note\n\nAeroplane runs deployment workloads on your server through Docker. Only install it on infrastructure you control, and only grant access to trusted users.\n",2,"2026-06-11 04:11:14","CREATED_QUERY"]