[{"data":1,"prerenderedAt":977},["ShallowReactive",2],{"doc:\u002Fdocs\u002Fpushmail":3,"docs-nav":756},{"id":4,"title":5,"body":6,"description":16,"extension":748,"meta":749,"navigation":751,"path":752,"seo":753,"stem":754,"__hash__":755},"docs\u002Fdocs\u002Fpushmail.md","Pushmail: datasources, reports and dashboards by email from a flow group",{"type":7,"value":8,"toc":736},"minimark",[9,13,17,48,53,81,87,91,248,251,282,289,300,306,316,322,325,336,409,416,422,429,447,450,460,503,512,523,527,535,590,594,597,600,603,617,621,633,695,701,706,710,717],[10,11,5],"h1",{"id":12},"pushmail-datasources-reports-and-dashboards-by-email-from-a-flow-group",[14,15,16],"p",{},"For whoever sets up flow groups that send data to people.",[14,18,19,20,24,25,30,31,39,40,43,44,47],{},"A ",[21,22,23],"strong",{},"Pushmail"," cell of a ",[26,27,29],"a",{"href":28},"\u002Fdocs\u002Fcapabilities\u002Fflow-groups","flow group"," sends one email through an SMTP connection, with\n",[21,32,33,34,38],{},"one ",[35,36,37],"code",{},".xlsx"," file per datasource",", ",[21,41,42],{},"one PDF or Excel file per report"," and ",[21,45,46],{},"one PDF or\nimage per dashboard",", and can put a report's summary in the message itself. It runs as a step of the group like any other\ncell: after the steps before it (a refresh, the flows that publish the datasources), on\nthe group's schedule, and its failure stops the group. It is the only way a report or a dashboard is\nsent by email: neither has a schedule of its own, so it leaves right after the data it\nshows is refreshed.",[49,50,52],"h2",{"id":51},"before-you-start","Before you start",[54,55,56,68,75],"ul",{},[57,58,59,60,63,64,67],"li",{},"An SMTP connection exists and you have ",[21,61,62],{},"CONNECT"," on its folder (the same right the\nemail of an Output node needs). Its ",[21,65,66],{},"allowed domains"," limit who may receive the email.",[57,69,70,71,74],{},"You can read the datasources you attach (",[21,72,73],{},"VIEW"," on their folders).",[57,76,77,78,80],{},"For a report or a dashboard: ",[21,79,73],{}," on its folder, and the right to read every dataset it reads.",[14,82,83,84,86],{},"The group's catalog offers ",[21,85,23],{}," when at least\none SMTP connection is available to you; so does the picker of an empty cell.",[49,88,90],{"id":89},"the-cell","The cell",[92,93,94,106],"table",{},[95,96,97],"thead",{},[98,99,100,104],"tr",{},[101,102,103],"th",{},"Field",[101,105],{},[107,108,109,120,130,143,161,171,192,225],"tbody",{},[98,110,111,117],{},[112,113,114],"td",{},[21,115,116],{},"Name",[112,118,119],{},"what the cell shows in the grid",[98,121,122,127],{},[112,123,124],{},[21,125,126],{},"SMTP connection",[112,128,129],{},"one you may send through",[98,131,132,140],{},[112,133,134,39,137],{},[21,135,136],{},"To",[21,138,139],{},"Cc",[112,141,142],{},"addresses separated by commas; at least one in To",[98,144,145,150],{},[112,146,147],{},[21,148,149],{},"Subject",[112,151,152,153,156,157,160],{},"text with the date placeholders, ",[35,154,155],{},"Sales {today:yyyy-MM-dd}","; ",[35,158,159],{},"{flow}"," is the group's name",[98,162,163,168],{},[112,164,165],{},[21,166,167],{},"Message",[112,169,170],{},"plain text, or HTML when ticked (sent with a plain-text alternative)",[98,172,173,178],{},[112,174,175],{},[21,176,177],{},"Datasources",[112,179,180,181,184,185,187,188,191],{},"one file each, up to 20: the datasource, the ",[21,182,183],{},"file name"," (a template, ",[35,186,37],{}," added) and the ",[21,189,190],{},"rows at most"," (1 to 1,000,000; 10,000 by default)",[98,193,194,199],{},[112,195,196],{},[21,197,198],{},"Reports",[112,200,201,202,205,206,209,210,212,213,216,217,220,221,224],{},"one file each, up to 5: the report, ",[21,203,204],{},"PDF"," or ",[21,207,208],{},"Excel",", the ",[21,211,183],{}," (a template, the extension added), the values of its ",[21,214,215],{},"parameters",", and ",[21,218,219],{},"Summary in the email body"," (see ",[26,222,198],{"href":223},"#reports",")",[98,226,227,232],{},[112,228,229],{},[21,230,231],{},"Dashboards",[112,233,234,235,205,237,209,240,242,243,220,245,224],{},"one file each, up to 5: the dashboard, ",[21,236,204],{},[21,238,239],{},"Image",[21,241,183],{},", the values of its ",[21,244,215],{},[26,246,231],{"href":247},"#dashboards",[14,249,250],{},"A cell needs at least one datasource, one report or one dashboard: a cell with dashboards only is fine.",[14,252,253,254,258,259,262,263,39,266,39,269,39,272,156,274,277,278,281],{},"The placeholders are those of the Outputs (",[26,255,257],{"href":256},"\u002Fdocs\u002Fplaceholders","placeholders","): ",[35,260,261],{},"{today}",",\n",[35,264,265],{},"{today-1:yyyyMMdd}",[35,267,268],{},"{now:HHmm}",[35,270,271],{},"{run_id}",[35,273,159],{},[35,275,276],{},"{today:MMMM yyyy}"," writes the\nmonth's name in the language of whoever runs the group (",[35,279,280],{},"ottobre 2026","). The panel shows\nwhat each name gives now.",[14,283,284],{},[285,286],"img",{"alt":287,"src":288},"The Pushmail cell settings: name Morning sales report, SMTP connection, To sales-team@example.com, subject Sales {today:yyyy-MM-dd}, a message, two datasources with their file names and row caps","\u002Fmedia\u002Fguide\u002Fpushmail\u002Fpushmail-cell.png",[14,290,291],{},[292,293,294,295,299],"em",{},"The cell of the ",[26,296,298],{"href":297},"\u002Fdocs\u002Fcapabilities\u002Fflow-groups#example-the-morning-sales-email","morning sales example",": two datasources, each with its file name; under each name, what it gives today.",[14,301,302,305],{},[21,303,304],{},"Rows at most."," A datasource with more rows sends its first ones, and the email says\nso at the end of the message, in the language of whoever runs the group:",[307,308,313],"pre",{"className":309,"code":311,"language":312},[310],"language-text","Not every row is attached:\nsales: the first 10,000 rows of 48,210.\n","text",[35,314,311],{"__ignoreMap":315},"",[14,317,318,321],{},[21,319,320],{},"Size."," With more than one datasource, or one sending more than 50,000 rows, the panel\nwarns that the email may be large. Every SMTP relay limits the size of a message (often\n10–25 MB, attachments included, and base64 makes them a third larger): ask the\nadministrators what yours allows. Tabularia never sends more than 15 MB of files in one\nemail: over it the cell fails, saying so, and nothing is sent.",[49,323,198],{"id":324},"reports",[14,326,19,327,331,332,335],{},[26,328,330],{"href":329},"\u002Fdocs\u002Fcapabilities\u002Freports","report"," in the cell is rendered when the email leaves, by\nthe worker that writes it, from the report's ",[21,333,334],{},"current version",": a change saved in the\ndesigner goes out with the next email.",[54,337,338,350,384,395],{},[57,339,340,343,344,346,347,349],{},[21,341,342],{},"Format."," ",[21,345,204],{}," is the report as designed, page by page; ",[21,348,208],{}," has its tables,\ngroups and subtotals as rows, one sheet per table, and a sheet with the parameters.",[57,351,352,355,356,359,360,363,364,367,368,371,372,375,376,379,380,383],{},[21,353,354],{},"Parameters."," The panel shows the report's parameters as its form does, two to a line:\na list for those with choices, a text field for the others. A value left empty takes\nthe report's default ",[21,357,358],{},"when the email leaves"," (",[35,361,362],{},"{today-30}"," is thirty days before the\nsend, not before the save). A date may also be a ",[26,365,366],{"href":256},"placeholder",",\nresolved then, in the report's time zone: ",[35,369,370],{},"{start_of_month-1m}"," is the first day of\nlast month, ",[35,373,374],{},"{today-1}"," yesterday. ",[35,377,378],{},"{none}"," in a text field gives an optional parameter\nno value, whatever its default. A parameter marked ",[35,381,382],{},"*"," needs a value, given here or by\nthe report's default.",[57,385,386,389,390,394],{},[21,387,388],{},"Summary in the email body."," One report per cell can put its summary in the message,\nunder the cell's text: its texts, its KPIs, its charts as images, and every table and\nmatrix as its totals (see ",[26,391,393],{"href":392},"\u002Fdocs\u002Fcapabilities\u002Freports#pdf-excel-and-the-email","the email","),\nin an HTML message 640 pixels wide that Outlook and Gmail draw, with the same summary\nas plain text for a mail client that shows no HTML. The detail stays in the attached\nfile. With a plain-text message, the text goes on top; with an HTML one, the summary\ngoes at the end of its body.",[57,396,397,400,401,404,405,408],{},[21,398,399],{},"Limits."," A report reads at most ",[35,402,403],{},"REPORTS__MAX_ROWS"," rows per dataset (3,000,000\nby default) and renders at most ",[35,406,407],{},"REPORTS__MAX_PAGES"," pages: past them the cell fails,\nnaming the report and the dataset, and nothing is sent. The files of the reports count\ntowards the 15 MB of an email.",[14,410,411,412,415],{},"The rights are those of every schedule: the report reads with the rights of ",[21,413,414],{},"whoever\nruns the group"," (the author of the schedule, for a scheduled run), never the report's\nauthor's. A dataset they may not read stops the cell with its name, before anything is\nsent:",[307,417,420],{"className":418,"code":419,"language":312},[310],"«Morning sales report»: the report «Monthly sales»: The dataset «orders»: there is no datasource «Salaries» you can read\n",[35,421,419],{"__ignoreMap":315},[14,423,424,425,428],{},"A report that a flow group sends cannot be deleted: the delete says which groups send\nit (",[35,426,427],{},"409","). Take it out of their Pushmail cells first.",[14,430,431,432,435,436,439,440,442,443,446],{},"Because a scheduled group sends with its author's rights, someone else who changes what\nthe report ",[21,433,434],{},"reads"," — a dataset added, or one that reads other SQL, another datasource,\nview or filters (a SQL script or a saved view it reads changed by someone else too), a new\ndefault for a parameter the cell gives no value of its own (",[35,437,438],{},"{today-3650}"," where it was\n",[35,441,362],{},") — switches the schedules of the groups that send it off, as a change to a\nSQL script does: the author's rights are not spent on another person's choice. The Audit\npage records it (",[35,444,445],{},"flow_group.schedule",", with the reason); the author schedules the group\nagain after looking. A change of the layout alone, or one by the schedule's own author,\nkeeps it.",[49,448,231],{"id":449},"dashboards",[14,451,19,452,456,457,459],{},[26,453,455],{"href":454},"\u002Fdocs\u002Fcapabilities\u002Fdashboards","dashboard"," in the cell is made into a file when the email\nleaves, by the worker that writes it, from the dashboard's ",[21,458,334],{},".",[54,461,462,476,484,490],{},[57,463,464,343,466,468,469,471,472,475],{},[21,465,342],{},[21,467,204],{}," is the document the viewer's PDF button gives, its tables over as many\npages as they need. ",[21,470,239],{}," is the same on one long page, PNG; past\n",[35,473,474],{},"REPORTS__RENDER_MEMORY_MB"," it stops the cell, saying so: choose the PDF. They count in the\n15 MB of files of one email.",[57,477,478,480,481,483],{},[21,479,354],{}," As a report's: the panel shows the form, a value left empty is the\ndashboard's default when the email leaves, a date may be a ",[26,482,366],{"href":256},".\nA click is not something a cell chooses: to send one area, give it the parameter.",[57,485,486,489],{},[21,487,488],{},"It reads the source."," Not what the screen keeps: what the steps before it refreshed is\nwhat the email says.",[57,491,492,495,496,499,500,459],{},[21,493,494],{},"Nobody looks at it before it leaves."," On a screen a tile that cannot say its numbers says\nso and the others work; here a dataset the group's author may not read, a dataset past\n",[35,497,498],{},"DASHBOARDS__MAX_ROWS"," or any tile with an error ",[21,501,502],{},"stops the cell, with its name, and nothing is\nsent",[14,504,505,506,508,509,511],{},"The rules of a schedule are a report's. A dashboard that a flow group sends cannot be deleted:\nthe delete says which groups send it (",[35,507,427],{},"). Someone else who changes what the dashboard\n",[21,510,434],{}," (a dataset that reads something else, a SQL script or a saved view it reads, a new\ndefault for a parameter the cell gives no value) switches the schedules of the groups that send\nit off, and the audit log says why; a change of its tiles or their places keeps them.",[14,513,514,515,518,519,522],{},"Every dashboard the cell carries is a ",[35,516,517],{},"dashboard.render"," in the audit log, from ",[35,520,521],{},"flow_group",",\nwith its format and its parameters.",[49,524,526],{"id":525},"ai-comments","AI comments",[14,528,529,530,534],{},"A report or a dashboard with an ",[26,531,533],{"href":532},"\u002Fdocs\u002Fcapabilities\u002Freports#ai-comments","AI comment"," carries it in the\nemail: in the attached PDF or image, and in the summary in the body.",[54,536,537,543,557,575,581,587],{},[57,538,539,542],{},[21,540,541],{},"On the numbers it sends."," The comment and the file read the same rows, once from the source,\nwhen the email leaves.",[57,544,545,548,549,552,553,556],{},[21,546,547],{},"On the bill of whoever runs the group",", the author of its schedule for a scheduled run,\nunder the daily ceilings, as ",[35,550,551],{},"ai.comment"," in the audit log. The same numbers every ten minutes are one call,\nfor a day (",[35,554,555],{},"AI__COMMENT_KEEP_SECONDS",").",[57,558,559,562,563,566,567,570,571,574],{},[21,560,561],{},"A comment never stops the cell."," The cell waits for it at most ",[35,564,565],{},"AI__COMMENT_WAIT_SECONDS",",\nholding no database connection. With the provider down, a wrong key, a ceiling reached or\n",[35,568,569],{},"AI__METADATA_ONLY"," on, ",[21,572,573],{},"the email goes out",", with one line in its place. A tile in error\nstops it; a comment does not.",[57,576,577,580],{},[21,578,579],{},"It is written by the orchestrator",", where the group runs, not by the gateway: its network must reach the\nprovider, as it must a webhook's receiver. Where it cannot, the comment is not available.",[57,582,583,586],{},[21,584,585],{},"A report as Excel"," has no place for one, and asks nothing: with its summary in the body, the\nsummary has the comment and the workbook does not.",[57,588,589],{},"Someone else who adds an AI comment to what the cell sends, or changes what one reads or is asked,\nswitches the schedules off, as for what it reads: it spends the author's budget.",[49,591,593],{"id":592},"what-is-checked-and-when","What is checked, and when",[14,595,596],{},"When the group is saved, a Pushmail cell that is new or changed is checked with the\nrights of whoever saves it: the connection is SMTP and they have CONNECT on it, every\naddress is an address and within the connection's allowed domains, every datasource\nexists and they can read it, none twice; every report exists and they can see it, its\nvalues fit its parameters, and they may read every dataset it reads; the same for every\ndashboard. A report or a dashboard in a folder they cannot see is «not found», as a datasource.",[14,598,599],{},"When the group runs, all of it is checked again with the rights of whoever runs it (the\nauthor of the schedule, for a scheduled run), and a scheduled group whose author lost a\nright does not start at all. A datasource with no data yet (never imported or published)\nfails the cell before anything is sent; so does a report or a dashboard whose values no\nlonger fit, or whose data they may no longer read.",[14,601,602],{},"A change to a Pushmail cell made by someone other than the author of the group's\nschedule switches the schedule off, as for any cell added by someone else: the schedule\nwould otherwise send data to recipients its author never chose.",[14,604,605,606,609,610,613,614,616],{},"Every email is written to the audit log (",[35,607,608],{},"email.send",") when it leaves: who, through\nwhich connection, to whom, which datasources, reports and dashboards. Every report it carries is a\n",[35,611,612],{},"report.render"," too, from ",[35,615,521],{},", with its format, its parameters' values, the\ngroup and the cell's run, and the outcome.",[49,618,620],{"id":619},"example-the-morning-sales-email","Example: the morning sales email",[14,622,623,624,627,628,632],{},"The ",[26,625,626],{"href":297},"flow group example","\nends with this cell. Tried with ",[26,629,631],{"href":630},"\u002Fdocs\u002Fconnections\u002Fsmtp#example-try-it-locally-with-mailpit","Mailpit","\nas the SMTP connection:",[634,635,636,646,663,679],"ol",{},[57,637,638,639,642,643,459],{},"In the group, ",[21,640,641],{},"Add step",", then in its first cell choose ",[21,644,645],{},"Pushmail (datasources by\nemail)",[57,647,648,649,652,653,656,657,659,660,459],{},"Name ",[35,650,651],{},"Morning sales report",", the SMTP connection, To ",[35,654,655],{},"sales-team@example.com",",\nSubject ",[35,658,155],{},", the message «Good morning, attached are\nyesterday's top products and the revenue by channel.», time zone ",[35,661,662],{},"Europe\u002FRome",[57,664,665,667,668,671,672,675,676,678],{},[21,666,177],{},": «Top 20 Products by Revenue» as ",[35,669,670],{},"top_products_{today:yyyyMMdd}",", and\n",[35,673,674],{},"revenue_by_channel"," as ",[35,677,674],{},", 10,000 rows at most each.",[57,680,681,39,684,687,688,691,692,459],{},[21,682,683],{},"Save",[21,685,686],{},"Run now",". When the cell turns green, the email is in Mailpit: subject\n«Sales 2026-10-28», from the connection's sender, with ",[35,689,690],{},"top_products_20261028.xlsx","\nand ",[35,693,694],{},"revenue_by_channel.xlsx",[14,696,697],{},[285,698],{"alt":699,"src":700},"The email in Mailpit: from Tabularia Reports, to sales-team@example.com, subject Sales 2026-10-28, the message and two .xlsx attachments","\u002Fmedia\u002Fguide\u002Fpushmail\u002Fpushmail-email-mailpit.png",[14,702,703],{},[292,704,705],{},"What the recipients get: the message as written, one Excel file per datasource.",[49,707,709],{"id":708},"the-run","The run",[14,711,712,713,716],{},"Each send is a run of its own under the group's run (",[35,714,715],{},"pushmail","), with the outcome: the\nrecipients, the subject, the files and their sizes, the reports and their formats, the\nrows sent and the ones cut. The\ncell in the grid shows its state and, when it failed, why (the relay refused the\nmessage, the files were over the size cap, a recipient outside the allowed domains).",[14,718,623,719,722,723,727,728,731,732,735],{},[21,720,721],{},"Lineage"," page draws the cell's email with the datasources it attaches. With\n",[26,724,726],{"href":725},"\u002Fdocs\u002Fopenlineage","OpenLineage"," on, the send is a child job of the group's run, reading\nthe datasources it attaches and those its reports read, and writing the email as a\ndataset ",[35,729,730],{},"smtp:\u002F\u002F\u003Chost>:\u003Cport>"," + ",[35,733,734],{},"\u002F\u003Cfolder>\u002F\u003Cgroup>\u002F\u003Ccell>",": never the recipients'\naddresses.",{"title":315,"searchDepth":737,"depth":738,"links":739},2,3,[740,741,742,743,744,745,746,747],{"id":51,"depth":737,"text":52},{"id":89,"depth":737,"text":90},{"id":324,"depth":737,"text":198},{"id":449,"depth":737,"text":231},{"id":525,"depth":737,"text":526},{"id":592,"depth":737,"text":593},{"id":619,"depth":737,"text":620},{"id":708,"depth":737,"text":709},"md",{"source":750},"docs\u002Fpushmail.md",true,"\u002Fdocs\u002Fpushmail",{"title":5,"description":16},"docs\u002Fpushmail","COQOYYbNB5YMI4PhgC0kRlAGolLLxNumh-5Db4Y2OWM",[757,776,826,858,890,917,943,969],{"title":758,"icon":759,"intro":760,"items":761},"Getting started","start","Install it on one machine, learn the few ideas everything else is built on, and run a first flow.",[762,764,767,770,773],{"path":763,"title":758},"\u002Fdocs\u002Fgetting-started",{"path":765,"title":766},"\u002Fdocs\u002Fgetting-started-docker-compose","Walkthrough with Docker Compose",{"path":768,"title":769},"\u002Fdocs\u002Fdeploy\u002Fminikube","Try it on your computer (minikube)",{"path":771,"title":772},"\u002Fdocs\u002Fconcepts","Concepts",{"path":774,"title":775},"\u002Fdocs\u002Foverview","Overview (README)",{"title":777,"icon":778,"intro":779,"items":780},"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.",[781,784,787,790,793,795,798,799,802,805,808,811,813,816,818,820,823],{"path":782,"title":783},"\u002Fdocs\u002Fcapabilities","All capabilities",{"path":785,"title":786},"\u002Fdocs\u002Fcapabilities\u002Fflows","Low-code flows",{"path":788,"title":789},"\u002Fdocs\u002Fcapabilities\u002Fpreview-and-analysis","Preview and analysis",{"path":791,"title":792},"\u002Fdocs\u002Fcapabilities\u002Fask-your-data","Ask your data with AI",{"path":329,"title":794},"Pixel-perfect reports",{"path":796,"title":797},"\u002Fdocs\u002Fcapabilities\u002Freport-functions","Report functions",{"path":454,"title":231},{"path":800,"title":801},"\u002Fdocs\u002Fscripting","Python and R",{"path":803,"title":804},"\u002Fdocs\u002Fsql-scripts","SQL scripts",{"path":806,"title":807},"\u002Fdocs\u002Fcapabilities\u002Fnotebooks","marimo notebooks as apps",{"path":809,"title":810},"\u002Fdocs\u002Fcontainer-node","Docker images in flows",{"path":28,"title":812},"Flow groups: orchestration",{"path":814,"title":815},"\u002Fdocs\u002Fcapabilities\u002Fscheduling","Scheduling",{"path":752,"title":817},"Pushmail: datasources, reports and dashboards by email",{"path":256,"title":819},"Dynamic dates",{"path":821,"title":822},"\u002Fdocs\u002Fcapabilities\u002Fengines","Engines",{"path":824,"title":825},"\u002Fdocs\u002Fengines\u002Fengine-differences","Engine differences",{"title":827,"icon":828,"intro":829,"items":830},"Sources","sources","Every way data comes in: files, databases, buckets, SFTP folders, HTTP APIs, SharePoint, Google Sheets, and the results of your own flows.",[831,834,837,840,843,846,849,852,855],{"path":832,"title":833},"\u002Fdocs\u002Fsources","All sources",{"path":835,"title":836},"\u002Fdocs\u002Fsources\u002Ffiles","Uploaded files",{"path":838,"title":839},"\u002Fdocs\u002Fsources\u002Fdatabases","Database tables and queries",{"path":841,"title":842},"\u002Fdocs\u002Fs3-datasource","S3 buckets",{"path":844,"title":845},"\u002Fdocs\u002Fsftp","SFTP folders",{"path":847,"title":848},"\u002Fdocs\u002Fapi-datasource","HTTP APIs",{"path":850,"title":851},"\u002Fdocs\u002Fsources\u002Fsharepoint","Excel on SharePoint",{"path":853,"title":854},"\u002Fdocs\u002Fsources\u002Fgoogle-sheets","Google Sheets",{"path":856,"title":857},"\u002Fdocs\u002Fsources\u002Fflow-outputs","Results of flows and scripts",{"title":859,"icon":860,"intro":861,"items":862},"Connections","connections","The systems Tabularia reads from and writes to, how each connection is set up, and who may use it.",[863,866,869,872,875,877,878,880,881,884,887],{"path":864,"title":865},"\u002Fdocs\u002Fconnections","All connections",{"path":867,"title":868},"\u002Fdocs\u002Fconnections\u002Fdatabases","Databases",{"path":870,"title":871},"\u002Fdocs\u002Fsqlserver","Microsoft SQL Server driver",{"path":873,"title":874},"\u002Fdocs\u002Fconnections\u002Fs3","S3 and compatible storage",{"path":844,"title":876},"SFTP servers",{"path":847,"title":848},{"path":850,"title":879},"SharePoint",{"path":853,"title":854},{"path":882,"title":883},"\u002Fdocs\u002Fconnections\u002Fsmtp","SMTP email",{"path":885,"title":886},"\u002Fdocs\u002Fcontainer-registries","Container registries",{"path":888,"title":889},"\u002Fdocs\u002Fconnections\u002Fdestinations","Writing data out",{"title":891,"icon":892,"intro":893,"items":894},"Integrations","integrations","How Tabularia fits your stack: AI providers, the REST API and webhooks, dbt, OpenLineage, single sign-on, SIEM and monitoring.",[895,898,901,904,907,908,911,914],{"path":896,"title":897},"\u002Fdocs\u002Fintegrations","All integrations",{"path":899,"title":900},"\u002Fdocs\u002Fintegrations\u002Fai","AI: where it is used",{"path":902,"title":903},"\u002Fdocs\u002Fapi","API, tokens and webhooks",{"path":905,"title":906},"\u002Fdocs\u002Fdbt-export","Export to dbt",{"path":725,"title":726},{"path":909,"title":910},"\u002Fdocs\u002Fsso-keycloak","Single sign-on with Keycloak",{"path":912,"title":913},"\u002Fdocs\u002Fsiem-splunk","Audit log to Splunk",{"path":915,"title":916},"\u002Fdocs\u002Fintegrations\u002Fmonitoring","Monitoring",{"title":918,"icon":919,"intro":920,"items":921},"Security & governance","governance","Who may see and do what, what is recorded, and how data quality and personal data are kept in check.",[922,925,928,931,934,937,940],{"path":923,"title":924},"\u002Fdocs\u002Fgovernance","Overview",{"path":926,"title":927},"\u002Fdocs\u002Fgovernance\u002Fpermissions","Permissions",{"path":929,"title":930},"\u002Fdocs\u002Fgovernance\u002Faudit-log","Audit log",{"path":932,"title":933},"\u002Fdocs\u002Fgovernance\u002Fdata-contracts","Data contracts",{"path":935,"title":936},"\u002Fdocs\u002Fdesign\u002Fsso-group-mapping","SSO and group mapping",{"path":938,"title":939},"\u002Fdocs\u002Fexamples\u002Fkeycloak","Keycloak example on a laptop",{"path":941,"title":942},"\u002Fdocs\u002Fengines\u002Fclickhouse-ai-user","A ClickHouse user for the AI assistant",{"title":944,"icon":945,"intro":946,"items":947},"Install & operate","operate","Run it in production on Kubernetes, configure it, upgrade it and keep it healthy.",[948,951,954,957,960,963,966],{"path":949,"title":950},"\u002Fdocs\u002Fdeploy\u002Fkubernetes","Kubernetes and Helm",{"path":952,"title":953},"\u002Fdocs\u002Fdeploy\u002Fkind","A company-like cluster on one computer (kind)",{"path":955,"title":956},"\u002Fdocs\u002Fdeploy\u002Fupgrading","Upgrading, backups and restore",{"path":958,"title":959},"\u002Fdocs\u002Fdeploy\u002Frelease-checklist","Install and upgrade checklist",{"path":961,"title":962},"\u002Fdocs\u002Fconfiguration","Configuration reference",{"path":964,"title":965},"\u002Fdocs\u002Fengine-settings","Settings from the panel",{"path":967,"title":968},"\u002Fdocs\u002Fdatabase-migrations","Database migrations",{"title":970,"icon":971,"intro":972,"items":973},"Reference","reference","Release process and the remaining reference pages.",[974],{"path":975,"title":976},"\u002Fdocs\u002Frelease-process","Release process",1793656371728]