2018-03-09 20:37:31 +08:00
[](#backers)
2017-03-15 12:00:27 +08:00
[](#sponsors)
2018-03-09 20:37:31 +08:00
2014-05-10 08:06:38 +08:00
## Octotree
2017-03-08 06:32:32 +08:00
Browser extension (Chrome, Firefox, Opera and Safari) to show a code tree on GitHub. Awesome for exploring project source without having to pull every single repository to your machine. Features:
2017-03-15 12:00:27 +08:00
2016-05-20 02:02:45 +08:00
* Easy-to-navigate code tree, just like in IDEs
2018-03-13 14:57:48 +08:00
* Fast browsing with pjax
2015-11-11 15:05:53 +08:00
* Support private repositories (see [instructions ](#access-token ))
2017-03-08 06:32:32 +08:00
* Support GitHub Enterprise (Chrome and Opera only, see [instructions ](#enterprise-urls ))
2014-05-12 01:14:25 +08:00
2019-02-28 17:45:04 +08:00

2018-03-09 20:37:31 +08:00
2015-12-21 16:24:52 +08:00
### Install on Chrome, Firefox and Opera
2018-04-03 16:03:40 +08:00
* Install Octotree from [Chrome Web Store ](https://chrome.google.com/webstore/detail/gitcodetree/inaaldjpdbkaodlmdcplgpoibohcmmlj ), [Mozilla Add-ons Store](https://addons.mozilla.org/zh-CN/firefox/addon/giteetree/) or [Opera Add-ons Store ](https://addons.opera.com/en/extensions/details/gitcodetree/ )
2017-03-08 06:32:32 +08:00
* Navigate to any GitHub repository (or just refresh this page as an example)
2014-06-09 03:29:43 +08:00
* The code tree should show on the left-hand side of the screen
2018-03-09 20:37:31 +08:00
2017-03-08 06:32:32 +08:00
__Note__: to configure Octotree for GitHub Enteprise, see [instructions ](#enterprise-urls )
2018-03-09 20:37:31 +08:00
2015-12-21 16:24:52 +08:00
### Install on Safari
2018-03-09 20:37:31 +08:00
2018-03-13 14:57:48 +08:00
Octotree is not available on the Safari gallery. You have to build from source. Download this repo and run the following command:
2018-03-09 20:37:31 +08:00
2018-03-13 14:57:48 +08:00
```bash
gulp safari
```
2018-03-09 20:37:31 +08:00
2018-03-13 14:57:48 +08:00
Find the extension folder in `tmp/safari` . Follow Apple instructions to install the extension to your browser.
2018-03-09 20:37:31 +08:00
2016-05-20 02:02:45 +08:00
### Install from prebuilt packages (all browsers)
2017-06-25 12:38:06 +08:00
2015-12-26 17:34:55 +08:00
Prebuilt packages are available in the [dist ](https://github.com/buunguyen/octotree/tree/master/dist ) folder. For security reason, only download Octotree from this location.
2017-06-25 12:38:06 +08:00
2016-05-20 02:02:45 +08:00
__Note__: Firefox 43+ requires add-ons to be signed. Therefore, you should install Octotree from the Mozilla store. For some reason if you want to install the prebuilt package instead, you have to [disable sign-check ](https://github.com/buunguyen/octotree/issues/220#issuecomment-166012724 ).
2017-06-25 12:38:06 +08:00
2015-11-28 14:45:27 +08:00
## Settings
2015-11-16 02:40:54 +08:00
### Access Token
2016-05-18 11:26:17 +08:00
2018-03-13 14:57:48 +08:00
__Note for the paranoids (like me!)__: Octotree stores access tokens in your browser local storage and never transmits it anywhere.
2015-12-21 02:14:33 +08:00
2015-11-16 02:40:54 +08:00
#### GitHub
2014-05-10 08:06:38 +08:00
Octotree uses [GitHub API ](https://developer.github.com/v3/ ) to retrieve repository metadata. By default, it makes unauthenticated requests to the GitHub API. However, there are two situations when requests must be authenticated:
2015-12-21 02:14:33 +08:00
2014-05-14 14:27:02 +08:00
* You access a private repository
2014-05-10 08:06:38 +08:00
* You exceed the [rate limit of unauthenticated requests ](https://developer.github.com/v3/#rate-limiting )
2014-05-14 14:35:58 +08:00
2014-07-26 07:56:41 +08:00
When that happens, Octotree will ask for your [GitHub personal access token ](https://help.github.com/articles/creating-an-access-token-for-command-line-use ). If you don't already have one, [create one ](https://github.com/settings/tokens/new ), then copy and paste it into the textbox. Note that the minimal scopes that should be granted are `public_repo` and `repo` (if you need access to private repositories).
2016-05-20 02:02:45 +08:00
2017-08-11 07:06:50 +08:00
#### Bitbucket (experimental)
Octotree uses [Bitbucket API ](https://confluence.atlassian.com/bitbucket/repositories-endpoint-1-0-296092719.html ) to retrieve repository metadata. By default, Octotree asks for your [Bitbucket App password ](https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html ). If you don't already have one, [create one ](https://bitbucket.org/account/admin/app-passwords ) (the minimal requirement is `Repositories` 's `Read` permission), then copy and paste it into the textbox.
2016-05-20 02:02:45 +08:00
2017-08-11 07:06:50 +08:00
Note that Octotree extracts your username from the current page to invoke the Bitbucket API. If fail to do so, Octotree will ask you for a token update, you just need to prepend your username to the token, separated by a colon, i.e. `USERNAME:TOKEN` .
2014-05-10 08:06:38 +08:00
2015-11-16 02:40:54 +08:00
### Enterprise URLs
2017-03-08 06:32:32 +08:00
By default, Octotree only works on `github.com` . To support enterprise version (Chrome and Opera only), you must grant Octotree sufficient permissions. Follow these steps to do so:
2017-05-16 14:34:21 +08:00
2017-03-08 06:32:32 +08:00
* Go to any GitHub repo
2016-01-05 03:31:05 +08:00
* Open the Octotree settings panel
2016-04-27 04:52:15 +08:00
2016-04-27 04:50:28 +08:00

2018-01-16 03:30:55 +08:00
* Fill in the GitHub Enterprise URLs textbox, __one URL per line__
2016-01-05 03:31:05 +08:00
* Click Save and accept the permission prompt
2017-03-08 06:32:32 +08:00
* Navigate to your GitHub Enterprise site
2015-11-11 15:05:53 +08:00
* You might be asked to create an [access token ](#access-token )
2014-07-26 07:56:41 +08:00
2015-11-28 14:45:27 +08:00
### Others
2018-01-16 03:30:55 +08:00
* __Hotkeys__: Octotree uses [keymaster ](https://github.com/madrobby/keymaster ) to register hotkeys. Check out the [supported keys ](https://github.com/madrobby/keymaster#supported-keys ).
2015-12-05 01:48:26 +08:00
* __Remember sidebar visibility__: if checked, show or hide Octotree based on its last visibility.
* __Show in non-code pages__: if checked, allow Octotree to show in non-code pages such as Issues and Pull Requests.
* __Load entire tree at once__: if checked, load and render the entire code tree at once. To avoid long loading, this should be unchecked if you frequently work with very large repos.
2017-08-30 06:22:39 +08:00
* __Show only pull request changes__ _(new!)_ : if checked and in "Pull requests" page, only show the change set of the pull request.
2015-11-16 02:40:54 +08:00
2015-11-11 15:05:53 +08:00
## Credits
2016-05-05 00:30:16 +08:00
* [@crashbell ](https://github.com/crashbell ) for helping with GitLab and others
* [@Ephemera ](https://github.com/Ephemera ) for fixing many bugs
* [@athaeryn ](https://github.com/athaeryn ) and [@letunglam ](https://github.com/letunglam ) for helping with UI design
2015-11-11 15:05:53 +08:00
* And many other people who submit bug fixes and reports
2017-03-15 12:00:27 +08:00
## Backers
2018-03-13 14:57:48 +08:00
Loving Octotree? [Donating ](https://opencollective.com/octotree ) to help us continue working on it.
[[Become a backer ](https://opencollective.com/octotree#backer )]
2017-03-15 12:00:27 +08:00
< a href = "https://opencollective.com/octotree/backer/0/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/0/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/1/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/1/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/2/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/2/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/3/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/3/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/4/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/4/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/5/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/5/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/6/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/6/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/7/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/7/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/8/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/8/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/9/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/9/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/10/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/10/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/11/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/11/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/12/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/12/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/13/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/13/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/14/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/14/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/15/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/15/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/16/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/16/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/17/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/17/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/18/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/18/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/19/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/19/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/20/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/20/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/21/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/21/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/22/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/22/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/23/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/23/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/24/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/24/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/25/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/25/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/26/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/26/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/27/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/27/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/28/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/28/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/backer/29/website" target = "_blank" > < img src = "https://opencollective.com/octotree/backer/29/avatar.svg" > < / a >
## Sponsors
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor ](https://opencollective.com/octotree#sponsor )]
< a href = "https://opencollective.com/octotree/sponsor/0/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/0/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/1/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/1/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/2/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/2/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/3/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/3/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/4/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/4/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/5/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/5/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/6/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/6/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/7/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/7/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/8/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/8/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/9/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/9/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/10/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/10/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/11/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/11/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/12/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/12/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/13/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/13/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/14/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/14/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/15/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/15/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/16/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/16/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/17/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/17/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/18/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/18/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/19/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/19/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/20/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/20/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/21/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/21/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/22/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/22/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/23/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/23/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/24/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/24/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/25/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/25/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/26/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/26/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/27/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/27/avatar.svg" > < / a >
< a href = "https://opencollective.com/octotree/sponsor/28/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/28/avatar.svg" > < / a >
2018-03-13 14:57:48 +08:00
< a href = "https://opencollective.com/octotree/sponsor/29/website" target = "_blank" > < img src = "https://opencollective.com/octotree/sponsor/29/avatar.svg" > < / a >