{"id":13752857,"url":"https://github.com/TreeGateway/tree-gateway","last_synced_at":"2025-05-09T20:34:30.025Z","repository":{"id":34867899,"uuid":"71959885","full_name":"TreeGateway/tree-gateway","owner":"TreeGateway","description":"This is a full featured and free API Gateway","archived":false,"fork":false,"pushed_at":"2024-10-07T01:33:25.000Z","size":18478,"stargazers_count":195,"open_issues_count":39,"forks_count":43,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-04-18T18:08:12.127Z","etag":null,"topics":["api","api-gateway","api-management","apigateway","circuit-breaker","free","gateway","javascript","microservice","microservices","node-js","nodejs","opensource","proxy","tree-gateway"],"latest_commit_sha":null,"homepage":"http://treegateway.com","language":"TypeScript","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/TreeGateway.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2016-10-26T02:51:47.000Z","updated_at":"2025-03-16T11:51:17.000Z","dependencies_parsed_at":"2024-09-11T14:07:21.478Z","dependency_job_id":"56359627-4a49-4ab1-9819-4a57a8625d45","html_url":"https://github.com/TreeGateway/tree-gateway","commit_stats":{"total_commits":523,"total_committers":15,"mean_commits":34.86666666666667,"dds":"0.25239005736137665","last_synced_commit":"a1ed94e289a8f225e3e140d72c84c58084b5b902"},"previous_names":["leanty/tree-gateway"],"tags_count":55,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TreeGateway%2Ftree-gateway","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TreeGateway%2Ftree-gateway/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TreeGateway%2Ftree-gateway/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TreeGateway%2Ftree-gateway/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TreeGateway","download_url":"https://codeload.github.com/TreeGateway/tree-gateway/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253321777,"owners_count":21890463,"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":["api","api-gateway","api-management","apigateway","circuit-breaker","free","gateway","javascript","microservice","microservices","node-js","nodejs","opensource","proxy","tree-gateway"],"created_at":"2024-08-03T09:01:11.835Z","updated_at":"2025-05-09T20:34:25.011Z","avatar_url":"https://github.com/TreeGateway.png","language":"TypeScript","readme":"[![npm version](https://badge.fury.io/js/tree-gateway.svg)](https://badge.fury.io/js/tree-gateway)\n[![Build Status](https://travis-ci.org/TreeGateway/tree-gateway.svg?branch=master)](https://travis-ci.org/TreeGateway/tree-gateway)\n[![Coverage Status](https://coveralls.io/repos/github/TreeGateway/tree-gateway/badge.svg?branch=master)](https://coveralls.io/github/TreeGateway/tree-gateway?branch=master)\n[![Known Vulnerabilities](https://snyk.io/test/github/TreeGateway/tree-gateway/badge.svg?targetFile=package.json)](https://snyk.io/test/github/TreeGateway/tree-gateway?targetFile=package.json)\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"http://treegateway.com\"\u003e\u003cimg src=\"https://media.licdn.com/mpr/mpr/shrink_200_200/AAEAAQAAAAAAAAwjAAAAJGFlNWE2MDI1LTM0OGItNDc2NC1hYmU5LTM2NmNkMDlmZjkxNQ.png\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\nA full featured and free API Gateway in Node JS\n\u003c/p\u003e\n\n## Why do I need an API Gateway?\n\nAn API gateway provides a single, unified entry point across one or more internal APIs. It is an important element in any microservice architecture.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/TreeGateway/tree-gateway/gh-pages/img/presentation.png\" /\u003e\n\u003c/p\u003e\n\n## Why Tree Gateway?\n\nTree Gateway is a free and open source solution writen in Node JS that has a complete and customizable pipeline to handle your requests.\nIt provides:\n  - **Authentication**: More than 480 strategies available through an easy [passportjs](http://passportjs.org/) integration, including support to JWT tokens, Oauth, Basic and many others.\n  - A flexible and robust **Routing system** that allows any kind of customized request pipeline.\n  - **Rate limits** - To control quotas for your customers and to define actions to be taken when any quota is exceeded.\n  - **Caching system** - Allow you to easily inject and control caching behavior for your APIs. Tree Gateway provides two kinds of cache:\n    - At browser level - Intercepting the responses and controling how the HTTP cache headers are used.\n    - At a server level - Caching responses for your APIs in memory (using the redis database).\n  - Easy **Service Discovery**, using your preffered registry.\n  - **Integrated CircuitBreaker** - A fast [circuitbreaker](https://martinfowler.com/bliki/CircuitBreaker.html) to fast fail your responses when your API is having problems to work. It support custom handlers for events like \"open\" or \"close\" circuit.\n  - Real Time **Monitoring and Analytics** - \n    - Collect statistics about any access to your APIs. Capture any event, like a cache hit on a cache entrance, a circuitbreaker open circuit or an authentication attempt.\n    - A very flexible and powerfull log system, that can be integrated with any service like logstash, timescale, loggly or new relic.\n  - **Easy Administration** - The gateway can be configured remotelly. And no restart is needed. Any API configuration can be \"hot\" changed and all configurations are propagated to other tree-gateway cluster nodes with no pain. The gateway can be configured through:\n    - Admin API - A REST API that can be invoked through HTTP;\n    - SDK - A Node JS SDK that can be used to configure the Gateway (or a cluster of gateways) programmatically;\n    - CLI - A command line tool can be used to configure using shell commands or scripts.\n  - Focused on **Performance** and **High Availability** - Turn easy the creation of big clusters.\n    - Support clusters of redis to share configurations, circuitbreaker states, cached content and so on.\n    - Automatically propagate events to all cluster nodes.\n    - Auto discovery for cluster nodes.\n    - Very low resources footprint.\n  - Everything can be extended or customized **using only Javascript**. All plugins can be written in pure Javascript.\n  \n## Watch the Quickstart video\n\n\u003ca href=\"https://www.youtube.com/watch?v=FkAeEmt2wro\"\u003e\u003cimg src=\"https://img.youtube.com/vi/FkAeEmt2wro/1.jpg\"/\u003e\u003c/a\u003e\n\n\n## Quick Start\n\nInstall the gateway:\n\n```sh\nnpm install -g tree-gateway\n```\n\nRun it:\n\n```sh\ntreeGateway\n```\n\nThen map your first API. Just create an YML file (my-api.yaml):\n\n```yaml\n---\nname: Test\nversion: 1.0.0\npath: \"/test\"\nproxy:\n  target:\n    host: http://httpbin.org\n  timeout: five seconds\n```\n\nAnd use the Tree Gateway CLI to configure it into the gateway:\n\n```sh\ntreeGatewayConfig apis --add ./my-api.yaml\n```\n\nAnd its done. You can test it accessing in your browser: `http://localhost:8000/test/get`\n\n\n## Gateway Configuration Reference\n\nCheck the [Docs](https://github.com/TreeGateway/tree-gateway/wiki).\n\n\n## Migrating from previous versions\n\nCheck our [migration guide](https://github.com/TreeGateway/tree-gateway/wiki/migrationGuide).\n","funding_links":[],"categories":["TypeScript","proxy"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTreeGateway%2Ftree-gateway","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FTreeGateway%2Ftree-gateway","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTreeGateway%2Ftree-gateway/lists"}