# What is Tangled

> Tangled is a git forge built on the AT Protocol that you can use hosted, or self-host in part or in full.

Tangled is a social code forge: you can host git repositories, collaborate on issues and pull requests, follow other devs and star their repos. However, Tangled is different from the rest:

* It is federated: you can self-host a server and still interact with the broader network
* It is open source
* It is entirely self-hostable: you can host a single piece, like the repository storage component, or the CI component, or all of it
* It is hackable

The individual servers talk to each other through public interfaces, so you can replace any of them with your own: people have written knots that store repositories on code.storage, or Cloudflare Artifacts, and spindles that runs CI on Buildkite or Tekton!

That being said, you don’t need to run anything to use Tangled. Sign in, create a repository, and push. [Quick start](/docs/quick-start/) walks through it.

## How it is split

Your account lives with an **account provider** (a PDS, or Personal Data Server), the same kind of account you might already use for Bluesky. It holds your profile, follows, stars, SSH public keys, and a small entry for each repository you own.

Git data lives on a **knot**, a git server. Each repository has its own identity (a DID), and its issues, pull requests, comments, reactions and labels are stored next to the code on the knot.

**Spindles** run CI: they execute the workflows when you push.

The web app saves your changes to your account or to the knot, and shows everything gathered from across the network. No web app holds a privileged copy of your data: it all comes from accounts and knots.

## Hosted and self-hosted

You can host with Tangled, or self-host. Tangled is federated: knots, spindles, accounts and web apps run by different people work together, so you can run all of it, some of it, or none of it.

| Component         | What we run                                     | You can run your own                                                                               |
| ----------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| Account (PDS)     | Signup gives you a `<name>.tngl.sh` account     | Any atproto PDS works                                                                              |
| Knot              | Shared knots, the default is `knot1.tangled.sh` | See [Run a knot](/docs/self-hosting/knot/)                                                         |
| Spindle           | `spindle.tangled.sh`                            | See [Run a spindle](/docs/self-hosting/spindle/)                                                   |
| Web app and index | The website at `tangled.org`                    | See [Run an index](/docs/self-hosting/indexer/) and [Run a frontend](/docs/self-hosting/frontend/) |

Typically, users self-host a knot: your code then lives on a machine you control, while the web app still shows it and accepts issues and pull requests against it. A self-hosted spindle lets you run CI on your own hardware. Run every piece yourself and you have a fully independent Tangled.