{"id":29543518,"url":"https://github.com/elitan/lightform","last_synced_at":"2025-07-17T14:03:30.280Z","repository":{"id":293282760,"uuid":"983417313","full_name":"elitan/lightform","owner":"elitan","description":"Ship Docker Anywhere","archived":false,"fork":false,"pushed_at":"2025-07-10T11:35:44.000Z","size":97934,"stargazers_count":264,"open_issues_count":1,"forks_count":6,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-07-10T12:59:32.803Z","etag":null,"topics":["bun","cloud","docker","go","typescript"],"latest_commit_sha":null,"homepage":"https://lightform.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elitan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-14T10:57:43.000Z","updated_at":"2025-07-10T10:22:32.000Z","dependencies_parsed_at":"2025-07-10T12:59:41.047Z","dependency_job_id":"6d07e361-f3ab-4376-8986-69fc23287a81","html_url":"https://github.com/elitan/lightform","commit_stats":null,"previous_names":["elitan/luma","elitan/lightform"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/elitan/lightform","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elitan%2Flightform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elitan%2Flightform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elitan%2Flightform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elitan%2Flightform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elitan","download_url":"https://codeload.github.com/elitan/lightform/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elitan%2Flightform/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265425821,"owners_count":23762909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bun","cloud","docker","go","typescript"],"created_at":"2025-07-17T14:01:18.611Z","updated_at":"2025-07-17T14:03:30.268Z","avatar_url":"https://github.com/elitan.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# Lightform\n\nZero-downtime Docker deployments with automatic HTTPS. Build locally, deploy to your servers.\n\n```bash\nnpm install -g lightform-cli\nlightform init\nlightform       # Deploys with automatic setup - that's it!\n```\n\n```yaml\n# lightform.yml\nname: my-app\n\nssh:\n  username: lightform\n\napps:\n  web:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    server: your-server.com\n    proxy:\n      app_port: 3000\n      # hosts:\n      #   - myapp.com #- optional, auto-generated if not provided\n    environment:\n      secret:\n        - DATABASE_URL\n```\n\n```\n❯ lightform\n[✓] Ensuring infrastructure is ready (1.2s)\n[✓] Building Images (1.8s)\n[✓] Zero-downtime deployment of web (3.5s)\n[✓] Deployment completed successfully in 9.8s\n\nhttps://a1b2c3d4-web-lightform-192-168-1-100.app.lightform.dev\n```\n\n## Why Lightform?\n\n**Own your infrastructure** without the complexity. Deploy any Docker app to your servers with zero configuration.\n\n**vs Kamal**:\n\n- TypeScript/Bun instead of Ruby\n- No Docker registry required - build locally, transfer directly\n- Automatic fresh server setup and security hardening\n- Instant domains with no DNS configuration needed\n\n**vs Vercel/Netlify**:\n\n- Your own servers - full control, no vendor lock-in\n- Any Docker app - not limited to specific frameworks\n- No cold starts - containers always running\n- Cost-effective - pay only for your servers\n\n**vs Docker Compose**:\n\n- Zero-downtime deployments - Compose restarts cause downtime\n- Multi-server support - deploy across multiple machines\n- Automatic SSL certificates and reverse proxy\n- Git-based releases with rollback capabilities\n\n## Features\n\n- **Zero-downtime deployments**: Blue-green deployment with automatic health checks and rollbacks\n- **Registry-free**: Build locally, transfer via SSH (no Docker registry setup needed)\n- **Auto-SSL**: Let's Encrypt certificates with automatic domain provisioning\n- **Server bootstrap**: Fresh Ubuntu/Debian servers configured automatically with security hardening\n- **Multi-server**: Deploy across multiple machines with automatic load balancing\n- **Git-based releases**: Each deployment tagged with Git SHA for easy rollbacks\n- **Secure by default**: Fail2Ban, automatic updates, SSH hardening, dedicated users\n\n## Configuration\n\n```yaml\nname: my-app\n\nssh:\n  username: lightform\n\napps:\n  web:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    server: your-server.com\n    proxy:\n      hosts:\n        - myapp.com #- optional, auto-generated if not provided\n      app_port: 3000\n    environment:\n      secret:\n        - DATABASE_URL\n\nservices:\n  postgres:\n    image: postgres:15\n    server: your-server.com\n    environment:\n      secret:\n        - POSTGRES_PASSWORD\n    volumes:\n      - postgres_data:/var/lib/postgresql/data\n```\n\nSecrets in `.lightform/secrets`:\n\n```bash\nDATABASE_URL=postgres://user:pass@localhost:5432/myapp\nPOSTGRES_PASSWORD=supersecret\n```\n\n## Commands\n\n```bash\nlightform init                    # Create lightform.yml and .lightform/secrets\nlightform                         # Deploy all apps (auto-setup included)\nlightform web                     # Deploy specific app\nlightform --services              # Deploy services only\nlightform --verbose               # Deploy with detailed output\nlightform status                  # Check deployment status\nlightform proxy status            # Check proxy status on all servers\nlightform proxy update            # Update proxy to latest version\nlightform proxy delete-host --host api.example.com  # Remove host from proxy\nlightform proxy logs --lines 100  # Show proxy logs (default: 50 lines)\n```\n\n**Note**: Infrastructure setup is automatic. Fresh servers are detected and configured automatically during deployment.\n\n## Examples\n\n**Simple app:**\n\n```yaml\nname: blog\n\nssh:\n  username: lightform\n\napps:\n  web:\n    build:\n      context: .\n    server: your-server.com\n    proxy:\n      app_port: 3000\n    environment:\n      secret:\n        - DATABASE_URL\n```\n\n**Monorepo with multiple apps:**\n\n```yaml\n# Repository structure:\n# /\n# ├── lightform.yml\n# ├── frontend/\n# │   └── Dockerfile\n# ├── backend/\n# │   └── Dockerfile\n# └── mobile-api/\n#     └── Dockerfile\n\nname: ecommerce\n\nssh:\n  username: lightform\n\napps:\n  frontend:\n    build:\n      context: ./frontend # Build context: ./frontend directory\n      dockerfile: ./frontend/Dockerfile # Dockerfile path from project root\n    server: web-server.com\n    proxy:\n      hosts:\n        - shop.com\n      app_port: 3000\n\n  backend:\n    build:\n      context: ./backend # Build context: ./backend directory\n      dockerfile: ./backend/Dockerfile # Dockerfile path from project root\n    server: api-server.com\n    proxy:\n      hosts:\n        - api.shop.com\n      app_port: 8080\n    environment:\n      secret:\n        - DATABASE_URL\n        - JWT_SECRET\n\n  mobile-api:\n    build:\n      context: ./mobile-api # Build context: ./mobile-api directory\n      dockerfile: ./mobile-api/Dockerfile # Dockerfile path from project root\n    server: api-server.com\n    proxy:\n      app_port: 5000\n    environment:\n      secret:\n        - DATABASE_URL\n\nservices:\n  postgres:\n    image: postgres:15\n    server: db-server.com\n    environment:\n      secret:\n        - POSTGRES_PASSWORD\n    volumes:\n      - postgres_data:/var/lib/postgresql/data\n```\n\n**Multi-environment:**\n\n```bash\nlightform deploy -c lightform.staging.yml\nlightform deploy -c lightform.production.yml\n```\n\n## How it works\n\n- **Registry-free deployment**: Build Docker images locally, transfer via SSH, deploy with zero downtime\n- **Smart server setup**: Detects fresh servers and automatically installs Docker, hardens SSH, sets up users\n- **Blue-green deployment**: New version deployed alongside current, health checked, then traffic switched atomically\n- **Automatic HTTPS**: Provisions SSL certificates and domains automatically (or use your own)\n- **Intelligent infrastructure**: Setup happens automatically during deployment - no separate commands needed\n\n## Requirements\n\n- **Local**: Bun or Node.js 18+\n- **Servers**: Ubuntu/Debian with SSH access (root for fresh servers)\n- **Ports**: 80, 443 open\n\nFresh servers only need root SSH access - Lightform handles the rest automatically.\n\n## Development\n\n```bash\ngit clone https://github.com/elitan/lightform\ncd lightform \u0026\u0026 bun install \u0026\u0026 bun run dev\n```\n\n**MIT License** - Made for developers who want simple, reliable deployments on their own infrastructure.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felitan%2Flightform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felitan%2Flightform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felitan%2Flightform/lists"}