Privacy Policy
anacraft runs entirely on your own computer. There is no anacraft server. Your Google Analytics data goes straight from Google's API to your terminal — it is never routed through, copied to, or stored on any machine the maintainers control. We cannot see your analytics, and we collect nothing about you.
01What anacraft accesses
anacraft asks Google for two Analytics scopes on the sign-in screen:
https://www.googleapis.com/auth/analytics.readonly and
https://www.googleapis.com/auth/analytics.edit. The read scope covers everything the
program is for — the same aggregate figures the GA4 web interface shows, visitors, sessions, page views
and events, broken down by things like date, page, country, device and traffic source — plus the list
of properties your account can open. The edit scope is only ever used by craft configure,
which creates a GA4 property and its web stream for a domain you name, and by
craft delete --all, which deletes exactly the property you name. Keeping the edit scope on
the same consent screen as the read one is deliberate: signing in once is the whole browser trip, and
setup never has to interrupt the guide with a second one.
anacraft does not request your name, profile, or any other Google service, so reports and setup both stay inside your own Analytics account. Requests go directly from your machine to Google's Analytics APIs and to nothing else.
02What is stored on your computer
Two files, plus one you may never create. Your Google tokens live in
~/.anacraft/token.json, written 0600 on macOS and Linux so only your user
account can read it. Your chosen properties and their display settings live in
~/.config/anacraft/config.toml, which holds no credentials. If you supply your own OAuth
client, it goes in ~/.anacraft/client.json.
The split is deliberate: ~/.config is a directory people commonly sync to dotfile
repositories, so nothing secret is kept there.
That is the whole list. Analytics figures are never written to disk; they live in memory while the dashboard is open and are gone when you quit.
03How that data is protected
In transit. Every request anacraft makes — the authorization exchange, token refreshes, and
each Analytics query — goes over HTTPS with TLS, using the rustls stack compiled into the
binary. There is no plaintext transport and no option to disable verification.
At rest. The OAuth refresh token is the only sensitive value anacraft keeps. It is written to
~/.anacraft/token.json with permissions 0600 on macOS and Linux, so no other
user account on the machine can read it. On Windows it is written into your user profile and protected
by that account's own file permissions. Your Analytics figures are never written to disk at all — they
exist in memory while the dashboard is open and are gone when you quit, so there is no cache or export
for anyone to recover.
During sign-in. The login uses the OAuth 2.0 authorization code flow with
PKCE, deriving an S256
challenge from a single-use random verifier, so an intercepted authorization code cannot be redeemed
by anyone else. Google redirects to a loopback address on 127.0.0.1 using a port the
operating system assigns for that one login, and the reply is checked against a random
state value — a mismatch aborts the login rather than proceeding.
By scope. anacraft requests two scopes,
https://www.googleapis.com/auth/analytics.readonly for reading reports and
https://www.googleapis.com/auth/analytics.edit for the two write commands. The write scope
is wider than the code's use of it — it could change any configuration — so what keeps it bounded is
that anacraft issues no analytics writes except the one create in craft configure and the
one named delete behind craft delete --all, each against a domain or property you typed.
By not transmitting it. The strongest protection here is structural: there is no anacraft server to breach, no account to compromise, and no copy of your data anywhere but your own machine. Nothing is sent to the maintainers or to any third party.
Revocation. You can withdraw access at any time — anacraft logout revokes the
token with Google and deletes it from disk, and
myaccount.google.com/permissions revokes it from
Google's side independently of this program.
Auditable. anacraft is open source under Apache 2.0. The entire authentication path is in
src/auth.rs, so
none of the above has to be taken on trust.
04What anacraft does not do
- No telemetry, usage analytics, or crash reporting.
- No phoning home — no version pings, no install counters.
- No selling, sharing, or transferring your data, ever.
- No account or profile with us. We hold no record that you exist.
That list describes the program you install. The website you are reading it on is covered separately in section 08.
One exception, and it is opt-in. If you put the craft badge on your own site, the badge is an image served from our endpoint — so your visitors' browsers request it, and those requests reach us the way loading any hosted image reaches its host. We set no cookie and the badge carries no script, but the requests do arrive here, and saying otherwise would be a claim about images that is not true of any of them. The number behind the badge is also republished from your machine as you use anacraft, so the badge stays current without you re-running anything: that is one integer, sent against the badge's own id, and it is the whole of what leaves. Analytics data itself never does. A site without a badge sends us nothing at all.
05Google API Services Limited Use
anacraft's use of information received from Google APIs adheres to the Google API Services User Data Policy, including the Limited Use requirements. Data obtained through the Google Analytics APIs is used only to draw the dashboard on your own screen, in response to a command you ran. It is not transmitted to the maintainers or any third party, not used for advertising, and not used to train machine-learning models.
06The OAuth client in official builds
Release binaries have an OAuth client compiled in so that login works without you registering a Google Cloud project first. It only tells Google which application is asking — the resulting token is issued to your machine and used from your machine, so it gives the maintainers no access to anything.
Because that client is shared across official builds, so are Google's per-project API quotas. You can
supply your own instead, via environment variables or ~/.anacraft/client.json; see the
README for details.
07Revoking access and deleting data
anacraft logout— revokes the token with Google and deletes it from disk.- Delete
~/.anacraft/— removes everything anacraft keeps. - myaccount.google.com/permissions — withdraw access from Google's side at any time.
Since we never receive your data, there is nothing for us to delete on your behalf.
08The website, changes, and contact
The program collects nothing. The website does, if you let it. Everything above describes the anacraft binary, which has no telemetry and never contacts a server of ours. This section is about anacraft.dev, which is a separate thing.
anacraft.dev is a static site on GitHub Pages. It uses Google Analytics to count visits, configured
with client_storage: 'none' so that it writes no cookies and stores nothing on your
device at all — which is why you were not asked to dismiss a consent banner to read this. The
trade-off is ours, not yours: every visit reaches us as a new visitor, and we cannot tell whether you
have been here before. Google receives the page you viewed and derives an approximate location from
your IP address, which GA4 does not log or retain — see Google's
privacy policy. GitHub may log request metadata such as IP addresses, and two typefaces are fetched
from Google Fonts.
If this policy changes materially, the date above changes with it and the revision stays visible in the site's Git history. anacraft is published by Smartloop Inc. Questions about this policy: [email protected].