mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-11-14 00:07:00 +01:00
The UI was uneven: the home page looked finished, but app pages used three different display typefaces, the anonymize flow changed frame between steps, and the dashboard, explorer and admin screens each had their own controls, status colours and edge-case handling. Make every screen follow one system: shared page header, grid, buttons, filters and status colours; a repository picker and step trail on anonymize; a "What reviewers will see" preview of the actual reviewer page; consistent file headers and viewers for every file type; truthful admin charts and tables. Fold the accumulated override blocks back into style.css (22% smaller, no visual change). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
612 lines
41 KiB
HTML
612 lines
41 KiB
HTML
<div class="paper-faq">
|
|
<div class="paper-faq-hero">
|
|
<div class="paper-faq-eyebrow">Help</div>
|
|
<h1 class="paper-faq-title">Mirrors, redaction, and <em>what reviewers see.</em></h1>
|
|
<p class="paper-faq-lede">
|
|
How to set up an anonymous mirror, what it hides, and how long it stays online.
|
|
</p>
|
|
</div>
|
|
<div class="paper-faq-body">
|
|
<aside class="paper-faq-toc" v-paper-scrollspy>
|
|
<div class="paper-faq-toc-head">Contents</div>
|
|
<nav>
|
|
<a href="#faq-general">General</a>
|
|
<a href="#faq-plans">Plans and billing</a>
|
|
<a href="#faq-features">Features</a>
|
|
<a href="#faq-limitations">Limitations</a>
|
|
<a href="#faq-privacy">Privacy and security</a>
|
|
<a href="#faq-hosting">Self-hosting</a>
|
|
</nav>
|
|
</aside>
|
|
<section class="faq-section" aria-label="FAQs" :class="{ 'faq-searching': !!faqQuery.trim() }">
|
|
<div class="faq-search" role="search">
|
|
<label for="faq-search-input">Search questions</label>
|
|
<div class="faq-search-field">
|
|
<svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-search"></use></svg>
|
|
<input id="faq-search-input" type="search" class="form-control" v-model="faqQuery" @input="filterFaq()" @search="filterFaq()" @keydown.esc="clearFaqSearch()" placeholder="e.g. expiry, pull request, PDF" autocomplete="off" spellcheck="false" aria-describedby="faq-search-status">
|
|
</div>
|
|
<p id="faq-search-status" class="faq-search-status" aria-live="polite"><template v-if="faqQuery.trim() && faqResults">{{ faqResults === 1 ? '1 result' : faqResults + ' results' }}</template></p>
|
|
</div>
|
|
<div class="faq-search-empty" v-if="faqQuery.trim() && faqResults === 0">
|
|
<strong>No questions match “{{ faqQuery.trim() }}”.</strong>
|
|
<p>Try a shorter word, or ask us directly.</p>
|
|
<div class="faq-search-empty-actions">
|
|
<button type="button" class="btn btn-outline-ink btn-sm" @click="clearFaqSearch()">Clear search</button>
|
|
<a class="btn btn-link btn-sm" target="_blank" rel="noopener" href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml">Open an issue</a>
|
|
</div>
|
|
</div>
|
|
<div class="faq-list">
|
|
|
|
<!-- General -->
|
|
<h4 class="faq-cat">
|
|
<svg class="ui-icon mr-2" aria-hidden="true"><use href="#ui-icon-info"></use></svg>General
|
|
</h4>
|
|
<div class="panel-group" id="faq-general" role="tablist" aria-multiselectable="true">
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingWhatIs">
|
|
<h3 class="panel-title">
|
|
<a role="button" data-toggle="collapse" data-parent="#faq-general" href="#whatIs" aria-expanded="true" aria-controls="whatIs">
|
|
What is Anonymous GitHub?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="whatIs" class="panel-collapse collapse show" role="tabpanel" aria-labelledby="headingWhatIs">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Anonymous GitHub is an open-source tool with free hosting and optional paid plans that anonymizes GitHub repositories and pull requests
|
|
for double-anonymous (double-blind) peer review. It replaces identifying information, such as
|
|
the repository owner, organization name, and custom terms, so that reviewers cannot determine
|
|
the identity of the authors through the code repository.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingHowWork">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-general" href="#howWork" aria-expanded="false" aria-controls="howWork">
|
|
How does Anonymous GitHub work?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="howWork" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingHowWork">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Anonymous GitHub either downloads the complete repository and anonymizes the content, or proxies
|
|
requests to GitHub on the fly. In both cases, the original and anonymized versions of files are
|
|
cached on the server. The system automatically detects and replaces the repository owner,
|
|
organization name, and repository name. You can also specify additional custom terms to anonymize
|
|
using one-per-line regex patterns.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingScope">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-general" href="#scope" aria-expanded="false" aria-controls="scope">
|
|
What is the scope of anonymization?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="scope" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingScope">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
In double-anonymous peer review, the boundary of anonymization is the paper plus its online
|
|
appendix, not the entire internet. Searching for any part of the paper or the online appendix
|
|
can be considered a deliberate attempt to break anonymity. Anonymous GitHub anonymizes the
|
|
repository owner, organization, repository name, file and directory names, and file contents
|
|
across all text-based file types.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingCost">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-general" href="#cost" aria-expanded="false" aria-controls="cost">
|
|
How much does it cost?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="cost" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingCost">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
A free account includes 5 owned repositories and 2 GiB of source files. Optional paid plans
|
|
offer more capacity, automatic refresh, and, with an author subscription, never-expiring repositories.
|
|
Reviewers can read shared repositories without an account or payment.
|
|
</p>
|
|
<p>
|
|
See <a href="/profile#settings-billing">Plans and billing</a> for available plans and current prices.
|
|
Offers depend on whether payments are enabled on this instance; the checkout shows the amount before
|
|
you pay. Subscriptions help fund hosting, storage, backups, and continued maintenance.
|
|
</p>
|
|
<p>
|
|
You can also support development through
|
|
<a href="https://github.com/sponsors/tdurieux/" target="_blank" rel="noopener">GitHub Sponsors</a>
|
|
or <a href="https://ko-fi.com/tdurieux" target="_blank" rel="noopener">Ko-fi</a>.
|
|
Donations are separate from subscriptions and do not automatically unlock paid features.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Plans and billing -->
|
|
<h4 class="faq-cat" id="faq-plans-title">Plans and billing</h4>
|
|
<div class="panel-group" id="faq-plans" role="tablist" aria-label="Plans and billing" aria-multiselectable="true">
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingWhyPaid">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-plans" href="#whyPaid" aria-expanded="false" aria-controls="whyPaid">Why is Anonymous GitHub no longer completely free?</a>
|
|
</h3>
|
|
</div>
|
|
<div id="whyPaid" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingWhyPaid">
|
|
<div class="panel-body p-3">
|
|
<p>Anonymous GitHub started as a small free service and was paid for out of pocket. Three things have changed since then:</p>
|
|
<ul>
|
|
<li><strong>Servers cost much more.</strong> Every hosted repository needs storage, bandwidth and backups, and these costs have risen sharply.</li>
|
|
<li><strong>Many more people use it.</strong> More users means more repositories to store and keep up to date, more support requests and more maintenance.</li>
|
|
<li><strong>AI has made security work heavier.</strong> AI-driven scrapers and automated abuse send far more traffic than before. Blocking them and keeping hosted content safe takes constant work.</li>
|
|
</ul>
|
|
<p>The core service stays free: anonymizing a repository, sharing the link and reviewer access cost nothing, and reviewers never need an account. Most authors never need to pay. The paid options are small one-time payments for one repository, plus an optional subscription for heavy users. They are priced to cover running costs, not to make a profit.</p>
|
|
<p>The source code remains open, so you can still <a href="#faq-hosting">host your own instance</a> for free.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingFreePlan">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-plans" href="#freePlan" aria-expanded="false" aria-controls="freePlan">What is included in a free account?</a>
|
|
</h3>
|
|
</div>
|
|
<div id="freePlan" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingFreePlan">
|
|
<div class="panel-body p-3">
|
|
<p>The default free allowance is 5 repositories you own and 2 GiB of source files in total. Core anonymization and reviewer access remain free. You can manually refresh a repository within your allowance and choose a dated expiration up to 5 months ahead, then extend it again before it expires. Repositories submitted to a conference can stay online until the end of its review window.</p>
|
|
<p>Repositories shared with you as a co-author do not use your own slots. Gists and pull requests are not included in these repository quotas. The usage shown in your account is the allowance available on this instance.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingAuthorPlans">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-plans" href="#authorPlans" aria-expanded="false" aria-controls="authorPlans">What do monthly and annual author subscriptions include?</a>
|
|
</h3>
|
|
</div>
|
|
<div id="authorPlans" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingAuthorPlans">
|
|
<div class="panel-body p-3">
|
|
<p>Both include 20 owned repositories and 10 GiB of source files in total. They also allow automatic refresh when enabled in repository settings and let the owner choose <strong>Never expire</strong>.</p>
|
|
<p>Monthly and annual plans offer the same features with different billing periods. They renew automatically until you cancel renewal. Current prices are shown in <a href="/profile#settings-billing">Plans and billing</a>.</p>
|
|
<p>Paid plans do not change how anonymization works. File-size limits and other service safeguards still apply. Review your anonymized content before sharing it.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingReviewPass">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-plans" href="#reviewPass" aria-expanded="false" aria-controls="reviewPass">Can I pay for one repository without subscribing?</a>
|
|
</h3>
|
|
</div>
|
|
<div id="reviewPass" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingReviewPass">
|
|
<div class="panel-body p-3">
|
|
<p>Yes. These one-time add-ons apply to a single repository you own. None of them renews automatically:</p>
|
|
<ul>
|
|
<li><strong>Paper pack</strong>: an extra repository, automatic updates for 180 days and one more year before it expires, in a single payment. It covers what one paper usually needs during review.</li>
|
|
<li><strong>Extra repository</strong>: host one more repository once your free repositories are used up. It has its own 2 GiB allowance and does not count toward your free repositories. It lasts as long as the repository exists.</li>
|
|
<li><strong>Live updates</strong>: automatic refresh for 180 days, with a separate 2 GiB allowance.</li>
|
|
<li><strong>Extended expiration</strong>: choose an expiration date up to one year after purchase. Buying it again adds another year.</li>
|
|
<li><strong>Never expire</strong>: the repository has no expiration date. A full refund or a payment dispute ends it after a 90-day grace period.</li>
|
|
</ul>
|
|
<p>When your free allowance is full, the Extra repository and Paper pack options are offered as you create the repository. You can also buy an add-on from the repository's edit page, or enter the anonymized ID of an existing repository in <a href="/profile#settings-billing">Plans and billing</a>. Current prices are shown there.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingConferencePlans">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-plans" href="#conferencePlans" aria-expanded="false" aria-controls="conferencePlans">Can a conference or lab pay for a group?</a>
|
|
</h3>
|
|
</div>
|
|
<div id="conferencePlans" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingConferencePlans">
|
|
<div class="panel-body p-3">
|
|
<p>A conference review package provides a shared allowance for a review window of up to 180 days, with automatic updates for every submission. It comes in three sizes: Workshop (25 repositories, 10 GiB), Conference (100 repositories, 50 GiB) and Large conference (400 repositories, 200 GiB). Choose the size when you create the conference; it cannot change afterwards. The organizer pays once and authors pay nothing (the price is shown when you create the conference); the package does not renew automatically. A lab organizing a review can use this shared package too.</p>
|
|
<p>New conferences no longer have a free plan: every new conference is a review package. Conferences created earlier keep working as before. The conference must be activated by payment before authors can submit under its Conference ID. Eligible repositories use the conference allowance before an author's personal allowance, so authors do not each need a subscription for that capacity.</p>
|
|
<p>The package has a fixed review window. Never expire still requires the repository owner's author subscription or a Never expire add-on for that repository.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingPaidCoauthors">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-plans" href="#paidCoauthors" aria-expanded="false" aria-controls="paidCoauthors">Does every co-author need to pay?</a>
|
|
</h3>
|
|
</div>
|
|
<div id="paidCoauthors" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingPaidCoauthors">
|
|
<div class="panel-body p-3">
|
|
<p>No. Co-authors can collaborate without buying a subscription. A shared repository uses its owner's allowance, unless a repository pass or paid conference covers it. It does not consume each co-author's personal allowance.</p>
|
|
<p>A co-author's subscription does not increase the owner's allowance. If the owner's available capacity is exhausted, a co-author's refresh or edit may also be blocked. Reviewers never need a paid account.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingCapacity">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-plans" href="#capacity" aria-expanded="false" aria-controls="capacity">What counts toward my allowance, and what happens at the limit?</a>
|
|
</h3>
|
|
</div>
|
|
<div id="capacity" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingCapacity">
|
|
<div class="panel-body p-3">
|
|
<p>The repository limit counts work you own. Storage counts the source-file sizes reserved for those repositories, not just files a reviewer opens. Archived or failed repositories can still reserve capacity, and a refresh does not automatically reduce a previous storage reservation.</p>
|
|
<p>At the repository limit you cannot add another repository to that allowance. An edit or refresh must also fit the available storage. Remove work you no longer need, add an Extra repository for the new one, choose a subscription, or use an eligible conference allowance.</p>
|
|
<p>Removing a repository releases its reservation when capacity is next checked. Expired repositories may continue to reserve capacity until cleanup. Reaching a limit does not itself delete existing review links.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingNeverExpire">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-plans" href="#neverExpire" aria-expanded="false" aria-controls="neverExpire">What happens to Never expire repositories if I stop subscribing?</a>
|
|
</h3>
|
|
</div>
|
|
<div id="neverExpire" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingNeverExpire">
|
|
<div class="panel-body p-3">
|
|
<p>Never expire is available to monthly and annual author subscribers, or for one repository with the one-time Never expire add-on. If a subscription ends, these repositories remain available for a <strong>90-day grace period</strong>, then expire and their hosted content is removed.</p>
|
|
<p>Renewing during the grace period keeps them active. After expiration, you must renew and explicitly reactivate the repository; restoring content also requires access to its GitHub source. A repository does not become public on GitHub when it expires.</p>
|
|
<p>Existing never-expiring repositories created before this billing policy retain their settings. Never expire is not a guarantee of perpetual service availability.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingCancelPlan">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-plans" href="#cancelPlan" aria-expanded="false" aria-controls="cancelPlan">How do I cancel, and what happens after paid access ends?</a>
|
|
</h3>
|
|
</div>
|
|
<div id="cancelPlan" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingCancelPlan">
|
|
<div class="panel-body p-3">
|
|
<p>Open <a href="/profile#settings-billing">Plans and billing</a> and choose <strong>Manage billing and invoices</strong> to manage renewal. Cancelling renewal keeps subscription benefits until the end of the paid period.</p>
|
|
<p>After paid access ends, repositories fall back to another eligible allowance or the free allowance. Automatic refresh pauses on the free allowance; manual refresh remains available within its limits. Existing review links keep their configured expiration dates, except paid Never expire repositories, which follow the 90-day grace period described above.</p>
|
|
<p>A repository pass or conference package ends after its paid window without automatic renewal.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingRefunds">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-plans" href="#refunds" aria-expanded="false" aria-controls="refunds">Can I get a refund?</a>
|
|
</h3>
|
|
</div>
|
|
<div id="refunds" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingRefunds">
|
|
<div class="panel-body p-3">
|
|
<p>Refunds are handled case by case. <a href="mailto:tdurieux@anonymous.4open.science">Email the maintainer</a> with the date of the payment and the repository it was for.</p>
|
|
<p>A full refund ends what that payment bought. For a Paper pack, this means all three parts: the extra repository, automatic updates and the extended expiration. A Never expire repository then expires after a 90-day grace period. A partial refund keeps your access.</p>
|
|
<p>To stop a subscription, cancel its renewal instead of asking for a refund. You keep access until the end of the period you paid for.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingPaymentHandling">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-plans" href="#paymentHandling" aria-expanded="false" aria-controls="paymentHandling">How are payments handled?</a>
|
|
</h3>
|
|
</div>
|
|
<div id="paymentHandling" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingPaymentHandling">
|
|
<div class="panel-body p-3">
|
|
<p>Stripe processes checkout and billing management. Anonymous GitHub does not store your card details. You can access billing management and invoices from <a href="/profile#settings-billing">Plans and billing</a>.</p>
|
|
<p>Paid access is activated after payment is confirmed. If checkout succeeds but your account has not updated, choose <strong>Refresh payment status</strong> before trying another purchase. If paid plans are unavailable on this instance, no checkout is offered.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Features -->
|
|
<h4 class="faq-cat">
|
|
<svg class="ui-icon mr-2" aria-hidden="true"><use href="#project-icon-filter"></use></svg>Features
|
|
</h4>
|
|
<div class="panel-group" id="faq-features" role="tablist" aria-multiselectable="true">
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingFormats">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#formats" aria-expanded="false" aria-controls="formats">
|
|
Which file formats are supported?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="formats" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingFormats">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Anonymous GitHub can display and render a wide variety of file types:
|
|
</p>
|
|
<ul>
|
|
<li><strong>Text and source code</strong>: displayed with syntax highlighting</li>
|
|
<li><strong>Markdown</strong>: rendered as formatted HTML</li>
|
|
<li><strong>Images</strong> (PNG, JPG, SVG, etc.): displayed inline</li>
|
|
<li><strong>PDFs</strong>: rendered directly in the browser</li>
|
|
<li><strong>Jupyter Notebooks</strong>: rendered with code cells and outputs</li>
|
|
</ul>
|
|
<p>
|
|
Only text-based files are anonymized. Anonymous GitHub analyzes the content of each file to
|
|
determine whether it is textual or binary.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingPR">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#pullRequests" aria-expanded="false" aria-controls="pullRequests">
|
|
Can I anonymize pull requests?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="pullRequests" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingPR">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Yes. In addition to full repositories, Anonymous GitHub supports anonymizing individual pull
|
|
requests. Simply paste the URL of a GitHub pull request when creating a new anonymized repository,
|
|
and the system will automatically detect that it is a pull request and anonymize it accordingly.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingConference">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#conference" aria-expanded="false" aria-controls="conference">
|
|
What is the Conference ID feature?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="conference" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingConference">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
When creating an anonymized repository, you can associate it with a Conference ID. This allows
|
|
conferences to define default anonymization settings (such as expiration dates) that are
|
|
automatically applied to repositories submitted under that conference. If your conference
|
|
provides a Conference ID, enter it during the anonymization setup.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingExpiration">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#expiration" aria-expanded="false" aria-controls="expiration">
|
|
What happens when an anonymized repository expires?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="expiration" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingExpiration">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
You can configure one of three expiration strategies when creating your anonymized repository:
|
|
</p>
|
|
<ul>
|
|
<li><strong>Never expire</strong>: with a monthly or annual author subscription, no scheduled expiration while subscribed. A 90-day grace period applies after paid access ends. See <a href="#neverExpire">the subscription expiration policy</a>.</li>
|
|
<li><strong>Redirect to GitHub</strong>: after expiration, visitors are redirected to the original GitHub repository.</li>
|
|
<li><strong>Remove content</strong>: after expiration, the anonymized content is deleted from the server.</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingDownload">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#download" aria-expanded="false" aria-controls="download">
|
|
Can I download an anonymized repository?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="download" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingDownload">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Yes. Anonymized repositories can be downloaded as a ZIP file. This is useful if reviewers
|
|
want to build or test the code locally. The downloaded archive contains the fully anonymized
|
|
version of the repository.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingUpdates">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#updates" aria-expanded="false" aria-controls="updates">
|
|
Are updates to the original repository reflected in the anonymized version?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="updates" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingUpdates">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
You can refresh the anonymized repository from GitHub without creating a new share link.
|
|
Free accounts can request a manual refresh within their allowance. Automatic refresh requires an
|
|
eligible paid allowance and must be enabled in repository settings. It pauses when the repository
|
|
falls back to the free allowance.
|
|
</p>
|
|
<p>
|
|
After changing files or contributor names, review your anonymization terms before sharing the
|
|
updated content. If GitHub access is revoked or the source is deleted, the service cannot fetch updates.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingCLI">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-features" href="#cli" aria-expanded="false" aria-controls="cli">
|
|
Is there a command-line tool?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="cli" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingCLI">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Yes. Anonymous GitHub provides a CLI tool that lets you anonymize repositories locally,
|
|
generating an anonymized ZIP file on your machine. Install it via npm:
|
|
</p>
|
|
<pre style="background-color: var(--hover-bg-color); padding: 12px; border-radius: 4px; margin-top: 8px; color: var(--color);"><code>npm install -g @tdurieux/anonymous_github
|
|
anonymous_github</code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Limitations -->
|
|
<h4 class="faq-cat">
|
|
<svg class="ui-icon mr-2" aria-hidden="true"><use href="#ui-icon-warning"></use></svg>Limitations
|
|
</h4>
|
|
<div class="panel-group" id="faq-limitations" role="tablist" aria-multiselectable="true">
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingLimitation">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-limitations" href="#limitation" aria-expanded="false" aria-controls="limitation">
|
|
What are the limitations of Anonymous GitHub?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="limitation" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingLimitation">
|
|
<div class="panel-body p-3">
|
|
<ul>
|
|
<li>
|
|
Anonymous GitHub only anonymizes text-based files. Binary files (compiled executables,
|
|
archives, etc.) are served as-is without anonymization.
|
|
</li>
|
|
<li>
|
|
Files larger than 8 MB are not supported.
|
|
</li>
|
|
<li>
|
|
Static site generators (such as Jekyll) used with GitHub Pages are not fully supported,
|
|
although Markdown files are converted to HTML.
|
|
</li>
|
|
<li>
|
|
The anonymization of terms within source code may change the behavior of the program
|
|
(e.g., if a replaced term appears in a string literal or identifier).
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Privacy and security -->
|
|
<h4 class="faq-cat">
|
|
<svg class="ui-icon mr-2" aria-hidden="true"><use href="#ui-icon-shield"></use></svg>Privacy and security
|
|
</h4>
|
|
<div class="panel-group" id="faq-privacy" role="tablist" aria-multiselectable="true">
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingData">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-privacy" href="#data" aria-expanded="false" aria-controls="data">
|
|
How is my data handled?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="data" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingData">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Repository data is used to provide the anonymization service. If you purchase a plan, Stripe
|
|
processes payment and billing information. When a repository is removed or expires, only its configuration is
|
|
retained. This makes it easy to restore the repository if needed and ensures that no
|
|
future repository reuses the same ID.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingPermissions">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-privacy" href="#permissions" aria-expanded="false" aria-controls="permissions">
|
|
Why does GitHub say Anonymous GitHub asks for write access?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="permissions" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingPermissions">
|
|
<div class="panel-body p-3">
|
|
<p>The GitHub App has read-only access to the repositories you choose. You can change repository access on your <a href="/connections">GitHub connections</a> page.</p>
|
|
<p>Legacy GitHub OAuth includes write access to private repositories because GitHub's OAuth scopes do not offer a read-only option for them. Existing OAuth anonymizations and gists can still use this connection.</p>
|
|
<p>Anonymous GitHub reads repository content. It never pushes, modifies, or deletes files on GitHub.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingViewer">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-privacy" href="#viewer" aria-expanded="false" aria-controls="viewer">
|
|
Can repository owners see who viewed their anonymized repository?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="viewer" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingViewer">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
No. Only the total number of views is tracked as an incremental counter. It is not possible
|
|
for the repository owner or for Anonymous GitHub to identify individual viewers.
|
|
Reviewer anonymity is fully preserved.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Self-hosting -->
|
|
<h4 class="faq-cat">
|
|
<svg class="ui-icon mr-2" aria-hidden="true"><use href="#project-icon-storage"></use></svg>Self<span class="serif-hy">-</span>hosting
|
|
</h4>
|
|
<div class="panel-group" id="faq-hosting" role="tablist" aria-multiselectable="true">
|
|
<div class="panel panel-default mb-3">
|
|
<div class="panel-heading p-3" role="tab" id="headingDeploy">
|
|
<h3 class="panel-title">
|
|
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#faq-hosting" href="#deploy" aria-expanded="false" aria-controls="deploy">
|
|
Can I deploy my own instance?
|
|
</a>
|
|
</h3>
|
|
</div>
|
|
<div id="deploy" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingDeploy">
|
|
<div class="panel-body p-3">
|
|
<p>
|
|
Yes. Anonymous GitHub is fully open source (GPL-3.0) and supports Docker-based deployment.
|
|
Billing is optional and disabled by default for self-hosted instances; paid hosted plans are not
|
|
required to run your own server.
|
|
You will need to configure a GitHub OAuth app and provide a GitHub token. Detailed setup
|
|
instructions are available on the
|
|
<a href="https://github.com/tdurieux/anonymous_github/" target="_blank">GitHub repository</a>.
|
|
</p>
|
|
<p>
|
|
The basic steps are:
|
|
</p>
|
|
<ol>
|
|
<li>Clone the repository and install dependencies</li>
|
|
<li>Create a <code>.env</code> file with your GitHub token, OAuth client ID, and client secret</li>
|
|
<li>Run <code>docker-compose up -d</code></li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
</section>
|
|
<aside class="paper-faq-help" aria-label="More help">
|
|
<div class="paper-faq-help-card">
|
|
<strong>Still stuck?</strong>
|
|
<p>Open an issue on GitHub about the service. For a paper's content, contact the conference instead.</p>
|
|
<a class="btn btn-outline-ink btn-sm" target="_blank" rel="noopener" href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml">Open an issue</a>
|
|
</div>
|
|
</aside>
|
|
</div>
|
|
</div>
|
|
<partial-view name="partials/footer.htm" :state="viewState"></partial-view>
|