Skip to main content
Open import wizard
Read-only clone over HTTPS or SSHNo lock-in to arrive or leave
Start with one repo

Point it. It indexes.

Paste any GitHub, GitLab, or git remote URL. No install, no webhook setup. History, symbols, audit row, and graph arrive together.
Import a remote repository: import
import

citadel-cli import https://<remote>/repo.git

1. cloning over HTTPS (read-only)

2. building symbol index

cloned

986 symbols indexed (go + ts)

audit row written - keyed to your namespace

knowledge graph ready

Next action
After indexing, the repo is queryable. Search symbols, view the knowledge graph, or open the wiki to start documenting.
What arrives
Everything, at once.
The import produces the same four outputs as a native push: a full clone, a symbol index, an immutable audit entry, and a queryable knowledge graph. Nothing is deferred.
cloneindexauditgraph
Permissions and scope
accessRead-only clone over HTTPS or SSH. GitHub OAuth, GitLab token, or any public remote.
arrivesCommit history, branches, tags, source files, and symbol graph.
not includedIssues, pull requests, CI status, and star counts are not imported. Those remain on your origin host.
Migration

Bring your repos.

From any git remote. No lock-in to leave, no lock-in to arrive.
Import
One-time copy over HTTPS or SSH. History, branches, tags - indexed on arrival.
Terminal session: import
import

citadel-cli import https://<remote>/repo.git

cloned - 986 symbols indexed - 6 edges

Mirror
Continuous sync from a source of truth, with source-wins push rejection so the mirror never diverges.
origin remote-> mirror ->src.land
local pushes to the mirror are rejected, not merged
Deploy

Cloud, or your own metal.

src.land
Managed cloud.
zero ops - push and go
automatic indexing and backups
free for solo and open source
self-host
One Go binary.
offline license - no phone-home
air-gap + IP/CIDR allowlist
your Postgres, your data
point inference at your own endpoint
Step-by-step guides

Import from your host.

Concrete steps for GitHub, GitLab, and Bitbucket. Code and git history only -- issues, pull requests, CI runs, and stars are not imported.
GitHub
github.com
  1. Copy the repository URL from GitHub.
    Use the HTTPS URL from the "Code" dropdown (e.g. https://github.com/owner/repo.git).
  2. For private repos, create a personal access token with repo scope.
    Public repos need no credentials. Paste the token into the auth field in the import wizard.
  3. Open the import wizard and paste the URL.
    Go to /import, select "Import a repository", and paste the URL.
  4. Wait for the read-only clone and symbol index to complete.
    Code arrives first; symbol indexing follows. Issues, PRs, CI runs, and stars are not imported.
Requires a personal access token with repo scope for private repositories.
GitLab
gitlab.com or self-hosted
  1. Copy the HTTPS clone URL from your GitLab project.
    Use the HTTPS URL from the "Clone" dropdown (e.g. https://gitlab.com/group/repo.git).
  2. For private projects, create a project access token or personal access token with read_repository scope.
    Self-hosted GitLab instances are supported. Paste the token as the password in the auth field.
  3. Open the import wizard and paste the URL.
    Go to /import, select "Import a repository", and paste the URL.
  4. Wait for the read-only clone and symbol index to complete.
    GitLab merge request history stays on GitLab; git commit history is imported in full.
Requires a project or personal access token with read_repository scope for private projects.
Bitbucket
bitbucket.org
  1. Copy the HTTPS clone URL from your Bitbucket repository.
    Use the HTTPS URL from the "Clone" dropdown (e.g. https://bitbucket.org/workspace/repo.git).
  2. For private repos, create an app password with Repository read permission.
    Use your Bitbucket username and the app password as credentials in the import wizard.
  3. Open the import wizard and paste the URL.
    Go to /import, select "Import a repository", and paste the URL.
  4. Wait for the read-only clone and symbol index to complete.
    Bitbucket pull request history stays on Bitbucket; git commit history is imported in full.
Requires an app password with Repository read permission for private repositories.
Open import wizard For issues, PRs, and CI -- see the plan for origin-only data below.
Origin-only data

Plan for what stays on your host.

Issues, pull requests, CI status, and star counts are not imported. Here is what to do with each.
Migration postures
Not every data type needs the same treatment. Three postures apply:
one-time importcopy once and close the tab
continuous mirrorkeep origin as source of truth, src.land as a read surface
full migrationorigin closes; src.land becomes the primary host
Issues
Keep open on origin or export once.
For a continuous mirror, leave issues on GitHub or GitLab and link to them from src.land. For a full migration, export via the origin API (GitHub: REST GET /repos/{owner}/{repo}/issues; GitLab: GraphQL issues query) and file them natively once the team has moved.
GitHub exports paginated JSON with labels, assignees, and comments. GitLab exports differ: milestones are a separate endpoint.
Pull requests
Close merged PRs on origin; open new ones here.
Merged pull request history lives in commit messages and is preserved in the imported git history. Open PRs should be reviewed and closed on origin before switching, or re-opened against the src.land copy after import.
GitLab merge requests and GitHub pull requests both follow the same pattern: merge or close before cutting over.
CI status
Re-point pipelines after import.
CI run history does not transfer. After import, point your pipeline runner at the src.land remote. Past build results remain visible on the origin host for your retention period.
GitHub Actions workflows and GitLab CI YAML both trigger on push events. Update the remote URL in your runner config and re-run to establish a baseline.
Stars and watchers
Social counts do not transfer.
Star and watcher counts are tied to origin accounts and cannot be migrated. For open source projects doing a full migration, announce the new canonical URL so existing followers can re-star.
Complex migrations
Large-scale or compliance-driven migrations (air-gap, on-prem, bulk transfer) require more than a URL paste. See self-hosting and on-prem options or contact us to discuss your setup.

Start with one repo

Paste a remote URL.

GitHub, GitLab, Gitea, or any HTTPS or SSH git remote. Indexing starts on arrival.