Analytics · set it up, then read it · written in Rust

Your website deserves better analytics.

craft configure yoursite.com sets your analytics up in one command — the property, its web stream, and the tag with the real measurement id already in it. Then anacraft renders what it collects as a full-screen terminal dashboard — seven live panels, ore-textured bars, a realtime event feed, and achievement toasts when the numbers move.

The real thing — craft dash --demo, captured at 132×5274×58.

anacraft — CONTOSO LABS (DEMO) live
                                                                                                                                    
 ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ 
   ANACRAFT CONTOSO LABS (DEMO) · last 7 days · ◉ 124 online now · US:46  Ind:16  Ger:11  UK:11  Bra:9                    ⣃⣶⣘  
 └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 
                                                                                                                                    
  ■^1 EVENTS ───────────────────────────────────────────── 45,753 ▲22%  ■^2 RIGHT NOW ────────────────────────────────────────┐ 
 10,145                                                      ▄▄▄▄▄▄▀▀▀ 124  players online                                 
                                                         ▄▀▀▀            active last 30 min · polled 5s                        
               ▄▄▄▄                                   ▄▀▀       ▄▄▄▄▄▄                                                         
       ▄▄▄▀▀▀▀▀    ▀▀▀▀▄▄▄▄▄▄                       ▄▀  ▄▄▀▀▀▀▀▀         +4 spawned in  0s·······························  
       ▀▀▀▀▀▀▄▄▄▄▄▄▄▀▀▀▀▀ ▀▀▀▄▄▄▄▄               ▄▀▀  ▄▀                 -9 wandered off  0s·····························  
 5,073                          ▀▀▄▄▄▄▄▄▄▄▄▄▄▄▀▀▀  ▄▀▀                   -5 wandered off  0s·····························  
                                     ▀▀▀▀▀▀▀▀▀▄▄▄▀▀                      -5 wandered off  0s·····························  
                                                                         +9 spawned in  0s·······························  
                                                                         +2 spawned in  0s·······························  
 0                                                                                                                             
       └───────────────────────────────────────────────────────────────│                                                         
      13                               16                            19                                                         
 └──────────────────────────────────────────━━ last 7 days  ━━ previous  └───────────────────────────────────────────────────────┘ 
                                                                                                                                    
  ■^5 VITALS ──────────────────────────────────────────────────────────┐  ■^4 TOP PAGES ────────────────────────────────────────┐ 
 VILLAGERS     (users)           12,515  ▲9%                            /                                                     
   ████████████████████░░░░░░░░                                          ███████████████████     6,948  17%                  
                                                                        /pricing                                              
 EXPEDITIONS   (sessions)        18,236  ▲7%                               ████████░░░░░░░░░░     3,187   8%                  
   ████████████████████░░░░░░░░                                       /docs/quickstart                                      
                                                                           ███████░░░░░░░░░░░     3,125   7%                  
 BLOCKS MINED  (page views)      41,772  ▲7%                            · /blog/mining-metrics                                  
   ████████████████████░░░░░░░░                                          ████░░░░░░░░░░░░░░     2,066   5%                  
                                                                        · /changelog                                            
 DIAMONDS      (conversions)        315  ▲22%                              ████░░░░░░░░░░░░░░     1,963   5%                  
   ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆░░░░░                                       └───────────────────────────────────────────────────────┘ 
                                                                                                                                  
 CREEPER RATE  (bounce rate)      41.2%  ▼14%                            ■^6 TOP COUNTRIES ────────────────────────────────────┐ 
   ███████████░░░░░░░░░░░░░░░░░                                       United States                                         
                                                                           ███████████████████     4,142                       
 TIME SURVIVED (avg. session)    3m 34s  ▲12%                           India                                                 
   █████████████████████░░░░░░░                                          ████████░░░░░░░░░░░     1,871                       
                                                                        Germany                                               
                                                                           ███░░░░░░░░░░░░░░░     1,035                       
                                                                        · United Kingdom                                        
                                                                           ███░░░░░░░░░░░░░░░     1,034                       
 └──────────────────────────────────────────────────────────────────────┘ └───────────────────────────────────────────────────────┘ 
                                                                                                                                    
 ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ 
   ★ ANACRAFTER  ·  the same numbers, none of the invoice                                                                         
 └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 
                                                                                                                                    
 ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ 
  [q]quit[r]rebuild[?]help[t]osaka-jade live · updated 17:24:53                                                
 └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 
                                                                                                                                    
┌────────────────────────────────────────────────────────────────────────┐
                                                                        
   ANACRAFT · the shaft is too tight to work in                        
                                                                        
  have    74 × 58                                                       
  needs   80 × 24                                                       
                                                                        
  resize the terminal · q to quit                                       
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
└────────────────────────────────────────────────────────────────────────┘
1 Events — this period vs last
2 Right now — live feed
3 Countries — the world map
4 Top pages — by views
5 Vitals — headline metrics
6 Top countries — ranked
7 Daily users — trend
What you get

Every panel earns its rows.

One command to set the property up, then seven panels, each toggleable with a number key. Turn off what you do not care about and the rest reflows to fill the terminal.

01

It configures your analytics

craft configure yoursite.com creates the Google Analytics property, adds the web stream and prints the tag with its real measurement id in it — the three console steps between a new domain and its first number. Run it twice and it hands the tag back rather than quietly creating a second property.

02

Seven toggleable panels

Events, Right Now, Top Chunks, Daily Villagers, Realms, Vitals and Top Realms — keys 17, or their letter aliases.

03

Realtime event feed

Players online polled every few seconds, with spawn and wander-off events that fade as they age out of the window.

