# Quick start

> Sign in, add an SSH key, create a repository on a knot, and push your first commit.

This page takes you from no account to a pushed repository on [tangled.org](https://tangled.org). It takes a few minutes and needs only `git` and `ssh`.

```sh
git remote add origin git@tangled.org:alice.tngl.sh/my-project
git push -u origin main
```

## Sign in or sign up

Tangled accounts are AT Protocol accounts. If you already have one (a Bluesky account, for example), sign in at [tangled.org/login](https://tangled.org/login) with your handle, such as `alice.bsky.social`. Your browser is sent to your account provider to approve access; Tangled never sees your password.

If you don’t have an account, [sign up](https://tangled.org/signup). You enter an email address, choose a username and password. The result is an account with a handle like `alice.tngl.sh`, on the PDS we run. It works in any other atproto application too.

You can sign in to several accounts and switch between them from the account menu.

## Onboarding

The first sign-in opens a short, optional setup. If you connect GitHub, Tangled can import your avatar, SSH keys and email addresses from it.

Add at least one verified email if you want email notifications or want your commits linked to your profile.

## Add an SSH key

Pushing over SSH needs a public key published in your account. Generate one if you don’t have one:

```sh
ssh-keygen -t ed25519 -C "alice@example.com"
cat ~/.ssh/id_ed25519.pub
```

Paste the output into **Settings → Keys → Add SSH key** (`/settings/keys/new`) with a title such as “Work laptop”. The key is saved in your account.

If your SSH agent holds many keys, the knot may give up before it sees the right one. Pin the key in `~/.ssh/config`:

```sh
Host tangled.org
    User git
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
```

Use your knot’s hostname instead of `tangled.org` for repositories on a self-hosted knot.

## Create a repository

Head to the [New Repository](https://tangled.org/repo/new) page and fill in:

1. **Repository name**: letters, digits, `.`, `_` and `-`, up to 100 characters. A trailing `.git` is dropped, and `self` is reserved.
2. **Description**: optional, up to 140 characters.
3. **Default branch**: `main` unless you change it.
4. **Hosting**: by default the repository is hosted with Tangled. If you self-host a knot, you can host it there instead; see [Running a knot](/docs/self-hosting/knot/).
5. **CI**: optional, under **Advanced**. Run it with Tangled, or on a spindle you self-host.

## Push

An empty repository page shows its remote. Push an existing project to it:

```sh
cd my-project
git remote add origin git@tangled.org:alice.tngl.sh/my-project
git push -u origin main
```

For repositories hosted by Tangled, the SSH host is `tangled.org`. On a self-hosted knot it is the knot’s own hostname, for example `git@knot.example.com:alice.tngl.sh/my-project`. Note that this depends on your self-hosted knot’s SSH setup.

## Moving an existing repository

To move a repository you already push elsewhere, point `origin` at Tangled and push every branch and tag:

```sh
git remote set-url origin git@tangled.org:alice.tngl.sh/my-project
git push origin --all
git push origin --tags
```

If you are coming from GitHub, check out the [Migration guide](/docs/migrating-from-github/), that walks you through a mass repository migration tool.