{"id":24178773,"url":"https://github.com/sha1n/hako","last_synced_at":"2026-05-05T16:42:04.178Z","repository":{"id":38303017,"uuid":"246861692","full_name":"sha1n/hako","owner":"sha1n","description":"Hako is a handy echo HTTP server utility with a simple CLI interface. Also available as a Docker image.","archived":false,"fork":false,"pushed_at":"2025-02-17T14:17:39.000Z","size":232,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-17T15:26:25.631Z","etag":null,"topics":["cli","cli-interface","developer-tools","docker-image","echo","echo-server","hako","http-server","utility"],"latest_commit_sha":null,"homepage":"https://sha1n.github.io/hako/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sha1n.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-03-12T14:56:50.000Z","updated_at":"2025-02-17T14:17:41.000Z","dependencies_parsed_at":"2023-12-19T07:31:57.942Z","dependency_job_id":"98327bc7-6037-43ec-804a-70196a5e730b","html_url":"https://github.com/sha1n/hako","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sha1n%2Fhako","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sha1n%2Fhako/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sha1n%2Fhako/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sha1n%2Fhako/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sha1n","download_url":"https://codeload.github.com/sha1n/hako/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241549134,"owners_count":19980476,"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":["cli","cli-interface","developer-tools","docker-image","echo","echo-server","hako","http-server","utility"],"created_at":"2025-01-13T05:13:23.398Z","updated_at":"2026-05-05T16:42:04.117Z","avatar_url":"https://github.com/sha1n.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Go](https://github.com/sha1n/hako/actions/workflows/go.yml/badge.svg)](https://github.com/sha1n/hako/actions/workflows/go.yml)\n![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/sha1n/hako)\n[![Go Report Card](https://goreportcard.com/badge/sha1n/hako)](https://goreportcard.com/report/sha1n/hako) \n[![Coverage Status](https://coveralls.io/repos/github/sha1n/hako/badge.svg?branch=master)](https://coveralls.io/github/sha1n/hako?branch=master)\n[![Release](https://img.shields.io/github/release/sha1n/hako.svg?style=flat-square)](https://github.com/sha1n/hako/releases)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Release Drafter](https://github.com/sha1n/hako/actions/workflows/release-drafter.yml/badge.svg)](https://github.com/sha1n/hako/actions/workflows/release-drafter.yml)\n\n- [Hako](#hako)\n  - [Installation](#installation)\n    - [Install From a Homebrew Tap](#install-from-a-homebrew-tap)\n    - [Downloading released binaries](#downloading-released-binaries)\n    - [Pulling a Public Docker Image](#pulling-a-public-docker-image)\n    - [Building from sources](#building-from-sources)\n    - [Building docker image from sources](#building-docker-image-from-sources)\n  - [Usage](#usage)\n\n# Hako\nHako is an HTTP echo server with a CLI interface that provides some extra features. Hako has been developed to help me develop and test one of my projects and since the need for such utility keeps popping every few years, I thought it would be nice to share it with others.\n\n## Installation\n### Install From a Homebrew Tap\n```\n# Tap the repository\nbrew tap sha1n/tap\n\n# Install\nbrew install hako\n\n# Update\nbrew upgrade hako\n```\n\n### Downloading released binaries\n\n**MacOS cURL Example**\n```bash\ncurl -Lf --compressed -o \u003c~/.local/bin/hako\u003e https://github.com/sha1n/hako/releases/download/v0.6.1/hako-darwin-amd64\n\nchmod +x \u003c~/.local/bin/hako\u003e\n```\n\n### Pulling a Public Docker Image\n```\ndocker pull sha1n/hako\n\n# you can then start the server using \ndocker run sha1n/hako\n# or with custom arguments \ndocker run -p 8090:8080 sha1n/hako /bin/sh -c \"/opt/hako start --path /echo/shmecho --delay 1 --verbose --verbose-headers\"\n```\n\n### Building from sources\n```bash\ngit clone git@github.com:sha1n/hako.git\ncd hako\n\n# build the Go app (a local Go installation is required)\nmake\n\n# optionally copy the binary to your path\ncp bin/hako \u003c~/.local/bin/hako\u003e\n```\n\n### Building docker image from sources\nUse the following command to build a docker image from the local sources. The image will be tagged `hako:latest`.\n```bash \nmake build-docker\n```\n\n## Usage\nUse `hako --help` for help.\n\n**Terminal A:**\n```bash \n# run the server\n➜  ~ hako start -p 8090 --path /echo/shmecho --delay 1 --verbose --verbose-headers\n# or using the published docker image\n➜  ~ docker run -p 8090:8080 sha1n/hako /bin/sh -c \"/opt/hako start --path /echo/shmecho --delay 1 --verbose --verbose-headers\"\n[HAKO] 2020/03/17 12:32:36 Registering signal listeners for graceful HTTP server shutdown..\n[HAKO] 2020/03/17 12:32:36 Staring HTTP Server on :8090\n[HAKO] 2020/03/17 12:32:36 Waiting for shutdown signal...\n[HAKO] 2020/03/17 12:32:38 Handling request at /echo/shmecho\n[HAKO] 2020/03/17 12:32:38 Received headers:\n\nUser-Agent : curl/7.64.1\nAccept : */*\nContent-Type : application/json\nContent-Length : 18\n\n[HAKO] 2020/03/17 12:32:38 Received body:\n\n{'Hello': 'World'}\n\n[HAKO] 2020/03/17 12:32:38 Delaying response in 1 millis\n[GIN] 2020/03/17 - 12:32:38 | 200 |    1.328925ms |             ::1 | POST     /echo/shmecho\n[HAKO] 2020/03/17 12:33:44 Handling request at /non-existing\n[GIN] 2020/03/17 - 12:33:44 | 404 |      14.822µs |             ::1 | HEAD     /non-existing\n```\n\n**Terminal B:**\n```bash \n# posting to an existing URL\n➜  ~ curl -X POST localhost:8090/echo/shmecho -H \"Content-Type: application/json\" --data \"{'Hello': 'World'}\"\n{'Hello': 'World'}%                                                                                                                                                                                                                                         \n\n# heading to a non-existing URL\n➜  ~ curl -I localhost:8090/non-existing\nHTTP/1.1 404 Not Found\nContent-Type: text/plain\nDate: Tue, 17 Mar 2020 10:33:44 GMT\nContent-Length: 18\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsha1n%2Fhako","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsha1n%2Fhako","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsha1n%2Fhako/lists"}