04

Achievement toasts

Diamond Streak, Creeper Repelled, Deep Vein — unlocks pop in when a metric crosses a milestone, then get out of the way.

05

Five palettes, one texture pack

Osaka Jade, Catppuccin, GitHub, Tokyo Night and Catppuccin Latte. The ore vocabulary survives the swap; t cycles, and the choice persists.

06

One-shot reports

Not everything needs a dashboard. overview, pages, portals, realms and live print and exit — pipe them anywhere.

07

Runs before you sign in

craft on its own opens the dashboard, and with no property saved it drives the whole thing from synthetic data — so you see it working before touching OAuth.

08

Every property in one session

Save as many GA4 properties as you like and Tab walks them without leaving the dashboard — each one keeping its own palette and time window.

09

Readable by an assistant

craft mcp serves the dashboard's numbers over the Model Context Protocol — ten read-only tools, one command to wire into Claude Desktop. Part of the Anacrafter subscription, $2.99/mo — craft mcp --demo is ungated.

On the roadmap

Where each one stands.

Soon

AI insights

Anomaly detection on sudden drops, content suggestions from page trends, and goal projections — surfaced in an Enchantment Table panel.

Live

One-click Google sign-in

craft login in a single round trip — consent, redirect, token stored. The OAuth client is verified and live.

Soon

Usage tracking and plans

A Supabase-backed count of AI usage per install, so plan tiers have something to meter — with your own key overriding the shipped one.

Soon

Custom theme support

Build a palette with craft theme create, load one from JSON with craft theme import, or pull someone else's with craft theme install user/repo.

Quick start

Two minutes from curl to numbers.

Official builds carry their own OAuth client, so craft login needs no Google Cloud project — and craft configure replaces the four console screens between a new domain and its first number.

# install — gives you `craft`, and `anacraft` as an alias
$ curl -fsSL https://anacraft.dev/install.sh | bash

# no command = the dashboard; no property = synthetic data
$ craft

# no GA4 property yet? this makes one and prints its tag
$ craft configure yoursite.com

# already have one? connect it instead
$ craft login
$ craft props
$ craft use 1234567

# one-shot reports
$ craft overview --days 30
$ craft pages
$ craft realms
KeyIn the dashboard
17Toggle a panel — or b l p d m v g
tabNext property — cycles what craft use has added
tCycle the palette, and save it
rRebuild — force a refetch now
? hHelp overlay
q escQuit
CommandWhat it does
craftOpens the dashboard — dash is the default
craft configure <domain>Creates the GA4 property, adds the web stream, prints the tag — the guide
PathWhat lives there
~/.config/anacraft/config.tomlProperties and their settings
~/.anacraft/token.jsonOAuth refresh token
MCP server

Your numbers, in a conversation.

craft mcp serves the same numbers over the Model Context Protocol, so Claude Desktop — or any MCP client — answers “how is the site doing” without a human reading a TUI. The dashboard and the one-shot reports are free; this is one of the two parts the Anacrafter subscription pays for — $2.99 a month — and craft mcp --demo is ungated so it can be wired up and looked at first.

# wire it into Claude Desktop, then restart it
$ craft mcp --install

# try it first — synthetic data, no account
$ craft mcp --demo

# or paste it in yourself. an absolute path —
# a desktop app never sees your shell's PATH
{
  "mcpServers": {
    "anacraft": {
      "command": "/usr/local/bin/craft",
      "args": ["mcp"]
    }
  }
}
ToolAnswers
site_statusHow the site is doing — every headline metric against the period before it
live_visitorsWho is on it right now, by country
list_pagesMost-visited pages
list_eventsEvents by count, and whether they are rising
list_referrersThe links sending traffic
list_traffic_sourcesThe source / medium mix
list_countriesTraffic by country
list_propertiesEvery property this account can read
search_pagesPages whose path contains a substring
search_eventsEvents whose name contains a substring

Every tool is a read. Nothing here signs in, writes to disk, or moves your default property — login and use stay human-only commands. Answers come back as labelled JSON carrying the property and the date window they cover, so an assistant can attribute the numbers it quotes. Needs craft login first, and a subscription; --demo needs neither.

Alerts

Told, not asked.

A dashboard answers how is the site doing when somebody thinks to ask. craft watch answers the one nobody is awake to ask — did something break. It compares the most recent complete day against the mean of the days before it and reports what moved further than it usually does. Nothing to configure for it to be useful: a site's own history is the threshold.

# check once, print what moved, exit
$ craft watch

# pick a slack channel, then keep checking
$ craft slack --install
$ craft watch --every 3600

# see all three shapes on synthetic data
$ craft watch --demo

⛏ VILLAGERS      412  ▼38%
  28-day normal 664 · fires past 30%
⛏ DIAMONDS         0  nothing recorded
  28-day normal 12 · fires past 40%
Fires onWhich is
dropDown past the metric's threshold — 30% for users, 40% for conversions, 20% for bounce rate
spikeUp past the same line. A good morning is worth knowing about too
silentA count that went to nothing against a baseline that was not nothing — a deleted tag, a broken banner, a site that is down
no dataNothing anywhere in the window. Said once, rather than as six metrics all going quiet

Tuned per property when the defaults are wrong for your site, and silent about a day it has already told you about — one message about a drop, not one an hour. How alerts work →

Palettes

Five grounds to mine on.

craft theme <name> saves one as the default; --theme overrides it for a single run.

osaka-jade
catppuccin
github
tokyo-night
catppuccin-latte

Requires a truecolor terminal, a GA4 property, and Rust 1.74+ if you build it yourself.

Your analytics, always on.