{"id":49145918,"url":"https://github.com/rapidity-rs/jetti","last_synced_at":"2026-04-22T04:00:42.118Z","repository":{"id":348785655,"uuid":"1199942777","full_name":"rapidity-rs/jetti","owner":"rapidity-rs","description":"A fast, cross-platform tool for organizing git repositories","archived":false,"fork":false,"pushed_at":"2026-04-19T06:45:08.000Z","size":43,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-19T08:33:02.496Z","etag":null,"topics":["codeberg","ghq","git","github","gitlab"],"latest_commit_sha":null,"homepage":"https://rapidity-rs.github.io/jetti/","language":"Rust","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/rapidity-rs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-02T21:47:25.000Z","updated_at":"2026-04-19T06:45:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"c60cd28e-674a-4573-a319-7aba376d9195","html_url":"https://github.com/rapidity-rs/jetti","commit_stats":null,"previous_names":["rapidity-rs/jetti"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/rapidity-rs/jetti","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rapidity-rs%2Fjetti","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rapidity-rs%2Fjetti/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rapidity-rs%2Fjetti/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rapidity-rs%2Fjetti/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rapidity-rs","download_url":"https://codeload.github.com/rapidity-rs/jetti/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rapidity-rs%2Fjetti/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32120402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T00:31:26.853Z","status":"online","status_checked_at":"2026-04-22T02:00:05.693Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["codeberg","ghq","git","github","gitlab"],"created_at":"2026-04-22T04:00:25.841Z","updated_at":"2026-04-22T04:00:42.113Z","avatar_url":"https://github.com/rapidity-rs.png","language":"Rust","readme":"# jetti\n\nA fast, cross-platform tool for organizing git repositories into a consistent directory structure by host, owner, and repo name.\n\n## Install\n\n```sh\ncargo install jetti\n```\n\nRequires `git` in your PATH.\n\n## Usage\n\n### Clone a repository\n\n```sh\n# GitHub (default host, SSH by default)\njetti clone owner/repo\n\n# Explicit host\njetti clone gitlab.com/owner/repo\njetti clone codeberg.org/owner/repo\n\n# Full URLs — protocol is inferred\njetti clone https://github.com/owner/repo.git\njetti clone git@github.com:owner/repo.git\n\n# Shallow clone\njetti clone owner/repo --shallow\n\n# Force HTTPS\njetti clone owner/repo --https\n\n# Force SSH (useful when config defaults to HTTPS)\njetti clone owner/repo --ssh\n```\n\nRepositories are cloned to `\u003croot\u003e/\u003chost\u003e/\u003cowner\u003e/\u003crepo\u003e`:\n\n```text\n~/dev/\n├── github.com/\n│   └── rust-lang/\n│       └── log/\n├── gitlab.com/\n│   └── user/\n│       └── project/\n└── codeberg.org/\n    └── user/\n        └── repo/\n```\n\nIf the destination already exists and is not a git repository, `jetti clone`\nstops with an error instead of deleting the directory.\n\n### List repositories\n\n```sh\njetti list                              # tree view in terminal\njetti list --full-path                  # absolute paths (flat)\njetti list -p github.com/rust-lang      # filter by prefix\njetti list | fzf                        # fuzzy find (auto-flat)\n```\n\n### Fetch and update\n\n```sh\njetti fetch                 # git fetch all repos in parallel\njetti update                # fetch + fast-forward (safe, skips dirty repos)\njetti update -p github.com  # filter by prefix\njetti fetch -j 16           # 16 parallel jobs\n```\n\n### Status dashboard\n\n```sh\njetti status                # branch, dirty files, ahead/behind for all repos\njetti status -p github.com  # filter by prefix\n```\n\n### Remove a repository\n\n```sh\njetti rm owner/repo           # prompts for confirmation\njetti rm owner/repo --force   # skip confirmation\n```\n\n`jetti rm` refuses to remove directories that are not git repositories.\n\n### Configuration\n\n```sh\njetti config          # show current settings\njetti config init     # create default config file\njetti config edit     # open in $EDITOR\n```\n\nConfig file at `~/.config/jetti/config.toml`:\n\n```toml\nroot = \"/home/user/dev\"\ndefault_host = \"github.com\"\nprotocol = \"ssh\"\n\n[[hosts]]\nname = \"github.com\"\nssh_prefix = \"git@github.com:\"\nhttps_prefix = \"https://github.com/\"\n```\n\n### Shell completions\n\nAdd one of the following to your shell configuration:\n\n```sh\n# Bash (add to ~/.bashrc)\neval \"$(jetti completions bash)\"\n\n# Zsh (add to ~/.zshrc)\neval \"$(jetti completions zsh)\"\n\n# Fish (add to ~/.config/fish/config.fish)\njetti completions fish | source\n```\n\n## Shell integration\n\nJump to a repo with fzf:\n\n```sh\n# Add to .bashrc / .zshrc\nj() {\n  local dir\n  dir=$(jetti list --full-path | fzf) \u0026\u0026 cd \"$dir\"\n}\n```\n\nClone and cd in one step:\n\n```sh\njc() {\n  cd \"$(jetti clone \"$@\")\"\n}\n```\n\n## Release\n\nThis repository uses `cocogitto` for conventional commits, version bumps, tags,\nand changelog generation.\n\nInstall the release tooling:\n\n```sh\ncargo install cocogitto cargo-edit\n```\n\nInstall the git hooks locally:\n\n```sh\ncog install-hook --all\n```\n\nCut a release:\n\n```sh\n# Preview the generated changelog\ncog changelog\n\n# Create the bump commit and tag from conventional commits\ncog bump --auto\n```\n\n`cog bump` uses `cog.toml` to:\n\n- update `Cargo.toml`\n- update `CHANGELOG.md`\n- create the release commit\n- create a `v\u003cversion\u003e` git tag\n\nAfter the tag is pushed, GitHub Actions builds release artifacts and publishes to\ncrates.io.\n\nAll new commits should follow the Conventional Commits format. CI verifies commit\nhistory with `cocogitto`.\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frapidity-rs%2Fjetti","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frapidity-rs%2Fjetti","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frapidity-rs%2Fjetti/lists"}