{"id":19435330,"url":"https://github.com/thor-x86/kuda","last_synced_at":"2026-03-05T03:32:22.476Z","repository":{"id":40798891,"uuid":"309089550","full_name":"Thor-x86/kuda","owner":"Thor-x86","description":"Fast and concurrent in-memory web server","archived":false,"fork":false,"pushed_at":"2023-03-07T01:52:30.000Z","size":70099,"stargazers_count":11,"open_issues_count":14,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-03T11:22:30.768Z","etag":null,"topics":["angular","devops","react","vue","webserver"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Thor-x86.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2020-11-01T12:20:40.000Z","updated_at":"2024-09-16T13:56:10.000Z","dependencies_parsed_at":"2024-06-20T01:40:25.834Z","dependency_job_id":null,"html_url":"https://github.com/Thor-x86/kuda","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thor-x86%2Fkuda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thor-x86%2Fkuda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thor-x86%2Fkuda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thor-x86%2Fkuda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Thor-x86","download_url":"https://codeload.github.com/Thor-x86/kuda/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250704955,"owners_count":21473789,"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":["angular","devops","react","vue","webserver"],"created_at":"2024-11-10T15:05:35.000Z","updated_at":"2026-03-05T03:32:22.435Z","avatar_url":"https://github.com/Thor-x86.png","language":"Go","readme":"# Kuda Web Server\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Open Issues](https://img.shields.io/github/issues-raw/Thor-x86/kuda)](https://github.com/Thor-x86/kuda/issues)\n[![Open Pull Request](https://img.shields.io/github/issues-pr-raw/Thor-x86/kuda)](https://github.com/Thor-x86/kuda/pulls)\n[![Unit Test Result](https://img.shields.io/travis/Thor-x86/kuda)](https://travis-ci.org/Thor-x86/kuda)\n\nFast and concurrent in-memory web server. It compress static files with [gzip](https://en.wikipedia.org/wiki/Gzip), put them into RAM, and serve them as a normal web server. So Dev/Ops don't have to worry about storage speed, just focus on networking matter.\n\nThe best use case is serving Single Page Application (SPA) like [React](https://reactjs.org/), [Vue](https://vuejs.org/), and [Angular](https://angular.io/).\n\nSpecial thanks to [fasthttp](https://github.com/valyala/fasthttp) and contributors for making kuda possible 🤘\n\n## Download\n\nSee [release timeline](https://github.com/Thor-x86/kuda/releases)\n\n## How to use\n\n```\nUSAGE:\n    kuda [arguments] \u003cpublic_root_directory\u003e\n\nARGUMENTS:\n    --port=...     : TCP Port to be listened (default: \"8080\")\n    --origins=...  : Which domains to be allowed by CORS policy (default: \"\")\n    --port-tls=... : Use this to listen for HTTPS requests (default: \"\")\n    --domain=...   : Required to redirect from http to https (default: \"localhost\")\n    --cert=...     : SSL certificate file, required if \"--port-tls\" specified\n    --key=...      : SSL secret key file, required if \"--port-tls\" specified\n```\n\n## Usage Example\n\nLet's say you're now in a directory with `kuda` executable and `my-app` as your react app project.\n\n```\ncd my-app\nnpm run build\ncd ..\n\n./kuda my-app/build --port=8000 --origins=localhost:9000\n```\n\nAfter executed, it will put everything inside `my-app/build` into RAM and serve at port 8000. Beside of that, we're assuming the API backend runs on port 9000. Thus, we have to add it as allowed origins with `--origins=...` flag to prevent [CORS Origin](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) problem.\n\n### How about SSL?\n\nNow we have same directory as above with `cert.pem` and `secret.key` inside of it.\n\n```\n./kuda my-app/build --port=8000 --origins=localhost:9000 --port-tls=8090 --domain=localhost --cert=cert.pem --key=secret.key\n```\n\nThe `localhost:8000` is considered using HTTP protocol. So every connection coming to that port will be redirected to `https://localhost:8090`.\n\n### Serving Production App\n\nIn production environment, assuming you have `www.my-domain.com` web URL and `api.my-domain.com` for API URL:\n\n```\nsudo ./kuda my-app/build --port=80 --origins=api.my-domain.com --port-tls=443 --domain=www.my-domain.com --cert=/etc/ssl/certs/my-domain.pem --key=/etc/ssl/private/my-domain.key\n```\n\n## With Docker\n\nMostly, we deploy web app with docker and kubernetes (for orchestration). In order to do that, use this commands.\n\n```\ndocker pull kuda:latest\ndocker run --name kuda-demo --volume my-compiled-webapp:/srv -p 8080:8080 --rm kuda:latest\n```\n\nWhere `my-compiled-webapp` is your directory with compiled app inside. **NEVER EVER** point project root directory as public directory, otherwise your machine will run out of memory very shortly!\n\n## With Docker Compose\n\nI would recommend you to use Docker Compose instead of plain Docker for sake of maintainability. This is an example of `docker-compose.yml`:\n\n```yml\nversion: \"3\"\n\nservices:\n  kuda:\n    image: kuda:latest\n    volumes:\n      - ./my-compiled-webapp:/srv\n    environment:\n      KUDA_PUBLIC_DIR: \"/srv\"\n      KUDA_DOMAIN: \"localhost\"\n      KUDA_PORT: \"8080\"\n      KUDA_ORIGINS: \"\"\n      KUDA_PORT_TLS: \"\"\n      KUDA_CERT: \"\"\n      KUDA_KEY: \"\"\n    ports:\n      - 8080:8080\n```\n\n## Benchmark\n\nI have no enough resource to benchmark Kuda Web Server myself. If you did benchmark and comparation with kuda, please let us know via **issue** section.\n\n## Contribution\n\nAnyone can contribute on this project. We welcome you to Pull Request or Open an Issue. To working on source code, you will require:\n\n- Linux or Mac preferred (Use [WSL](https://docs.microsoft.com/en-us/windows/wsl/install-win10) if you are Windows 10 user or [Cygwin](https://www.cygwin.com/) for older Windows)\n- Golang\n- Makefile\n- NPM (for demo)\n- Docker + Docker Compose (optional)\n\n### Makefile Commands\n\nThere are things you can do with makefile on this project:\n\n- `make` -- Compile for all platforms and store them inside \"build\" directory\n- `make test` -- Run this everytime you want to pull request\n- `make clean` -- Removes all compiled files to reduce storage usage\n- `make demo` -- Run demonstration, go to `http://localhost:8080` on browser while running this command\n\n### Security Report\n\nTo keep other users' security, please send email to [athaariqa@gmail.com](mailto://athaariqa@gmail.com) instead. **Do not** open issue for security report.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthor-x86%2Fkuda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthor-x86%2Fkuda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthor-x86%2Fkuda/lists"}