{"id":20773900,"url":"https://github.com/simonmittag/j8a","last_synced_at":"2025-04-30T15:10:10.907Z","repository":{"id":37619169,"uuid":"245031269","full_name":"simonmittag/j8a","owner":"simonmittag","description":"j8a [ dʒʌbbʌ ] is a modern TLS 1.3 reverse proxy server designed as a lightweight API gateway for REST APIs.","archived":false,"fork":false,"pushed_at":"2024-05-12T01:50:22.000Z","size":15232,"stargazers_count":91,"open_issues_count":26,"forks_count":11,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-06-18T23:15:22.001Z","etag":null,"topics":["ab-testing","api-gateway","api-server","api-wrapper","docker","golang","json-apis","micro-services","microservice","microservices","microservices-architecture","proxy","proxy-server","reverse-proxy","ssllabs-rating","tls"],"latest_commit_sha":null,"homepage":"https://j8a.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simonmittag.png","metadata":{"files":{"readme":"ReadMe.Md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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-05T00:14:34.000Z","updated_at":"2024-05-12T01:50:26.000Z","dependencies_parsed_at":"2024-02-08T06:31:16.612Z","dependency_job_id":"c80a29b7-cb0f-4d31-90d8-33bc4bf64a1b","html_url":"https://github.com/simonmittag/j8a","commit_stats":null,"previous_names":["simonmittag/jabba"],"tags_count":43,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonmittag%2Fj8a","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonmittag%2Fj8a/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonmittag%2Fj8a/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonmittag%2Fj8a/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simonmittag","download_url":"https://codeload.github.com/simonmittag/j8a/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225036750,"owners_count":17410918,"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":["ab-testing","api-gateway","api-server","api-wrapper","docker","golang","json-apis","micro-services","microservice","microservices","microservices-architecture","proxy","proxy-server","reverse-proxy","ssllabs-rating","tls"],"created_at":"2024-11-17T12:27:39.352Z","updated_at":"2025-04-30T15:10:10.902Z","avatar_url":"https://github.com/simonmittag.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Circleci Builds](https://circleci.com/gh/simonmittag/j8a.svg?style=shield)](https://circleci.com/gh/simonmittag/j8a)\n[![Dependabot](https://badgen.net/badge/Dependabot/enabled/green?icon=dependabot)](https://github.com/simonmittag/j8a/pulls?q=is%3Aopen+is%3Apr)\n[![Github Issues](https://img.shields.io/github/issues/simonmittag/j8a)](https://github.com/simonmittag/j8a/issues)\n[![Github Activity](https://img.shields.io/github/commit-activity/m/simonmittag/j8a)](https://img.shields.io/github/commit-activity/m/simonmittag/j8a)  \n[![Go Report](https://goreportcard.com/badge/github.com/simonmittag/j8a)](https://goreportcard.com/report/github.com/simonmittag/j8a)\n[![CodeClimate Maintainability](https://api.codeclimate.com/v1/badges/326d3c304e32645811c8/maintainability)](https://codeclimate.com/github/simonmittag/jabba/maintainability)\n[![CodeClimate Test Coverage](https://api.codeclimate.com/v1/badges/326d3c304e32645811c8/test_coverage)](https://codeclimate.com/github/simonmittag/jabba/code)\n[![SSLLabs Rating](https://img.shields.io/badge/SSLLabs-A%2B-brightgreen)](https://www.ssllabs.com/ssltest/analyze.html?d=j8a.io)\n[![Go Version](https://img.shields.io/github/go-mod/go-version/simonmittag/j8a)](https://img.shields.io/github/go-mod/go-version/simonmittag/j8a)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Docker Pulls](https://img.shields.io/docker/pulls/simonmittag/j8a)](https://hub.docker.com/repository/docker/simonmittag/j8a)\n[![Version](https://img.shields.io/docker/v/simonmittag/j8a/v1.1.2)](https://hub.docker.com/repository/docker/simonmittag/j8a)\n\n# What is j8a?\n[j8a [ dʒʌbbʌ ]](https://j8a.io) is a modern **TLS 1.3 reverse proxy server** designed as a lightweight API gateway for\nREST APIs.\n\n![](images/route.gif)\n\n## What's new?\n\n### v1.1.3 (23/04/2025)\n* upgraded to `github.com/lestrrat-go/jwx/v3`, retired older dependencies.\n\n### v1.1.2 (17/04/2025)\n* Update to Go 1.24\n* Update to goreleaser 2.8 and multiplatform docker build\n* Bumped several dependencies\n\n## CVEs\n🛡️ J8a v1.1.3 has [zero](https://www.cvedetails.com/google-search-results.php?q=j8a\u0026sa=Search) reported CVEs as of 23/04/2025. \nIf you are a security researcher, the project team would like to [hear from you](https://github.com/simonmittag/j8a/issues).\n\n### Trivy\n```aiignore\nλ trivy image simonmittag/j8a:v1.1.3\n2025-04-23T01:09:26+10:00       INFO    [gobinary] Detecting vulnerabilities...\n\nReport Summary\n┌────────────────────────────────────────┬──────────┬─────────────────┬─────────┐\n│                 Target                 │   Type   │ Vulnerabilities │ Secrets │\n├────────────────────────────────────────┼──────────┼─────────────────┼─────────┤\n│ simonmittag/j8a:v1.1.3 (alpine 3.21.3) │  alpine  │        0        │    -    │\n├────────────────────────────────────────┼──────────┼─────────────────┼─────────┤\n│ j8a                                    │ gobinary │        0        │    -    │\n└────────────────────────────────────────┴──────────┴─────────────────┴─────────┘\n```\n\n### Docker Scout\n```aiignore\nλ docker scout cves simonmittag/j8a:v1.1.3\n    ✓ Indexed 56 packages\n    ✓ No vulnerable package detected\n\n                    │       Analyzed Image         \n────────────────────┼──────────────────────────────\n  Target            │  simonmittag/j8a:v1.1.3      \n    digest          │  54aae504c670                \n    platform        │ linux/arm64                  \n    vulnerabilities │    0C     0H     0M     0L   \n    size            │ 9.2 MB                       \n    packages        │ 56                         \n```\n\n## Features\n\n* Fast! 5k POST req/s traffic.\n* Secure. TLS1.2, TLS/1.3 termination w/ [A+ SSLLabs rating](https://www.ssllabs.com/ssltest/analyze.html?d=j8a.io).\n* Zero downtime. Auto-renew certs using ACME [RFC 8555](https://tools.ietf.org/html/rfc8555).\n* Observable. API request tracing w/ correlation ID for upstream microservices.\n* APM. CPU, memory logging built-in. Daily TLS health and validity check for your full certificate chain.\n* JWT token validation with full JWK(S) support for [RFC 7519](https://tools.ietf.org/html/rfc7519).\n* HTTP/1.1 and HTTP/2 support w/ upstream \u003c\u003e downstream protocol translation.\n* Websocket Support for [RFC 6455](https://datatracker.ietf.org/doc/html/rfc6455)\n* [Docker](https://hub.docker.com/repository/docker/simonmittag/j8a) native\n\n## Up and running\n\n### Docker\n```\ndocker pull simonmittag/j8a \u0026\u0026\n  docker run -e J8ACFG_YML -p443:443 simonmittag/j8a\n```\n\n### Homebrew\n```bash\nbrew tap simonmittag/cli \u0026\u0026 \n  brew install j8a \u0026\u0026 \n  j8a\n```\n\n### Golang\n```bash\ngo install github.com/simonmittag/j8a/cmd/j8a@latest \u0026\u0026\n  j8a\n```\n\n## Usage\nJ8a runs from the cli. The process will attempt to load its configuration from the environment \nvariable `J8ACFG_YML`, a specified config file, or the default config file `j8acfg.yml` (in that order). \nYou can validate the config using the `-o` flag without actually starting the server, which \nis useful for ci/cd pipelines. In validate mode, the process successfully exits with `0`, or `-1` in case of failure.\n\n### Commandline Options\n\n```bash\nλ j8a -h\nj8a[v1.0.1] Goodde da lodia!\nUsage: j8a [-c] [-o] | [-v] | [-h]\n  -c string\n        config file location (default \"j8acfg.yml\").\n  -h    print usage instructions.\n  -o    validate config file, then exit.\n  -v    print version.\n```\n\n### Examples\n\nValidate Server Configuration supplied as `myconfig.yml`\n```bash\nλ j8a -c myconfig.yml -o\n6:25PM INF hostName determined hostName=MacBook-Pro-16.local\n6:25PM INF version determined version=v1.0.1\n6:25PM INF srvID determined srvID=c91cda8c\n...\n```\n\nStart Server With Configuration supplied as `myconfig.yml`\n```bash\nλ j8a -c myconfig.yml \n6:25PM INF hostName determined hostName=MacBook-Pro-16.local\n6:25PM INF version determined version=v1.0.1\n6:25PM INF srvID determined srvID=c91cda8c\n...\n```\n\nStart Server With Configuration supplied via `J8ACFG_YML`\n```bash\nJ8ACFG_YML=\"---\n            connection:\n              downstream:\n                http:\n                  port: 80\n            routes:\n              - path: \"/todos\"\n                resource: jsonplaceholder\n            resources:\n              jsonplaceholder:\n                - url:\n                    scheme: https\n                    host: jsonplaceholder.typicode.com\n                    port: 443\" j8a\n```\n\n## Contributions\n\nThe j8a team is looking for and welcomes all [contributors](https://github.com/simonmittag/j8a/blob/master/CONTRIBUTING.md). Everyone\ninteracting with the project's codebase, issue trackers, chat rooms and mailing lists is expected to follow\nthe [code of conduct](https://github.com/simonmittag/j8a/blob/master/CODE_OF_CONDUCT.md)\n\n## Release Cycle\n* Now that 1.0 is reached, we usually release 3/4 minor versions per year.\n* Bug-fixes (e.g. 1.0.1, 1.0.2) are released as needed (no additional features are delivered in those versions, bug-fixes only).\n* Each version is supported until the next one is released (e.g. 1.1.x will be supported until 1.2.0 is out).\n\nWe use [Semantic Versioning](https://semver.org/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonmittag%2Fj8a","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimonmittag%2Fj8a","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonmittag%2Fj8a/lists"}