[{"data":1,"prerenderedAt":1139},["ShallowReactive",2],{"doc:\u002Fdocs\u002Fconnections\u002Fsmtp":3,"docs-nav":920},{"id":4,"title":5,"body":6,"description":911,"extension":912,"meta":913,"navigation":915,"path":916,"seo":917,"stem":918,"__hash__":919},"docs\u002Fdocs\u002Fconnections\u002Fsmtp.md","SMTP connections",{"type":7,"value":8,"toc":896},"minimark",[9,13,22,27,118,122,127,220,232,238,241,244,304,307,353,359,370,374,456,459,463,472,476,479,526,532,612,621,628,636,679,685,689,696,766,782,785,831,835,862,866,892],[10,11,5],"h1",{"id":12},"smtp-connections",[14,15,16,17,21],"p",{},"An SMTP connection is the mail server Tabularia sends email through: a flow's result as\nan attachment, the datasources of a flow group as Excel files, the notice that a\nscheduled flow failed, the notice that a data contract changed state. It names the\nserver, the account and the sender, and — the part that matters most — the ",[18,19,20],"strong",{},"allowed\ndomains",", the only limit on whom the connection can write to.",[23,24,26],"h2",{"id":25},"at-a-glance","At a glance",[28,29,30,41],"table",{},[31,32,33],"thead",{},[34,35,36,39],"tr",{},[37,38],"th",{},[37,40],{},[42,43,44,60,84,102,110],"tbody",{},[34,45,46,50],{},[47,48,49],"td",{},"Where",[47,51,52,53,56,57],{},"A folder in Explore, ",[18,54,55],{},"New → New connection",", type ",[18,58,59],{},"SMTP \u002F email",[34,61,62,65],{},[47,63,64],{},"Used by",[47,66,67,68,71,72,75,76,79,80,83],{},"Output node ",[18,69,70],{},"«Email with attachment»","; ",[18,73,74],{},"Pushmail"," cells of flow groups; ",[18,77,78],{},"«Tell me if it fails»"," of a flow's schedule; the ",[18,81,82],{},"Notifications"," of a data contract",[34,85,86,89],{},[47,87,88],{},"Encryption",[47,90,91,94,95,98,99],{},[18,92,93],{},"STARTTLS (587)",", ",[18,96,97],{},"SSL\u002FTLS (465)",", or ",[18,100,101],{},"None (not recommended)",[34,103,104,107],{},[47,105,106],{},"Limit",[47,108,109],{},"15 MB of attachments per email",[34,111,112,115],{},[47,113,114],{},"Permissions",[47,116,117],{},"CONNECT on the connection's folder, to create it and to send through it",[23,119,121],{"id":120},"how-it-works","How it works",[123,124,126],"h3",{"id":125},"the-fields","The fields",[28,128,129,139],{},[31,130,131],{},[34,132,133,136],{},[37,134,135],{},"Field",[37,137,138],{},"Meaning",[42,140,141,156,164,180,192,208],{},[34,142,143,146],{},[47,144,145],{},"SMTP server, Port",[47,147,148,94,152,155],{},[149,150,151],"code",{},"smtp.office365.com",[149,153,154],{},"587",". Empty port = 587.",[34,157,158,161],{},[47,159,160],{},"Username, Password",[47,162,163],{},"The account that signs in. Both empty: no sign-in, for a relay that accepts the engine's address.",[34,165,166,169],{},[47,167,168],{},"Sender address",[47,170,171,172,175,176,179],{},"The ",[149,173,174],{},"From"," address: ",[149,177,178],{},"reports@example.com",". Nothing is sent without it.",[34,181,182,185],{},[47,183,184],{},"Sender name",[47,186,187,188,191],{},"Optional display name: ",[149,189,190],{},"Tabularia Reports",".",[34,193,194,196],{},[47,195,88],{},[47,197,198,200,201,203,204,207],{},[18,199,93],{},": a plain connection upgraded to TLS before signing in, the usual choice (Microsoft 365, Gmail with an app password). ",[18,202,97],{},": TLS from the first byte. ",[18,205,206],{},"None",": no encryption at all, the password included; only for a relay on a network you trust, or a test server.",[34,209,210,213],{},[47,211,212],{},"Allowed domains",[47,214,215,216,219],{},"Comma-separated: ",[149,217,218],{},"example.com, example.org",". Empty = no limit.",[14,221,222,223,226,227,191],{},"With STARTTLS and SSL\u002FTLS the server's certificate and name are verified. For a relay with\na self-signed certificate, ",[149,224,225],{},"SMTP__VERIFY_TLS=false"," on the engine and its workers turns the\ncheck off for every SMTP connection of the installation: still encrypted, but to a server\nnobody vouched for, which receives the password. See ",[228,229,231],"a",{"href":230},"\u002Fdocs\u002Fconfiguration","Configuration",[14,233,234,237],{},[18,235,236],{},"Test connection"," connects, encrypts as chosen and signs in, then closes: it sends\nnothing. A certificate that cannot be verified is named in the error, with the variable\nthat would accept it.",[123,239,212],{"id":240},"allowed-domains",[14,242,243],{},"Recipients are free text: whoever writes a flow types them in the Output node, the\nPushmail cell or the schedule. The allowed domains decide which of them are acceptable,\nand nothing else does — Tabularia has no other list of permitted addresses.",[245,246,247,254,298],"ul",{},[248,249,250,253],"li",{},[18,251,252],{},"Empty",": any address. Whoever can use the connection can send data anywhere.",[248,255,256,259,260,263,264,267,268,271,272,275,276,279,280,283,284,287,288,290,291,294,295,297],{},[18,257,258],{},"Set",": every recipient, in To and in Cc, must have ",[18,261,262],{},"exactly"," one of the listed\ndomains after its ",[149,265,266],{},"@",", case aside. ",[149,269,270],{},"example.com"," allows ",[149,273,274],{},"anna@example.com"," and\n",[149,277,278],{},"ANNA@Example.com","; it does ",[18,281,282],{},"not"," allow ",[149,285,286],{},"anna@it.example.com",": list subdomains one by\none. A leading ",[149,289,266],{}," is dropped (",[149,292,293],{},"@example.com"," is ",[149,296,270],{},").",[248,299,300,303],{},[18,301,302],{},"Malformed"," (edited by hand into something that is not a list): no email leaves\nthrough the connection, until it is fixed.",[14,305,306],{},"Where the check happens, always in the gateway before anything is sent:",[28,308,309,319],{},[31,310,311],{},[34,312,313,316],{},[37,314,315],{},"Use",[37,317,318],{},"When the recipients are checked",[42,320,321,329,337,345],{},[34,322,323,326],{},[47,324,325],{},"Output node «Email with attachment»",[47,327,328],{},"at the start of every run, manual or scheduled: a recipient outside the domains refuses the run, naming it",[34,330,331,334],{},[47,332,333],{},"Pushmail cell",[47,335,336],{},"when the group is saved and again when it runs",[34,338,339,342],{},[47,340,341],{},"«Tell me if it fails» of a schedule",[47,343,344],{},"when the schedule is saved",[34,346,347,350],{},[47,348,349],{},"Notifications of a data contract",[47,351,352],{},"when the contract is saved",[14,354,355,358],{},[18,356,357],{},"«Send it to me»"," on an email Output node is the one exception: it sends the real\nattachment only to the address of the account that presses it, set by the server, so the\ndomains do not apply.",[14,360,361,362,365,366,369],{},"The domains bind everyone who sends through the connection. They do not bind whoever\nmanages it: CONNECT on the connection's folder is also the right to edit it, domains\nincluded. Changes are in ",[18,363,364],{},"Audit"," (",[149,367,368],{},"connection.update",", with who made them). Give CONNECT\non the folder of an SMTP connection to the people you trust to choose its domains.",[123,371,373],{"id":372},"where-it-is-used","Where it is used",[245,375,376,433,446,451],{},[248,377,378,380,381,94,384,387,388,94,391,94,394,397,398,401,402,94,405,365,408,411,412,415,416,419,420,424,425,428,429,191],{},[18,379,325],{}," in a flow: ",[18,382,383],{},"SMTP connection",[18,385,386],{},"Recipients",",\n",[18,389,390],{},"Cc",[18,392,393],{},"Subject",[18,395,396],{},"Message body"," (plain, or HTML when ",[18,399,400],{},"The body is HTML"," is\nticked), ",[18,403,404],{},"Attachment name",[18,406,407],{},"Format",[18,409,410],{},"Excel (.xlsx)"," or ",[18,413,414],{},"CSV","), and ",[18,417,418],{},"Stop the\nflow if the send fails"," (on by default). The attachment is made at every run, even with\nno rows. Subject and attachment name take ",[228,421,423],{"href":422},"\u002Fdocs\u002Fplaceholders","placeholders",":\n",[149,426,427],{},"Sales {yesterday:dd\u002FMM}",". See ",[228,430,432],{"href":431},"\u002Fdocs\u002Fconnections\u002Fdestinations#an-email-with-an-attachment","Writing data out",[248,434,435,438,439,442,443,191],{},[18,436,437],{},"Pushmail cells"," of a flow group: one email with one ",[149,440,441],{},".xlsx"," per datasource, up to 20\ndatasources. See ",[228,444,74],{"href":445},"\u002Fdocs\u002Fpushmail",[248,447,448,450],{},[18,449,78],{}," in a flow's schedule: addresses and an SMTP connection. Only\nscheduled runs, and only when the flow moves to failure: a flow that stays broken is\nreported once, not at every firing. A connection that sends a flow's failure notices cannot be\ndeleted until the schedule is changed.",[248,452,453,455],{},[18,454,82],{}," of a data contract: addresses and an SMTP connection; one email when\nthe contract's state changes (an update refused, a rule no longer respected, everything\nfine again), not one per check.",[14,457,458],{},"Every send goes from the engine's workers (the notices from the engine), never from the\ngateway or the browser.",[23,460,462],{"id":461},"example-try-it-locally-with-mailpit","Example: try it locally with Mailpit",[14,464,465,471],{},[228,466,470],{"href":467,"rel":468},"https:\u002F\u002Fmailpit.axllent.org\u002F",[469],"nofollow","Mailpit"," is a mail server for tests: it accepts every\nmessage and shows it in a web page, delivering nothing. With it you can build and check an\nemail flow without sending real mail.",[123,473,475],{"id":474},"docker-compose","Docker Compose",[14,477,478],{},"Start Mailpit on the development stack's network, so the workers reach it by name:",[480,481,486],"pre",{"className":482,"code":483,"language":484,"meta":485,"style":485},"language-bash shiki shiki-themes github-dark-dimmed github-light","docker run -d --name mailpit --network dataprep-network -p 8025:8025 axllent\u002Fmailpit\n","bash","",[149,487,488],{"__ignoreMap":485},[489,490,493,497,501,505,508,511,514,517,520,523],"span",{"class":491,"line":492},"line",1,[489,494,496],{"class":495},"sqRhv","docker",[489,498,500],{"class":499},"sXfbr"," run",[489,502,504],{"class":503},"swcJU"," -d",[489,506,507],{"class":503}," --name",[489,509,510],{"class":499}," mailpit",[489,512,513],{"class":503}," --network",[489,515,516],{"class":499}," dataprep-network",[489,518,519],{"class":503}," -p",[489,521,522],{"class":499}," 8025:8025",[489,524,525],{"class":499}," axllent\u002Fmailpit\n",[14,527,528,529,531],{},"Then, in a folder where you have CONNECT, ",[18,530,55],{},":",[28,533,534,543],{},[31,535,536],{},[34,537,538,540],{},[37,539,135],{},[37,541,542],{},"Value",[42,544,545,555,562,572,582,589,598,604],{},[34,546,547,550],{},[47,548,549],{},"Name",[47,551,552],{},[149,553,554],{},"Mailpit (test)",[34,556,557,560],{},[47,558,559],{},"Connection type",[47,561,59],{},[34,563,564,567],{},[47,565,566],{},"SMTP server",[47,568,569],{},[149,570,571],{},"mailpit",[34,573,574,577],{},[47,575,576],{},"Port",[47,578,579],{},[149,580,581],{},"1025",[34,583,584,586],{},[47,585,160],{},[47,587,588],{},"empty",[34,590,591,593],{},[47,592,168],{},[47,594,595],{},[149,596,597],{},"tabularia@example.com",[34,599,600,602],{},[47,601,88],{},[47,603,101],{},[34,605,606,608],{},[47,607,212],{},[47,609,610],{},[149,611,270],{},[14,613,614,616,617,191],{},[18,615,236],{}," says ",[618,619,620],"em",{},"Connection works",[14,622,623],{},[624,625],"img",{"alt":626,"src":627},"The SMTP connection Mailpit (test): server mailpit, port 1025, no credentials, sender tabularia@example.com, encryption none, allowed domain example.com, and Connection works","\u002Fmedia\u002Fguide\u002Fconnections\u002Fsmtp-connection-mailpit.png",[14,629,630],{},[618,631,632,633,635],{},"The Mailpit connection of this example after ",[18,634,236],{},". On a real server keep STARTTLS or SSL\u002FTLS.",[14,637,638,639,642,643,646,647,649,650,653,654,657,658,661,662,665,666,670,671,674,675,678],{},"Open the sample flow ",[18,640,641],{},"Top 20 Products by\nRevenue",", add an Output node after the last step with destination ",[18,644,645],{},"Email with\nattachment",", the connection ",[149,648,554],{},", recipients ",[149,651,652],{},"sales@example.com",", subject\n",[149,655,656],{},"Top 20 products {today:dd\u002FMM\u002Fyyyy}",", attachment name ",[149,659,660],{},"top20_{date}",", format Excel. Run the\nflow: the email, with ",[149,663,664],{},"top20_2026-10-27.xlsx"," attached, is at ",[228,667,668],{"href":668,"rel":669},"http:\u002F\u002Flocalhost:8025",[469],".\nChange a recipient to ",[149,672,673],{},"someone@example.net"," and run again: the run is refused before it\nstarts, because ",[149,676,677],{},"example.net"," is not an allowed domain.",[14,680,681,682,191],{},"Remove it with ",[149,683,684],{},"docker rm -f mailpit",[123,686,688],{"id":687},"kubernetes","Kubernetes",[14,690,691,692,695],{},"Run Mailpit in Tabularia's namespace (here ",[149,693,694],{},"tabularia","): the chart's egress policy always\nlets the workers reach pods of their own namespace.",[480,697,699],{"className":482,"code":698,"language":484,"meta":485,"style":485},"kubectl -n tabularia create deployment mailpit --image=axllent\u002Fmailpit --port=1025\nkubectl -n tabularia expose deployment mailpit --port=1025 --target-port=1025\nkubectl -n tabularia port-forward deployment\u002Fmailpit 8025:8025\n",[149,700,701,726,748],{"__ignoreMap":485},[489,702,703,706,709,712,715,718,720,723],{"class":491,"line":492},[489,704,705],{"class":495},"kubectl",[489,707,708],{"class":503}," -n",[489,710,711],{"class":499}," tabularia",[489,713,714],{"class":499}," create",[489,716,717],{"class":499}," deployment",[489,719,510],{"class":499},[489,721,722],{"class":503}," --image=axllent\u002Fmailpit",[489,724,725],{"class":503}," --port=1025\n",[489,727,729,731,733,735,738,740,742,745],{"class":491,"line":728},2,[489,730,705],{"class":495},[489,732,708],{"class":503},[489,734,711],{"class":499},[489,736,737],{"class":499}," expose",[489,739,717],{"class":499},[489,741,510],{"class":499},[489,743,744],{"class":503}," --port=1025",[489,746,747],{"class":503}," --target-port=1025\n",[489,749,751,753,755,757,760,763],{"class":491,"line":750},3,[489,752,705],{"class":495},[489,754,708],{"class":503},[489,756,711],{"class":499},[489,758,759],{"class":499}," port-forward",[489,761,762],{"class":499}," deployment\u002Fmailpit",[489,764,765],{"class":499}," 8025:8025\n",[14,767,768,769,771,772,774,775,778,779,191],{},"The connection is the same as above with SMTP server ",[149,770,571],{}," (the Service's name) and\nport ",[149,773,581],{},"; the messages are at ",[228,776,668],{"href":668,"rel":777},[469]," while the port-forward runs.\nRemove it with ",[149,780,781],{},"kubectl -n tabularia delete deployment,service mailpit",[23,783,114],{"id":784},"permissions",[28,786,787,797],{},[31,788,789],{},[34,790,791,794],{},[37,792,793],{},"To",[37,795,796],{},"You need",[42,798,799,807,815,823],{},[34,800,801,804],{},[47,802,803],{},"create, test or edit the connection, its allowed domains included",[47,805,806],{},"CONNECT on its folder",[34,808,809,812],{},[47,810,811],{},"run a flow with an email Output",[47,813,814],{},"RUN on the flow and CONNECT on the connection's folder",[34,816,817,820],{},[47,818,819],{},"set up a Pushmail cell, or run its group",[47,821,822],{},"CONNECT on the connection's folder and VIEW on the datasources it attaches",[34,824,825,828],{},[47,826,827],{},"set «Tell me if it fails» on a schedule, or the notifications of a contract",[47,829,830],{},"CONNECT on the connection's folder",[23,832,834],{"id":833},"limits-and-good-to-know","Limits and good to know",[245,836,837,843,846,849,852,855],{},[248,838,839,842],{},[18,840,841],{},"15 MB per email."," An attachment (or the files of a Pushmail cell together) over 15 MB\nstops before sending, with a message suggesting a filter, a limit or CSV. Mail servers\noften refuse 10–25 MB, and base64 makes attachments a third larger.",[248,844,845],{},"An Excel attachment holds at most 1,048,575 rows, the format's limit: more fails the\nsend, suggesting CSV.",[248,847,848],{},"A server that does not answer is given up after 30 seconds.",[248,850,851],{},"With username and password empty, Tabularia does not sign in. A server that requires\nauthentication then refuses the message.",[248,853,854],{},"The allowed domains are checked when a notice's addresses are saved, not when the notice\nis sent: narrowing the domains later does not change notices saved before. Save the\nschedule or the contract again to check them.",[248,856,857,858,297],{},"The workers reach the mail server: on Kubernetes with the network policy, its address\nmust be allowed (",[228,859,861],{"href":860},"\u002Fdocs\u002Fconnections#network","Network",[23,863,865],{"id":864},"related","Related",[245,867,868,877,885],{},[248,869,870,94,874],{},[228,871,873],{"href":872},"\u002Fdocs\u002Fconnections","Connections",[228,875,432],{"href":876},"\u002Fdocs\u002Fconnections\u002Fdestinations",[248,878,879,94,881],{},[228,880,74],{"href":445},[228,882,884],{"href":883},"\u002Fdocs\u002Fcapabilities\u002Fflow-groups","Flow groups",[248,886,887,94,890],{},[228,888,889],{"href":422},"Placeholders",[228,891,231],{"href":230},[893,894,895],"style",{},"html pre.shiki code .sqRhv, html code.shiki .sqRhv{--shiki-default:#F69D50;--shiki-light:#6F42C1}html pre.shiki code .sXfbr, html code.shiki .sXfbr{--shiki-default:#96D0FF;--shiki-light:#032F62}html pre.shiki code .swcJU, html code.shiki .swcJU{--shiki-default:#6CB6FF;--shiki-light:#005CC5}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 .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);}",{"title":485,"searchDepth":728,"depth":750,"links":897},[898,899,904,908,909,910],{"id":25,"depth":728,"text":26},{"id":120,"depth":728,"text":121,"children":900},[901,902,903],{"id":125,"depth":750,"text":126},{"id":240,"depth":750,"text":212},{"id":372,"depth":750,"text":373},{"id":461,"depth":728,"text":462,"children":905},[906,907],{"id":474,"depth":750,"text":475},{"id":687,"depth":750,"text":688},{"id":784,"depth":728,"text":114},{"id":833,"depth":728,"text":834},{"id":864,"depth":728,"text":865},"An SMTP connection is the mail server Tabularia sends email through: a flow's result as\nan attachment, the datasources of a flow group as Excel files, the notice that a\nscheduled flow failed, the notice that a data contract changed state. It names the\nserver, the account and the sender, and — the part that matters most — the allowed\ndomains, the only limit on whom the connection can write to.","md",{"source":914},"docs\u002Fconnections\u002Fsmtp.md",true,"\u002Fdocs\u002Fconnections\u002Fsmtp",{"title":5,"description":911},"docs\u002Fconnections\u002Fsmtp","H5ucSD4SYzigJxyP5vF-gaDxbCHJ9rosFImafa202pM",[921,940,993,1025,1052,1081,1106,1131],{"title":922,"icon":923,"intro":924,"items":925},"Getting started","start","Install it on one machine, learn the few ideas everything else is built on, and run a first flow.",[926,928,931,934,937],{"path":927,"title":922},"\u002Fdocs\u002Fgetting-started",{"path":929,"title":930},"\u002Fdocs\u002Fgetting-started-docker-compose","Walkthrough with Docker Compose",{"path":932,"title":933},"\u002Fdocs\u002Fdeploy\u002Fminikube","Try it on your computer (minikube)",{"path":935,"title":936},"\u002Fdocs\u002Fconcepts","Concepts",{"path":938,"title":939},"\u002Fdocs\u002Foverview","Overview (README)",{"title":941,"icon":942,"intro":943,"items":944},"Capabilities","capabilities","What you can build: visual flows, analysis on any step, AI questions, pixel-perfect reports, dashboards, Python, R and SQL scripts, containers and the orchestration that ties them together.",[945,948,951,954,957,960,963,966,969,972,975,978,980,983,985,987,990],{"path":946,"title":947},"\u002Fdocs\u002Fcapabilities","All capabilities",{"path":949,"title":950},"\u002Fdocs\u002Fcapabilities\u002Fflows","Low-code flows",{"path":952,"title":953},"\u002Fdocs\u002Fcapabilities\u002Fpreview-and-analysis","Preview and analysis",{"path":955,"title":956},"\u002Fdocs\u002Fcapabilities\u002Fask-your-data","Ask your data with AI",{"path":958,"title":959},"\u002Fdocs\u002Fcapabilities\u002Freports","Pixel-perfect reports",{"path":961,"title":962},"\u002Fdocs\u002Fcapabilities\u002Freport-functions","Report functions",{"path":964,"title":965},"\u002Fdocs\u002Fcapabilities\u002Fdashboards","Dashboards",{"path":967,"title":968},"\u002Fdocs\u002Fscripting","Python and R",{"path":970,"title":971},"\u002Fdocs\u002Fsql-scripts","SQL scripts",{"path":973,"title":974},"\u002Fdocs\u002Fcapabilities\u002Fnotebooks","marimo notebooks as apps",{"path":976,"title":977},"\u002Fdocs\u002Fcontainer-node","Docker images in flows",{"path":883,"title":979},"Flow groups: orchestration",{"path":981,"title":982},"\u002Fdocs\u002Fcapabilities\u002Fscheduling","Scheduling",{"path":445,"title":984},"Pushmail: datasources, reports and dashboards by email",{"path":422,"title":986},"Dynamic dates",{"path":988,"title":989},"\u002Fdocs\u002Fcapabilities\u002Fengines","Engines",{"path":991,"title":992},"\u002Fdocs\u002Fengines\u002Fengine-differences","Engine differences",{"title":994,"icon":995,"intro":996,"items":997},"Sources","sources","Every way data comes in: files, databases, buckets, SFTP folders, HTTP APIs, SharePoint, Google Sheets, and the results of your own flows.",[998,1001,1004,1007,1010,1013,1016,1019,1022],{"path":999,"title":1000},"\u002Fdocs\u002Fsources","All sources",{"path":1002,"title":1003},"\u002Fdocs\u002Fsources\u002Ffiles","Uploaded files",{"path":1005,"title":1006},"\u002Fdocs\u002Fsources\u002Fdatabases","Database tables and queries",{"path":1008,"title":1009},"\u002Fdocs\u002Fs3-datasource","S3 buckets",{"path":1011,"title":1012},"\u002Fdocs\u002Fsftp","SFTP folders",{"path":1014,"title":1015},"\u002Fdocs\u002Fapi-datasource","HTTP APIs",{"path":1017,"title":1018},"\u002Fdocs\u002Fsources\u002Fsharepoint","Excel on SharePoint",{"path":1020,"title":1021},"\u002Fdocs\u002Fsources\u002Fgoogle-sheets","Google Sheets",{"path":1023,"title":1024},"\u002Fdocs\u002Fsources\u002Fflow-outputs","Results of flows and scripts",{"title":873,"icon":1026,"intro":1027,"items":1028},"connections","The systems Tabularia reads from and writes to, how each connection is set up, and who may use it.",[1029,1031,1034,1037,1040,1042,1043,1045,1046,1048,1051],{"path":872,"title":1030},"All connections",{"path":1032,"title":1033},"\u002Fdocs\u002Fconnections\u002Fdatabases","Databases",{"path":1035,"title":1036},"\u002Fdocs\u002Fsqlserver","Microsoft SQL Server driver",{"path":1038,"title":1039},"\u002Fdocs\u002Fconnections\u002Fs3","S3 and compatible storage",{"path":1011,"title":1041},"SFTP servers",{"path":1014,"title":1015},{"path":1017,"title":1044},"SharePoint",{"path":1020,"title":1021},{"path":916,"title":1047},"SMTP email",{"path":1049,"title":1050},"\u002Fdocs\u002Fcontainer-registries","Container registries",{"path":876,"title":432},{"title":1053,"icon":1054,"intro":1055,"items":1056},"Integrations","integrations","How Tabularia fits your stack: AI providers, the REST API and webhooks, dbt, OpenLineage, single sign-on, SIEM and monitoring.",[1057,1060,1063,1066,1069,1072,1075,1078],{"path":1058,"title":1059},"\u002Fdocs\u002Fintegrations","All integrations",{"path":1061,"title":1062},"\u002Fdocs\u002Fintegrations\u002Fai","AI: where it is used",{"path":1064,"title":1065},"\u002Fdocs\u002Fapi","API, tokens and webhooks",{"path":1067,"title":1068},"\u002Fdocs\u002Fdbt-export","Export to dbt",{"path":1070,"title":1071},"\u002Fdocs\u002Fopenlineage","OpenLineage",{"path":1073,"title":1074},"\u002Fdocs\u002Fsso-keycloak","Single sign-on with Keycloak",{"path":1076,"title":1077},"\u002Fdocs\u002Fsiem-splunk","Audit log to Splunk",{"path":1079,"title":1080},"\u002Fdocs\u002Fintegrations\u002Fmonitoring","Monitoring",{"title":1082,"icon":1083,"intro":1084,"items":1085},"Security & governance","governance","Who may see and do what, what is recorded, and how data quality and personal data are kept in check.",[1086,1089,1091,1094,1097,1100,1103],{"path":1087,"title":1088},"\u002Fdocs\u002Fgovernance","Overview",{"path":1090,"title":114},"\u002Fdocs\u002Fgovernance\u002Fpermissions",{"path":1092,"title":1093},"\u002Fdocs\u002Fgovernance\u002Faudit-log","Audit log",{"path":1095,"title":1096},"\u002Fdocs\u002Fgovernance\u002Fdata-contracts","Data contracts",{"path":1098,"title":1099},"\u002Fdocs\u002Fdesign\u002Fsso-group-mapping","SSO and group mapping",{"path":1101,"title":1102},"\u002Fdocs\u002Fexamples\u002Fkeycloak","Keycloak example on a laptop",{"path":1104,"title":1105},"\u002Fdocs\u002Fengines\u002Fclickhouse-ai-user","A ClickHouse user for the AI assistant",{"title":1107,"icon":1108,"intro":1109,"items":1110},"Install & operate","operate","Run it in production on Kubernetes, configure it, upgrade it and keep it healthy.",[1111,1114,1117,1120,1123,1125,1128],{"path":1112,"title":1113},"\u002Fdocs\u002Fdeploy\u002Fkubernetes","Kubernetes and Helm",{"path":1115,"title":1116},"\u002Fdocs\u002Fdeploy\u002Fkind","A company-like cluster on one computer (kind)",{"path":1118,"title":1119},"\u002Fdocs\u002Fdeploy\u002Fupgrading","Upgrading, backups and restore",{"path":1121,"title":1122},"\u002Fdocs\u002Fdeploy\u002Frelease-checklist","Install and upgrade checklist",{"path":230,"title":1124},"Configuration reference",{"path":1126,"title":1127},"\u002Fdocs\u002Fengine-settings","Settings from the panel",{"path":1129,"title":1130},"\u002Fdocs\u002Fdatabase-migrations","Database migrations",{"title":1132,"icon":1133,"intro":1134,"items":1135},"Reference","reference","Release process and the remaining reference pages.",[1136],{"path":1137,"title":1138},"\u002Fdocs\u002Frelease-process","Release process",1793656371984]