Skip to content
vic

tailcallhq/tailcall

High Performance GraphQL Runtime

tailcallhq/tailcall.json
{
"createdAt": "2023-01-06T10:38:37Z",
"defaultBranch": "main",
"description": "High Performance GraphQL Runtime",
"fullName": "tailcallhq/tailcall",
"homepage": "https://tailcall.run",
"language": "Rust",
"name": "tailcall",
"pushedAt": "2025-11-26T03:13:58Z",
"stargazersCount": 1417,
"topics": [
"api-gateway",
"backend-for-frontend",
"battle-tested",
"cloud-native",
"extendable",
"graphql",
"graphql-api",
"graphql-server",
"io-efficiency",
"microservices",
"open-source",
"orchestration",
"performance",
"protocol-agnostic",
"proxy",
"resiliency",
"runtime-tuning",
"seamless-devx",
"security"
],
"updatedAt": "2025-11-15T13:02:53Z",
"url": "https://github.com/tailcallhq/tailcall"
}

Tailcall Logo

Tailcall is an open-source solution for building [high-performance] GraphQL backends.

Please support us by giving the repository a star image

[high-performance] !: https://github.com/tailcallhq/graphql-benchmarks

Tweet Discord

Open Bounties Rewarded Bounties GitHub Workflow Status (with event) GitHub release (by tag) Discord Codecov

Terminal window
npm i -g @tailcallhq/tailcall
Terminal window
yarn global add @tailcallhq/tailcall
Terminal window
brew tap tailcallhq/tailcall
brew install tailcall
Terminal window
curl -sSL https://raw.githubusercontent.com/tailcallhq/tailcall/master/install.sh | bash
Terminal window
docker pull ghcr.io/tailcallhq/tailcall/tc-server
docker run -p 8080:8080 -p 8081:8081 ghcr.io/tailcallhq/tailcall/tc-server

The below file is a standard .graphQL file, with a few additions such as @server and @http directives. So, basically, we specify the GraphQL schema and how to resolve that GraphQL schema in the same file, without having to write any code!

schema @server(port: 8000, hostname: "0.0.0.0") @upstream(httpCache: 42) {
query: Query
}
type Query {
posts: [Post] @http(url: "http://jsonplaceholder.typicode.com/posts")
user(id: Int!): User @http(url: "http://jsonplaceholder.typicode.com/users/{{.args.id}}")
}
type User {
id: Int!
name: String!
username: String!
email: String!
phone: String
website: String
}
type Post {
id: Int!
userId: Int!
title: String!
body: String!
user: User @http(url: "http://jsonplaceholder.typicode.com/users/{{.value.userId}}")
}

Now, run the following command to start the server with the full path to the jsonplaceholder.graphql file that you created above.

Terminal window
tailcall start ./jsonplaceholder.graphql

Head out to [docs] to learn about other powerful tailcall features.

[docs] !: https://tailcall.run/docs

Throughput comparison of various GraphQL solutions for a N + 1 query:

query {
posts {
title
body
user {
name
}
}
}

Throughput Histogram

Check out detailed benchmarks on our benchmarking repository.

Your contributions are invaluable! Kindly go through our [contribution guidelines] if you are a first time contributor.

[contribution guidelines] !: https://tailcall.run/docs/contribution-guidelines

⭐️ Give us a star.

👀 Watch us for updates.

This initiative is protected under the Apache 2.0 License.