[{"data":1,"prerenderedAt":830},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-setup-cli":233,"-getting-started-setup-cli-surround":825},[4,36,67,122,187,207,223],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":35},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"What is Rabolic","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":16,"path":17,"stem":18,"icon":19},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F2.quickstart","i-lucide-zap",{"title":21,"path":22,"stem":23,"icon":24},"Keys","\u002Fgetting-started\u002Fkeys","1.getting-started\u002F3.keys","i-lucide-key-round",{"title":26,"path":27,"stem":28,"icon":29},"Setup CLI","\u002Fgetting-started\u002Fsetup-cli","1.getting-started\u002F4.setup-cli","i-lucide-terminal",{"title":31,"path":32,"stem":33,"icon":34},"Trial","\u002Fgetting-started\u002Ftrial","1.getting-started\u002F5.trial","i-lucide-hourglass",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"SDKs and API","i-lucide-code","\u002Fsdks","2.sdks",[42,47,52,57,62],{"title":43,"path":44,"stem":45,"icon":46},"Web","\u002Fsdks\u002Fweb","2.sdks\u002F1.web","i-lucide-globe",{"title":48,"path":49,"stem":50,"icon":51},"React Native and Expo","\u002Fsdks\u002Freact-native","2.sdks\u002F2.react-native","i-simple-icons-react",{"title":53,"path":54,"stem":55,"icon":56},"Flutter","\u002Fsdks\u002Fflutter","2.sdks\u002F3.flutter","i-simple-icons-flutter",{"title":58,"path":59,"stem":60,"icon":61},"Node.js","\u002Fsdks\u002Fnode","2.sdks\u002F4.node","i-simple-icons-nodedotjs",{"title":63,"path":64,"stem":65,"icon":66},"Ingest HTTP API","\u002Fsdks\u002Fhttp-api","2.sdks\u002F5.http-api","i-lucide-send",{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":35},"Concepts","i-lucide-lightbulb","\u002Fconcepts","3.concepts",[73,77,82,87,92,97,102,107,112,117],{"title":74,"path":75,"stem":76,"icon":19},"Events","\u002Fconcepts\u002Fevents","3.concepts\u002F01.events",{"title":78,"path":79,"stem":80,"icon":81},"Identity","\u002Fconcepts\u002Fidentity","3.concepts\u002F02.identity","i-lucide-fingerprint",{"title":83,"path":84,"stem":85,"icon":86},"Sessions","\u002Fconcepts\u002Fsessions","3.concepts\u002F03.sessions","i-lucide-activity",{"title":88,"path":89,"stem":90,"icon":91},"Key events and conversions","\u002Fconcepts\u002Fkey-events-and-conversions","3.concepts\u002F04.key-events-and-conversions","i-lucide-star",{"title":93,"path":94,"stem":95,"icon":96},"Funnels","\u002Fconcepts\u002Ffunnels","3.concepts\u002F05.funnels","i-lucide-filter",{"title":98,"path":99,"stem":100,"icon":101},"Journeys","\u002Fconcepts\u002Fjourneys","3.concepts\u002F06.journeys","i-lucide-route",{"title":103,"path":104,"stem":105,"icon":106},"Retention","\u002Fconcepts\u002Fretention","3.concepts\u002F07.retention","i-lucide-repeat",{"title":108,"path":109,"stem":110,"icon":111},"Revenue and attribution","\u002Fconcepts\u002Frevenue-and-attribution","3.concepts\u002F08.revenue-and-attribution","i-lucide-wallet",{"title":113,"path":114,"stem":115,"icon":116},"Consent and privacy","\u002Fconcepts\u002Fprivacy","3.concepts\u002F09.privacy","i-lucide-shield-check",{"title":118,"path":119,"stem":120,"icon":121},"Data retention","\u002Fconcepts\u002Fdata-retention","3.concepts\u002F10.data-retention","i-lucide-archive",{"title":123,"icon":124,"path":125,"stem":126,"children":127,"page":35},"Using the dashboard","i-lucide-layout-dashboard","\u002Fdashboard","4.dashboard",[128,133,138,143,146,151,154,157,160,163,167,172,177,182],{"title":129,"path":130,"stem":131,"icon":132},"Overview","\u002Fdashboard\u002Foverview","4.dashboard\u002F01.overview","i-lucide-gauge",{"title":134,"path":135,"stem":136,"icon":137},"Live","\u002Fdashboard\u002Flive","4.dashboard\u002F02.live","i-lucide-radio",{"title":139,"path":140,"stem":141,"icon":142},"Analytics","\u002Fdashboard\u002Fanalytics","4.dashboard\u002F03.analytics","i-lucide-bar-chart-3",{"title":74,"path":144,"stem":145,"icon":19},"\u002Fdashboard\u002Fevents","4.dashboard\u002F04.events",{"title":147,"path":148,"stem":149,"icon":150},"Users","\u002Fdashboard\u002Fusers","4.dashboard\u002F05.users","i-lucide-users",{"title":83,"path":152,"stem":153,"icon":86},"\u002Fdashboard\u002Fsessions","4.dashboard\u002F06.sessions",{"title":93,"path":155,"stem":156,"icon":96},"\u002Fdashboard\u002Ffunnels","4.dashboard\u002F07.funnels",{"title":98,"path":158,"stem":159,"icon":101},"\u002Fdashboard\u002Fjourneys","4.dashboard\u002F08.journeys",{"title":103,"path":161,"stem":162,"icon":106},"\u002Fdashboard\u002Fretention","4.dashboard\u002F09.retention",{"title":164,"path":165,"stem":166,"icon":111},"Revenue","\u002Fdashboard\u002Frevenue","4.dashboard\u002F10.revenue",{"title":168,"path":169,"stem":170,"icon":171},"Alerts","\u002Fdashboard\u002Falerts","4.dashboard\u002F11.alerts","i-lucide-bell",{"title":173,"path":174,"stem":175,"icon":176},"Integrations","\u002Fdashboard\u002Fintegrations","4.dashboard\u002F12.integrations","i-lucide-plug-zap",{"title":178,"path":179,"stem":180,"icon":181},"Project settings","\u002Fdashboard\u002Fproject-settings","4.dashboard\u002F13.project-settings","i-lucide-settings",{"title":183,"path":184,"stem":185,"icon":186},"Organizations and roles","\u002Fdashboard\u002Forganizations-and-roles","4.dashboard\u002F14.organizations-and-roles","i-lucide-building-2",{"title":188,"icon":189,"path":190,"stem":191,"children":192,"page":35},"Plans and billing","i-lucide-credit-card","\u002Fbilling","5.billing",[193,198,202],{"title":194,"path":195,"stem":196,"icon":197},"Plans","\u002Fbilling\u002Fplans","5.billing\u002F1.plans","i-lucide-tags",{"title":199,"path":200,"stem":201,"icon":132},"Usage and overage","\u002Fbilling\u002Fusage-and-overage","5.billing\u002F2.usage-and-overage",{"title":203,"path":204,"stem":205,"icon":206},"Read-only and deletion","\u002Fbilling\u002Fread-only-and-deletion","5.billing\u002F3.read-only-and-deletion","i-lucide-lock",{"title":208,"icon":209,"path":210,"stem":211,"children":212,"page":35},"Limits and troubleshooting","i-lucide-life-buoy","\u002Flimits","6.limits",[213,218],{"title":214,"path":215,"stem":216,"icon":217},"Limits","\u002Flimits\u002Flimits","6.limits\u002F1.limits","i-lucide-ruler",{"title":219,"path":220,"stem":221,"icon":222},"Events not showing","\u002Flimits\u002Ftroubleshooting","6.limits\u002F2.troubleshooting","i-lucide-search-check",{"title":224,"icon":225,"path":226,"stem":227,"children":228,"page":35},"AI connector","i-lucide-sparkles","\u002Fai","7.ai",[229],{"title":224,"path":230,"stem":231,"icon":232},"\u002Fai\u002Fconnector","7.ai\u002F1.connector","i-lucide-plug",{"id":234,"title":26,"body":235,"description":817,"extension":818,"links":819,"meta":820,"navigation":821,"path":27,"seo":822,"stem":28,"__hash__":824},"docs\u002F1.getting-started\u002F4.setup-cli.md",{"type":236,"value":237,"toc":810},"minimark",[238,246,272,275,302,305,315,320,519,549,553,556,648,652,660,730,736,740,800,806],[239,240,241,245],"p",{},[242,243,244],"code",{},"rabolic"," is the setup CLI. Run it in your project's folder:",[247,248,254],"pre",{"className":249,"code":250,"filename":251,"language":252,"meta":253,"style":253},"language-bash shiki shiki-themes github-light-default github-light-default github-dark-default","npx rabolic init\n","Terminal","bash","",[242,255,256],{"__ignoreMap":253},[257,258,261,265,269],"span",{"class":259,"line":260},"line",1,[257,262,264],{"class":263},"sQJ0q","npx",[257,266,268],{"class":267},"s-BGO"," rabolic",[257,270,271],{"class":267}," init\n",[239,273,274],{},"It looks at the folder you run it in, then:",[276,277,278,286,289,292,299],"ol",{},[279,280,281,282,285],"li",{},"installs the right SDK with your package manager (npm, pnpm, yarn or bun; ",[242,283,284],{},"flutter pub add"," for Flutter);",[279,287,288],{},"adds one file that starts the SDK;",[279,290,291],{},"puts the key in your env file;",[279,293,294,295,298],{},"sends one test event (",[242,296,297],{},"rabolic_cli_check","), so you can watch it arrive on the Live page;",[279,300,301],{},"prints the one line you add yourself.",[239,303,304],{},"It only adds new files and appends to the env file. It never edits your existing code, and it never overwrites a file or an env value that is already there.",[239,306,307,310,311,314],{},[242,308,309],{},"npm create rabolic"," does the same as ",[242,312,313],{},"npx rabolic init",".",[316,317,319],"h2",{"id":318},"what-it-sets-up","What it sets up",[321,322,323,342],"table",{},[324,325,326],"thead",{},[327,328,329,333,336,339],"tr",{},[330,331,332],"th",{},"Project",[330,334,335],{},"Package",[330,337,338],{},"File it adds",[330,340,341],{},"Env variable",[343,344,345,371,393,414,435,461,479,500],"tbody",{},[327,346,347,351,356,362],{},[348,349,350],"td",{},"Next.js (App or Pages Router)",[348,352,353],{},[242,354,355],{},"@rabolic\u002Fweb",[348,357,358,361],{},[242,359,360],{},"app\u002Frabolic.tsx"," (a client component)",[348,363,364,367,368],{},[242,365,366],{},"NEXT_PUBLIC_RABOLIC_KEY"," in ",[242,369,370],{},".env.local",[327,372,373,376,380,385],{},[348,374,375],{},"Nuxt",[348,377,378],{},[242,379,355],{},[348,381,382],{},[242,383,384],{},"plugins\u002Frabolic.client.ts",[348,386,387,367,390],{},[242,388,389],{},"NUXT_PUBLIC_RABOLIC_KEY",[242,391,392],{},".env",[327,394,395,398,402,407],{},[348,396,397],{},"Vite (React, Vue, Svelte, …)",[348,399,400],{},[242,401,355],{},[348,403,404],{},[242,405,406],{},"src\u002Frabolic.ts",[348,408,409,367,412],{},[242,410,411],{},"VITE_RABOLIC_KEY",[242,413,370],{},[327,415,416,419,424,428],{},[348,417,418],{},"Node.js server",[348,420,421],{},[242,422,423],{},"@rabolic\u002Fnode",[348,425,426],{},[242,427,406],{},[348,429,430,367,433],{},[242,431,432],{},"RABOLIC_SECRET_KEY",[242,434,392],{},[327,436,437,440,449,454],{},[348,438,439],{},"Expo",[348,441,442,445,446],{},[242,443,444],{},"@rabolic\u002Freact-native"," and AsyncStorage, with ",[242,447,448],{},"npx expo install",[348,450,451],{},[242,452,453],{},"rabolic.ts",[348,455,456,367,459],{},[242,457,458],{},"EXPO_PUBLIC_RABOLIC_KEY",[242,460,392],{},[327,462,463,466,471,476],{},[348,464,465],{},"React Native (bare)",[348,467,468,470],{},[242,469,444],{}," and AsyncStorage",[348,472,473,475],{},[242,474,406],{},", with the publishable key in it",[348,477,478],{},"none",[327,480,481,483,488,498],{},[348,482,53],{},[348,484,485],{},[242,486,487],{},"rabolic_flutter",[348,489,490,491,494,495],{},"none: prints the ",[242,492,493],{},"Rabolic.init"," call for ",[242,496,497],{},"main.dart",[348,499,478],{},[327,501,502,509,511,517],{},[348,503,504,505,508],{},"Static site (",[242,506,507],{},"index.html",")",[348,510,478],{},[348,512,490,513,516],{},[242,514,515],{},"\u003Cscript>"," tag",[348,518,478],{},[239,520,521,522,526,527,530,531,526,534,537,538,541,542,545,546,314],{},"Sites and apps use the project's ",[523,524,525],"strong",{},"publishable key"," (",[242,528,529],{},"rb_pub_…","). A server uses a ",[523,532,533],{},"secret key",[242,535,536],{},"rb_live_…"," or ",[242,539,540],{},"rb_test_…","). The CLI refuses the wrong kind. Both are in ",[523,543,544],{},"Integrations → API keys",". See ",[547,548,21],"a",{"href":22},[316,550,552],{"id":551},"the-line-you-add-yourself","The line you add yourself",[239,554,555],{},"The CLI doesn't edit your code, so it prints one step for you. For example:",[557,558,559,572,588,597,606,620,635],"ul",{},[279,560,561,564,565,568,569,314],{},[523,562,563],{},"Next.js:"," render ",[242,566,567],{},"\u003CRabolic \u002F>"," from the new file in your root layout, inside ",[242,570,571],{},"\u003Cbody>",[279,573,574,577,578,581,582,585,586,314],{},[523,575,576],{},"Nuxt:"," add ",[242,579,580],{},"runtimeConfig: { public: { rabolicKey: '' } }"," to ",[242,583,584],{},"nuxt.config",". Nuxt fills it from ",[242,587,389],{},[279,589,590,593,594,314],{},[523,591,592],{},"Vite:"," import the new file at the top of your entry file, such as ",[242,595,596],{},"src\u002Fmain.ts",[279,598,599,602,603,605],{},[523,600,601],{},"Node.js:"," import ",[242,604,244],{}," from the new file where you track server events or purchases.",[279,607,608,611,612,615,616,619],{},[523,609,610],{},"Expo Router:"," import the new file at the top of ",[242,613,614],{},"app\u002F_layout.tsx",", and pass the navigation ref to ",[242,617,618],{},"rabolic.trackNavigation"," for screens.",[279,621,622,625,626,367,628,631,632,314],{},[523,623,624],{},"Flutter:"," call ",[242,627,493],{},[242,629,630],{},"lib\u002Fmain.dart"," before ",[242,633,634],{},"runApp()",[279,636,637,640,641,643,644,647],{},[523,638,639],{},"Static site:"," paste the ",[242,642,515],{}," tag into ",[242,645,646],{},"\u003Chead>"," on every page.",[316,649,651],{"id":650},"options","Options",[247,653,658],{"className":654,"code":656,"language":657,"meta":253},[655],"language-text","npx rabolic init [--key \u003Ckey>] [--host \u003Curl>] [--yes] [--dry-run] [--skip-install]\nnpx rabolic check --key \u003Ckey> [--host \u003Curl>]\n","text",[242,659,656],{"__ignoreMap":253},[321,661,662,671],{},[324,663,664],{},[327,665,666,669],{},[330,667,668],{},"Option",[330,670],{},[343,672,673,683,696,710,720],{},[327,674,675,680],{},[348,676,677],{},[242,678,679],{},"--key",[348,681,682],{},"The key, instead of pasting it when asked",[327,684,685,690],{},[348,686,687],{},[242,688,689],{},"--host",[348,691,692,693,508],{},"Your ingest host, if you proxy it (default ",[242,694,695],{},"https:\u002F\u002Fingest.rabolic.com",[327,697,698,707],{},[348,699,700,703,704],{},[242,701,702],{},"--yes",", ",[242,705,706],{},"-y",[348,708,709],{},"Don't ask before installing and writing files",[327,711,712,717],{},[348,713,714],{},[242,715,716],{},"--dry-run",[348,718,719],{},"Print the plan and the files, change nothing",[327,721,722,727],{},[348,723,724],{},[242,725,726],{},"--skip-install",[348,728,729],{},"Don't run the package manager",[239,731,732,735],{},[242,733,734],{},"npx rabolic check --key …"," only sends the test event: a quick way to test a key, a host or a proxy.",[316,737,739],{"id":738},"what-the-test-event-tells-you","What the test event tells you",[321,741,742,752],{},[324,743,744],{},[327,745,746,749],{},[330,747,748],{},"The CLI says",[330,750,751],{},"It means",[343,753,754,762,770,780,792],{},[327,755,756,759],{},[348,757,758],{},"Rabolic received a test event (rabolic_cli_check). Open Live in your project to see it.",[348,760,761],{},"It works.",[327,763,764,767],{},[348,765,766],{},"The key was refused.",[348,768,769],{},"The key is wrong, unknown or revoked. Copy it again.",[327,771,772,775],{},[348,773,774],{},"The test event was dropped (the organization is over its limit).",[348,776,777,778,314],{},"The organization isn't taking events: the trial ended, there is no plan, or a cap was reached. See ",[547,779,199],{"href":200},[327,781,782,785],{},[348,783,784],{},"The test event was rejected: …",[348,786,787,788,314],{},"The event failed a check. The reason is one of the ",[547,789,791],{"href":790},"\u002Flimits\u002Flimits#rejection-reasons","rejection reasons",[327,793,794,797],{},[348,795,796],{},"Couldn't reach …",[348,798,799],{},"The host is wrong, or your network or proxy blocks it.",[801,802,803,804,314],"note",{},"The test event is a real accepted event. If your organization's trial hasn't started yet, it starts the trial's clock. See ",[547,805,31],{"href":32},[807,808,809],"style",{},"html pre.shiki code .sQJ0q, html code.shiki .sQJ0q{--shiki-light:#953800;--shiki-default:#953800;--shiki-dark:#FFA657}html pre.shiki code .s-BGO, html code.shiki .s-BGO{--shiki-light:#0A3069;--shiki-default:#0A3069;--shiki-dark:#A5D6FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":253,"searchDepth":811,"depth":811,"links":812},2,[813,814,815,816],{"id":318,"depth":811,"text":319},{"id":551,"depth":811,"text":552},{"id":650,"depth":811,"text":651},{"id":738,"depth":811,"text":739},"npx rabolic init detects your project, installs the right Rabolic SDK, adds one file, sets the key and sends a test event. What it does for Next.js, Nuxt, Vite, Node.js, Expo, React Native, Flutter and static sites.","md",null,{},{"icon":29},{"title":823,"description":817},"Set up Rabolic with npx rabolic init","uKw6jeo8z_hoecdFxzLubCZxNyy_EDqNLX6YJv-zkFE",[826,828],{"title":21,"path":22,"stem":23,"description":827,"icon":24,"children":-1},"Rabolic's publishable keys (rb_pub_) for websites and apps and secret keys (rb_live_, rb_test_) for servers. Where to find them, how to create and revoke them, and their environments.",{"title":31,"path":32,"stem":33,"description":829,"icon":34,"children":-1},"Rabolic's 3-day free trial with Growth's features and a 250,000-event cap. It starts with your first accepted event, needs no card, and is one per person.",1794242364670]