-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
34 lines (32 loc) · 34.2 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Remult | Fullstack Type-safe CRUD & Realtime</title>
<meta name="description" content="Build Full-stack, End-to-end Type-safe CRUD Apps without the Boilerplate">
<meta name="generator" content="VitePress v1.2.3">
<link rel="preload stylesheet" href="/assets/style.Capob3RG.css" as="style">
<script type="module" src="/assets/app.pfM-dPjM.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/framework.C7bC4sbb.js">
<link rel="modulepreload" href="/assets/chunks/theme.BtEg1e4K.js">
<link rel="modulepreload" href="/assets/index.md.gJpkrbjX.lean.js">
<link href="/favicon.png" rel="icon" type="image/png">
<link href="/favicon.png" rel="apple-touch-icon" sizes="128x128">
<script async src="https://www.googletagmanager.com/gtag/js?id=G-RBX0REXJT3"></script>
<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-RBX0REXJT3");</script>
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
<meta property="og:type" content="website">
<meta property="og:title" content="Remult">
<meta property="og:image" content="https://remult.dev/logo_sm.png">
<meta property="og:url" content="https://remult.dev/">
<meta property="og:description" content="Fullstack Type-safe CRUD & Realtime library">
<meta name="twitter:card" content="summary_large_image">
</head>
<body>
<div id="app"><div class="Layout" data-v-d8b57b2d><!--[--><!--]--><!--[--><span tabindex="-1" data-v-c8291ffa></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-c8291ffa> Skip to content </a><!--]--><!----><header class="VPNav" data-v-d8b57b2d data-v-7ad780c2><div class="VPNavBar home top" data-v-7ad780c2 data-v-844edcde><div class="wrapper" data-v-844edcde><div class="container" data-v-844edcde><div class="title" data-v-844edcde><div class="VPNavBarTitle" data-v-844edcde data-v-0ad69264><a class="title" href="/" data-v-0ad69264><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logo.png" alt data-v-ab19afbb><!--]--><span data-v-0ad69264>Remult</span><!--[--><!--]--></a></div></div><div class="content" data-v-844edcde><div class="content-body" data-v-844edcde><!--[--><!--]--><div class="VPNavBarSearch search" data-v-844edcde><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-844edcde data-v-f732b5d0><span id="main-nav-aria-label" class="visually-hidden" data-v-f732b5d0>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/docs/" tabindex="0" data-v-f732b5d0 data-v-08fbf4b6><!--[--><span data-v-08fbf4b6>Documentation</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-f732b5d0 data-v-af5898d3><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-af5898d3><span class="text" data-v-af5898d3><!----><span data-v-af5898d3>Tutorials</span><span class="vpi-chevron-down text-icon" data-v-af5898d3></span></span></button><div class="menu" data-v-af5898d3><div class="VPMenu" data-v-af5898d3 data-v-e42ed9b3><div class="items" data-v-e42ed9b3><!--[--><!--[--><div class="VPMenuLink" data-v-e42ed9b3 data-v-f51f088d><a class="VPLink link" href="/tutorials/react/" data-v-f51f088d><!--[-->React<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-e42ed9b3 data-v-f51f088d><a class="VPLink link" href="/tutorials/angular/" data-v-f51f088d><!--[-->Angular<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-e42ed9b3 data-v-f51f088d><a class="VPLink link" href="/tutorials/vue/" data-v-f51f088d><!--[-->Vue<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-e42ed9b3 data-v-f51f088d><a class="VPLink link" href="/tutorials/sveltekit/" data-v-f51f088d><!--[-->SvelteKit<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-e42ed9b3 data-v-f51f088d><a class="VPLink link" href="/tutorials/react-next/" data-v-f51f088d><!--[-->Next.js<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-e42ed9b3 data-v-f51f088d><a class="VPLink link" href="/tutorials/solid-start/" data-v-f51f088d><!--[-->SolidStart<!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-844edcde data-v-283b26e9><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-283b26e9 data-v-7df97737 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-7df97737></span><span class="vpi-moon moon" data-v-7df97737></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-844edcde data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://twitter.com/RemultJs" aria-label="x" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-x" /></a><a class="VPSocialLink no-icon" href="https://www.youtube.com/@remult6539" aria-label="youtube" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-youtube" /></a><a class="VPSocialLink no-icon" href="https://discord.gg/GXHk7ZfuG5" aria-label="discord" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-discord" /></a><a class="VPSocialLink no-icon" href="https://github.com/remult/remult" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-github" /></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-844edcde data-v-8e87c032 data-v-af5898d3><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-af5898d3><span class="vpi-more-horizontal icon" data-v-af5898d3></span></button><div class="menu" data-v-af5898d3><div class="VPMenu" data-v-af5898d3 data-v-e42ed9b3><!----><!--[--><!--[--><!----><div class="group" data-v-8e87c032><div class="item appearance" data-v-8e87c032><p class="label" data-v-8e87c032>Appearance</p><div class="appearance-action" data-v-8e87c032><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="Switch to dark theme" aria-checked="false" data-v-8e87c032 data-v-7df97737 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-7df97737></span><span class="vpi-moon moon" data-v-7df97737></span><!--]--></span></span></button></div></div></div><div class="group" data-v-8e87c032><div class="item social-links" data-v-8e87c032><div class="VPSocialLinks social-links-list" data-v-8e87c032 data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://twitter.com/RemultJs" aria-label="x" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-x" /></a><a class="VPSocialLink no-icon" href="https://www.youtube.com/@remult6539" aria-label="youtube" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-youtube" /></a><a class="VPSocialLink no-icon" href="https://discord.gg/GXHk7ZfuG5" aria-label="discord" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-discord" /></a><a class="VPSocialLink no-icon" href="https://github.com/remult/remult" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-358b6670><span class="vpi-social-github" /></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-844edcde data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><div class="divider" data-v-844edcde><div class="divider-line" data-v-844edcde></div></div></div><!----></header><!----><!----><div class="VPContent is-home" id="VPContent" data-v-d8b57b2d data-v-9a6c75ad><div class="VPHome" data-v-9a6c75ad data-v-07b1ad08><!--[--><!--]--><div class="VPHero has-image VPHomeHero" data-v-07b1ad08 data-v-b10c5094><div class="container" data-v-b10c5094><div class="main" data-v-b10c5094><!--[--><!--]--><!--[--><h1 class="name" data-v-b10c5094><span class="clip" data-v-b10c5094>remult</span></h1><p class="text" data-v-b10c5094>Fullstack Type-safe CRUD & Realtime</p><p class="tagline" data-v-b10c5094>Boost your TypeScript stack with SSOT entities and say goodbye to boilerplate code.</p><!--]--><!--[--><!--]--><div class="actions" data-v-b10c5094><!--[--><div class="action" data-v-b10c5094><a class="VPButton medium brand" href="https://learn.remult.dev/" target="_blank" rel="noreferrer" data-v-b10c5094 data-v-c9cf0e3c>🚀 Online Tutorial</a></div><div class="action" data-v-b10c5094><a class="VPButton medium alt" href="/docs/" data-v-b10c5094 data-v-c9cf0e3c>Documentation</a></div><div class="action" data-v-b10c5094><a class="VPButton medium alt" href="https://github.com/remult/remult" target="_blank" rel="noreferrer" data-v-b10c5094 data-v-c9cf0e3c>GitHub</a></div><!--]--></div><!--[--><!--]--></div><div class="image" data-v-b10c5094><div class="image-container" data-v-b10c5094><div class="image-bg" data-v-b10c5094></div><!--[--><!--[--><img class="VPImage image-src" src="/logo.png" alt="Remult" data-v-ab19afbb><!--]--><!--]--></div></div></div></div><!--[--><!--]--><!--[--><!--]--><div class="VPFeatures VPHomeFeatures" data-v-07b1ad08 data-v-b1eea84a><div class="container" data-v-b1eea84a><div class="items" data-v-b1eea84a><!--[--><div class="grid-6 item" data-v-b1eea84a><div class="VPLink no-icon VPFeature" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><div class="icon" data-v-bd37d1a2>🔗</div><h2 class="title" data-v-bd37d1a2>API Included</h2><p class="details" data-v-bd37d1a2>Secure API is auto-generated from model TypeScript classes, and consumed by frontend type-safe queries. The generated API can also be used by apps & third-parties.</p><!----></article><!--]--></div></div><div class="grid-6 item" data-v-b1eea84a><div class="VPLink no-icon VPFeature" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><div class="icon" data-v-bd37d1a2>✔️</div><h2 class="title" data-v-bd37d1a2>No Boilerplate</h2><p class="details" data-v-bd37d1a2>Simple CRUD from frontend to database just works. Smart hooks make it super easy to control data transformation, validations and CRUD events.</p><!----></article><!--]--></div></div><div class="grid-6 item" data-v-b1eea84a><div class="VPLink no-icon VPFeature" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><div class="icon" data-v-bd37d1a2>⭐</div><h2 class="title" data-v-bd37d1a2>Framework Agnostic</h2><p class="details" data-v-bd37d1a2>Use Remult with any UI framework, web framework or meta-framework, including: React, Vue, Svelte, Angular, Express, Fastify, NestJS, Next.js, SvelteKit...</p><!----></article><!--]--></div></div><div class="grid-6 item" data-v-b1eea84a><div class="VPLink no-icon VPFeature" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><div class="icon" data-v-bd37d1a2>📋</div><h2 class="title" data-v-bd37d1a2>Highly Declarative</h2><p class="details" data-v-bd37d1a2>Model metadata and declarative code affect both frontend and backend, eliminating redundant, error-prone duplication.</p><!----></article><!--]--></div></div><div class="grid-6 item" data-v-b1eea84a><div class="VPLink no-icon VPFeature" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><div class="icon" data-v-bd37d1a2>🛡️</div><h2 class="title" data-v-bd37d1a2>Always Type-safe</h2><p class="details" data-v-bd37d1a2>The same type-safe coding style can be used to find and manipulate data in both frontend and backend code.</p><!----></article><!--]--></div></div><div class="grid-6 item" data-v-b1eea84a><div class="VPLink no-icon VPFeature" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><div class="icon" data-v-bd37d1a2>⚡</div><h2 class="title" data-v-bd37d1a2>Easy Setup</h2><p class="details" data-v-bd37d1a2>Begin with just a middleware in your existing stack, and gradually enhance your app with Remult’s features. Add what you need, when you need it.</p><!----></article><!--]--></div></div><!--]--></div></div></div><!--[--><!--[--><!--[--><div style="max-width:1152px;margin:0 auto;padding-top:64px;"><div style="position:relative;overflow:hidden;width:100%;padding-top:56.25%;"><iframe src="https://www.youtube.com/embed/rEoScmSVNUE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="position:absolute;top:0;left:0;bottom:0;right:0;width:100%;height:100%;"></iframe></div></div><!--]--><!--]--><!--]--><div class="vp-doc container" style="" data-v-07b1ad08 data-v-c141a4bd><!--[--><div style="position:relative;" data-v-07b1ad08><div></div></div><!--]--></div></div></div><footer class="VPFooter" data-v-d8b57b2d data-v-566314d4><div class="container" data-v-566314d4><p class="message" data-v-566314d4>MIT Licensed | Made by the Remult team with ❤️</p><!----></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"docs_installation_framework_index.md\":\"CGIEqhKg\",\"docs_creating-a-project.md\":\"Chn6ytMX\",\"docs_installation_server_hono.md\":\"l2n-i1Sp\",\"docs_entities-codegen-from-db-schema.md\":\"B4BHud4-\",\"docs_another-test.md\":\"CXjFdJ8b\",\"docs_installation_database_json.md\":\"BGZtSN_X\",\"docs_example-apps.md\":\"CcKtsDPN\",\"docs_installation_framework_react.md\":\"Dz2AUiQw\",\"docs_installation_database_better-sqlite3.md\":\"C0yNWkZq\",\"blog_introducing-remult-part-1.md\":\"BIYEtM15\",\"docs_installation_database_oracle.md\":\"Dn3DdNk2\",\"docs_lifecycle-hooks.md\":\"DGf4Dx2i\",\"docs_installation_server_nest.md\":\"DhUKVqkC\",\"docs_installation_database_mssql.md\":\"6ftNQGSe\",\"docs_add-remult-to-your-app.md\":\"Cm43COur\",\"docs_installation_server_hapi.md\":\"CgACSuZV\",\"docs_adding-react-admin.md\":\"B0nTXzBV\",\"docs_installation_framework_nextjs.md\":\"DEs87mOV\",\"docs_installation_database_postgresql.md\":\"ByKi1pTh\",\"docs_lazy-loading-of-related-entities.md\":\"DiFlaexS\",\"docs_entity-backend-methods.md\":\"BB4wtpZ-\",\"docs_adding-graphql.md\":\"CcBHe240\",\"docs_active-record.md\":\"BcmQLQjr\",\"docs_installation_framework_solid.md\":\"VmO6pcTu\",\"docs_installation_database_duckdb.md\":\"x4-5qcJP\",\"docs_installation_database_turso.md\":\"-ppL13dw\",\"docs_installation_framework_vue.md\":\"DT8xCL-g\",\"docs_installation_database_mongodb.md\":\"CxBSFk-g\",\"docs_adding-swagger.md\":\"BtdzQKey\",\"docs_installation_framework_angular.md\":\"CSmd_g2n\",\"docs_ref_livequery.md\":\"BnuAREM9\",\"docs_ref_generatemigrations.md\":\"DLpGDiIi\",\"docs_installation_database_index.md\":\"Ds9tvsLb\",\"docs_installation_database_sqljs.md\":\"DdlanHZZ\",\"docs_ref_remult.md\":\"DOCTvm71\",\"docs_ref_livequerychangeinfo.md\":\"BA6QqneW\",\"docs_ref_filterprecisevalues.md\":\"BdHBhQNe\",\"docs_installation_database_bun-sqlite.md\":\"Dgmbwe-C\",\"docs_ref_validators.md\":\"CC_9lBEW\",\"docs_allowed.md\":\"WCw3en_i\",\"docs_installation_index.md\":\"Du_idH7m\",\"docs_installation_database_mysql.md\":\"Bp7twG4B\",\"docs_ref_entityref.md\":\"3-vImFZG\",\"docs_setup-react.md\":\"CgQTTppY\",\"docs_installation_server_index.md\":\"BryIULLz\",\"docs_custom-options.md\":\"TxfksIzp\",\"docs_admin-ui.md\":\"BOZZPbr-\",\"docs_installation_framework_nuxt.md\":\"D5lSNrZ9\",\"tutorials_angular_deployment.md\":\"DNl204Wf\",\"docs_mutable-controllers.md\":\"DfNMBal3\",\"docs_index.md\":\"WsPPRCEl\",\"docs_entityfilter.md\":\"DQGOJOX-\",\"docs_installation_database_sqlite3.md\":\"BAWMKB3z\",\"docs_installation_server_koa.md\":\"C9vG-I0n\",\"docs_ref_fieldmetadata.md\":\"o2NfmDUA\",\"docs_using-vue.md\":\"CjTUtihN\",\"docs_installation_framework_sveltekit.md\":\"E1_1EjYl\",\"index.md\":\"gJpkrbjX\",\"docs_ref_preprocessfilterinfo.md\":\"-lUHwxlu\",\"docs_ref_getfields.md\":\"MrvmNivx\",\"tutorials_angular_entities.md\":\"_9pjfsq7\",\"docs_ref_valueconverter.md\":\"CHz3exd5\",\"docs_crud-your-first-entity.md\":\"BuOLGWgf\",\"docs_field-types.md\":\"C1h8nrOK\",\"docs_ref_migrate.md\":\"C1NsUv1z\",\"docs_ref_fieldref.md\":\"DkXqMYvx\",\"docs_validation.md\":\"Dq5thaGX\",\"docs_ref_paginator.md\":\"BSmVf9Lp\",\"tutorials_angular_database.md\":\"B_vbzU2x\",\"docs_installation_server_express.md\":\"C_JBwnFL\",\"docs_offline-support.md\":\"t5i34ON0\",\"docs_backendmethods.md\":\"DyX-lvvO\",\"tutorials_angular_crud.md\":\"DeMSmzCk\",\"tutorials_react-next_sorting-filtering.md\":\"BKoKXm3t\",\"docs_installation_server_fastify.md\":\"DxVVsU7r\",\"docs_ref_field.md\":\"CZ-2gUw2\",\"docs_ref_entity.md\":\"BjmkjjUO\",\"docs_migrations.md\":\"CZowccuA\",\"docs_custom-filter.md\":\"BzE70d8G\",\"docs_filtering-and-relations.md\":\"D3F_XSUj\",\"docs_ref_remultserveroptions.md\":\"DuiI5X7E\",\"docs_ref_sort.md\":\"DimObCky\",\"docs_ref_relations.md\":\"C--m3sd7\",\"tutorials_angular_appendix-observable-live-query.md\":\"CFKvU6Wf\",\"tutorials_angular_validation.md\":\"2qXHCqKx\",\"docs_access-control.md\":\"Bdw6VZHj\",\"tutorials_react-next_index.md\":\"D-E49hzj\",\"tutorials_react-next_live-queries.md\":\"DEglse_O\",\"docs_ref_entitymetadata.md\":\"DH_afzOR\",\"misc_one-pager.md\":\"BEKZlobx\",\"tutorials_react_backend-methods.md\":\"BVKAqxKI\",\"tutorials_react_database.md\":\"ClVsb0WC\",\"docs_using-server-only-packages.md\":\"CjPdSwXg\",\"tutorials_react_sorting-filtering.md\":\"C8vFZbEJ\",\"docs_ref_backendmethod.md\":\"xrlnSDKO\",\"docs_working-without-decorators.md\":\"JF-bhBgZ\",\"docs_ref_relationoptions.md\":\"DF1p9Apz\",\"tutorials_react_crud.md\":\"BE-Gxmun\",\"todo-short-list.md\":\"BxhrU3gW\",\"tutorials_angular_backend-methods.md\":\"BcyTNtsP\",\"tutorials_sveltekit_sorting-filtering.md\":\"By_ah_yZ\",\"docs_ref_entitybase.md\":\"ByESzhje\",\"tutorials_react-next_deployment.md\":\"Blu5OIUV\",\"docs_ref_sqldatabase.md\":\"HJeC22O4\",\"docs_ref_filter.md\":\"DSiRUyZf\",\"tutorials_react_live-queries.md\":\"B_XDR5UT\",\"docs_ref_getentityref.md\":\"DNaFqdtb\",\"tutorials_angular_sorting-filtering.md\":\"DcWszlJl\",\"tutorials_react-next_crud.md\":\"BbSKNvz0\",\"docs_ref_subscriptionchannel.md\":\"CZKeU1zN\",\"tutorials_react-next_database.md\":\"CTki5-u8\",\"tutorials_react_validation.md\":\"sfUtyoX4\",\"tutorials_angular_auth.md\":\"D9ItVwuP\",\"docs_rest-api.md\":\"umYmD_Y0\",\"tutorials_vue_backend-methods.md\":\"DmzmrYc1\",\"tutorials_solid-start_database.md\":\"BEffgJId\",\"tutorials_sveltekit_deployment.md\":\"C02bORwp\",\"tutorials_react_deployment.md\":\"DJMtICs3\",\"tutorials_vue_database.md\":\"BSObk3et\",\"docs_ref_queryresult.md\":\"BENpMAcO\",\"tutorials_sveltekit_crud.md\":\"BB1bKam9\",\"tutorials_solid-start_deployment.md\":\"BzFWrNDI\",\"tutorials_angular_index.md\":\"BAOd-ICr\",\"docs_running-sql-on-the-server.md\":\"BCAgPDkI\",\"tutorials_angular_live-queries.md\":\"f5MwSMcd\",\"tutorials_react-next_entities.md\":\"B_tcTZyN\",\"tutorials_solid-start_sorting-filtering.md\":\"Cj-KXYXZ\",\"tutorials_react_entities.md\":\"DGaAAbp3\",\"tutorials_solid-start_validation.md\":\"soaUaI_S\",\"tutorials_react-next_auth.md\":\"mnZcprDJ\",\"tutorials_react-next_backend-methods.md\":\"Crl9qJHL\",\"tutorials_solid-start_entities.md\":\"CY-yy7Rm\",\"docs_ref_apiclient.md\":\"5lngt7IJ\",\"tutorials_react_index.md\":\"DGH8FXwm\",\"docs_ref_repository.md\":\"6VGTlIGp\",\"tutorials_vue_crud.md\":\"C8X7yWHU\",\"tutorials_sveltekit_live-queries.md\":\"Dimib45i\",\"docs_ref_identity.md\":\"CX7mee4_\",\"tutorials_sveltekit_validation.md\":\"BbCk14fA\",\"tutorials_sveltekit_backend-methods.md\":\"DwKC5MnY\",\"tutorials_react_auth.md\":\"BUKY-Pft\",\"tutorials_vue_auth.md\":\"Dud1LrT-\",\"tutorials_vue_validation.md\":\"BQ3r10Ii\",\"tutorials_vue_deployment.md\":\"DL2SoAra\",\"tutorials_vue_entities.md\":\"tRYzJn5e\",\"tutorials_solid-start_live-queries.md\":\"CkJLXmJ1\",\"tutorials_sveltekit_auth.md\":\"AnAEOprk\",\"tutorials_solid-start_crud.md\":\"BhirnS7g\",\"tutorials_react-next_validation.md\":\"cQyychAe\",\"tutorials_solid-start_backend-methods.md\":\"D4dmrofi\",\"tutorials_vue_index.md\":\"DH3WnB8_\",\"tutorials_vue_sorting-filtering.md\":\"DWSrqS7d\",\"tutorials_sveltekit_database.md\":\"XBy1yTQZ\",\"tutorials_solid-start_auth.md\":\"DuyjLU36\",\"tutorials_sveltekit_index.md\":\"COOdIZFy\",\"tutorials_vue_live-queries.md\":\"CCtaGatq\",\"tutorials_solid-start_index.md\":\"X9p9PHeI\",\"docs_entity-relations.md\":\"BQWe84yN\",\"tutorials_sveltekit_entities.md\":\"qs2LuMWZ\",\"docs_using-remult-in-custom-backend-code.md\":\"D8ll2CUK\",\"docs_quickstart.md\":\"F5RB9EIH\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Remult\",\"description\":\"Build Full-stack, End-to-end Type-safe CRUD Apps without the Boilerplate\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/logo.png\",\"editLink\":{\"pattern\":\"https://github.com/remult/remult/edit/main/docs/:path\"},\"nav\":[{\"text\":\"Documentation\",\"link\":\"/docs/\"},{\"text\":\"Tutorials\",\"items\":[{\"text\":\"React\",\"link\":\"/tutorials/react/\"},{\"text\":\"Angular\",\"link\":\"/tutorials/angular/\"},{\"text\":\"Vue\",\"link\":\"/tutorials/vue/\"},{\"text\":\"SvelteKit\",\"link\":\"/tutorials/sveltekit/\"},{\"text\":\"Next.js\",\"link\":\"/tutorials/react-next/\"},{\"text\":\"SolidStart\",\"link\":\"/tutorials/solid-start/\"}]}],\"search\":{\"provider\":\"local\",\"options\":{}},\"socialLinks\":[{\"link\":\"https://twitter.com/RemultJs\",\"icon\":\"x\"},{\"link\":\"https://www.youtube.com/@remult6539\",\"icon\":\"youtube\"},{\"link\":\"https://discord.gg/GXHk7ZfuG5\",\"icon\":\"discord\"},{\"link\":\"https://github.com/remult/remult\",\"icon\":\"github\"}],\"sidebar\":{\"/docs/\":[{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/docs/\"},{\"text\":\"Creating a project\",\"link\":\"/docs/creating-a-project\"},{\"text\":\"Quickstart\",\"link\":\"/docs/quickstart\"},{\"text\":\"Example Apps\",\"link\":\"/docs/example-apps\"}]},{\"text\":\"Entities\",\"items\":[{\"text\":\"Fields\",\"link\":\"/docs/field-types\"},{\"text\":\"Relations 🚀\",\"link\":\"/docs/entity-relations\",\"collapsed\":true,\"items\":[{\"text\":\"Filtering and Relations\",\"link\":\"/docs/filtering-and-relations\"}]},{\"text\":\"Lifecycle Hooks\",\"link\":\"/docs/lifecycle-hooks\"},{\"text\":\"Migrations\",\"link\":\"/docs/migrations\"},{\"text\":\"Generate from Existing DB\",\"link\":\"/docs/entities-codegen-from-db-schema\"},{\"text\":\"Offline Support\",\"link\":\"/docs/offline-support\"},{\"text\":\"Active Record & EntityBase\",\"link\":\"/docs/active-record\",\"collapsed\":true,\"items\":[{\"text\":\"Entity Backend Methods\",\"link\":\"/docs/entity-backend-methods\"},{\"text\":\"Mutable Controllers\",\"link\":\"/docs/mutable-controllers\"}]}]},{\"text\":\"Stacks\",\"link\":\"/docs/installation\",\"items\":[{\"text\":\"Framework\",\"link\":\"/docs/installation/framework/\",\"collapsed\":true,\"items\":[{\"text\":\"React\",\"link\":\"/docs/installation/framework/react\"},{\"text\":\"Angular\",\"link\":\"/docs/installation/framework/angular\"},{\"text\":\"Vue\",\"link\":\"/docs/installation/framework/vue\"},{\"text\":\"Next.js\",\"link\":\"/docs/installation/framework/nextjs\"},{\"text\":\"Sveltekit\",\"link\":\"/docs/installation/framework/sveltekit\"},{\"text\":\"Nuxt\",\"link\":\"/docs/installation/framework/nuxt\"},{\"text\":\"SolidStart\",\"link\":\"/docs/installation/framework/solid\"}]},{\"text\":\"Server\",\"link\":\"/docs/installation/server/\",\"collapsed\":true,\"items\":[{\"text\":\"Express\",\"link\":\"/docs/installation/server/express\"},{\"text\":\"Fastify\",\"link\":\"/docs/installation/server/fastify\"},{\"text\":\"Hono\",\"link\":\"/docs/installation/server/hono\"},{\"text\":\"Hapi\",\"link\":\"/docs/installation/server/hapi\"},{\"text\":\"Koa\",\"link\":\"/docs/installation/server/koa\"},{\"text\":\"nest\",\"link\":\"/docs/installation/server/nest\"}]},{\"text\":\"Database\",\"link\":\"/docs/installation/database\",\"collapsed\":true,\"items\":[{\"text\":\"Json files\",\"link\":\"/docs/installation/database/json\"},{\"text\":\"PostgreSQL\",\"link\":\"/docs/installation/database/postgresql\"},{\"text\":\"MySQL\",\"link\":\"/docs/installation/database/mysql\"},{\"text\":\"MongoDB\",\"link\":\"/docs/installation/database/mongodb\"},{\"text\":\"SQLite3\",\"link\":\"/docs/installation/database/sqlite3\"},{\"text\":\"Better SQLite3\",\"link\":\"/docs/installation/database/better-sqlite3\"},{\"text\":\"MSSQL\",\"link\":\"/docs/installation/database/mssql\"},{\"text\":\"Bun SQLite\",\"link\":\"/docs/installation/database/bun-sqlite\"},{\"text\":\"sqljs\",\"link\":\"/docs/installation/database/sqljs\"},{\"text\":\"Turso\",\"link\":\"/docs/installation/database/turso\"},{\"text\":\"DuckDb\",\"link\":\"/docs/installation/database/duckdb\"},{\"text\":\"Oracle\",\"link\":\"/docs/installation/database/oracle\"}]}]},{\"text\":\"Server-side Code\",\"items\":[{\"text\":\"Backend Methods\",\"link\":\"/docs/backendMethods\"},{\"text\":\"Server-only Dependencies\",\"link\":\"/docs/using-server-only-packages\"}]},{\"text\":\"Guides\",\"items\":[{\"text\":\"Access Control\",\"link\":\"/docs/access-control\"},{\"text\":\"Admin UI\",\"link\":\"/docs/admin-ui\"}]},{\"text\":\"Escape Hatches\",\"items\":[{\"text\":\"Custom/SQL Filters\",\"link\":\"/docs/custom-filter\"},{\"text\":\"Direct Database Access\",\"link\":\"/docs/running-sql-on-the-server\"},{\"text\":\"Using Remult in Non-Remult Routes\",\"link\":\"/docs/using-remult-in-custom-backend-code\"},{\"text\":\"Avoiding Decorators\",\"link\":\"/docs/working-without-decorators\"},{\"text\":\"Extensibility\",\"link\":\"/docs/custom-options\"}]},{\"text\":\"Integrations\",\"collapsed\":true,\"items\":[{\"text\":\"Open API\",\"link\":\"/docs/adding-swagger\"},{\"text\":\"GraphQL\",\"link\":\"/docs/adding-graphql\"}]},{\"text\":\"API Reference\",\"collapsed\":true,\"items\":[{\"text\":\"Entity\",\"link\":\"/docs/ref_entity\"},{\"text\":\"Field\",\"link\":\"/docs/ref_field\"},{\"text\":\"ValueConverter\",\"link\":\"/docs/ref_valueconverter\"},{\"text\":\"Validation\",\"link\":\"/docs/validation\"},{\"text\":\"Validators\",\"link\":\"/docs/ref_validators\"},{\"text\":\"Relations\",\"link\":\"/docs/ref_relations\"},{\"text\":\"RelationOptions\",\"link\":\"/docs/ref_relationoptions\"},{\"text\":\"Remult\",\"link\":\"/docs/ref_remult\"},{\"text\":\"ApiClient\",\"link\":\"/docs/ref_apiclient\"},{\"text\":\"Repository\",\"link\":\"/docs/ref_repository\"},{\"text\":\"RemultServerOptions\",\"link\":\"/docs/ref_remultserveroptions\"},{\"text\":\"EntityFilter\",\"link\":\"/docs/entityFilter\"},{\"text\":\"EntityMetadata\",\"link\":\"/docs/ref_entitymetadata\"},{\"text\":\"FieldMetadata\",\"link\":\"/docs/ref_fieldmetadata\"},{\"text\":\"Allowed\",\"link\":\"/docs/allowed\"},{\"text\":\"BackendMethod\",\"link\":\"/docs/ref_backendmethod\"},{\"text\":\"QueryResult\",\"link\":\"/docs/ref_queryresult\"},{\"text\":\"Paginator\",\"link\":\"/docs/ref_paginator\"},{\"text\":\"LiveQuery\",\"link\":\"/docs/ref_livequery\"},{\"text\":\"LiveQueryChangeInfo\",\"link\":\"/docs/ref_livequerychangeinfo\"},{\"text\":\"Filter\",\"link\":\"/docs/ref_filter\"},{\"text\":\"Sort\",\"link\":\"/docs/ref_sort\"},{\"text\":\"SqlDatabase\",\"link\":\"/docs/ref_sqldatabase\"},{\"text\":\"SubscriptionChannel\",\"link\":\"/docs/ref_subscriptionchannel\"},{\"text\":\"generateMigrations\",\"link\":\"/docs/ref_generatemigrations\"},{\"text\":\"migrate\",\"link\":\"/docs/ref_migrate\"},{\"text\":\"REST API Spec\",\"link\":\"/docs/rest-api\"},{\"text\":\"Active Record & Mutable\",\"collapsed\":true,\"items\":[{\"text\":\"EntityBase\",\"link\":\"/docs/ref_entitybase\"},{\"link\":\"/docs/ref_identity\",\"text\":\"IdEntity\"},{\"link\":\"/docs/ref_entityref\",\"text\":\"EntityRef\"},{\"link\":\"/docs/ref_fieldref\",\"text\":\"FieldRef\"},{\"link\":\"/docs/ref_getentityref\",\"text\":\"getEntityRef\"},{\"link\":\"/docs/ref_getfields\",\"text\":\"getFields\"}]}]}],\"/blog/\":[{\"text\":\"Remult Blog\",\"items\":[{\"text\":\"Introducing Remult\",\"link\":\"/blog/introducing-remult-part-1\"}]}],\"/tutorials/react/\":[{\"text\":\"Tutorial\",\"path\":\"/tutorials/react/\",\"items\":[{\"text\":\"Setup\",\"link\":\"/tutorials/react/\"},{\"text\":\"Entities\",\"link\":\"/tutorials/react/entities\"},{\"text\":\"Paging, Sorting and Filtering\",\"link\":\"/tutorials/react/sorting-filtering\"},{\"text\":\"CRUD Operations\",\"link\":\"/tutorials/react/crud\"},{\"text\":\"Validation\",\"link\":\"/tutorials/react/validation\"},{\"text\":\"Live Queries\",\"link\":\"/tutorials/react/live-queries\"},{\"text\":\"Backend methods\",\"link\":\"/tutorials/react/backend-methods\"},{\"text\":\"Authentication and Authorization\",\"link\":\"/tutorials/react/auth\"},{\"text\":\"Database\",\"link\":\"/tutorials/react/database\"},{\"text\":\"Deployment\",\"link\":\"/tutorials/react/deployment\"}]}],\"/tutorials/angular/\":[{\"text\":\"Tutorial\",\"path\":\"/tutorials/angular/\",\"items\":[{\"text\":\"Setup\",\"link\":\"/tutorials/angular/\"},{\"text\":\"Entities\",\"link\":\"/tutorials/angular/entities\"},{\"text\":\"Paging, Sorting and Filtering\",\"link\":\"/tutorials/angular/sorting-filtering\"},{\"text\":\"CRUD Operations\",\"link\":\"/tutorials/angular/crud\"},{\"text\":\"Validation\",\"link\":\"/tutorials/angular/validation\"},{\"text\":\"Live Queries\",\"link\":\"/tutorials/angular/live-queries\"},{\"text\":\"Backend methods\",\"link\":\"/tutorials/angular/backend-methods\"},{\"text\":\"Authentication and Authorization\",\"link\":\"/tutorials/angular/auth\"},{\"text\":\"Database\",\"link\":\"/tutorials/angular/database\"},{\"text\":\"Deployment\",\"link\":\"/tutorials/angular/deployment\"},{\"text\":\"Appendix: Observable Live Query\",\"link\":\"/tutorials/angular/appendix-observable-live-query\"}]}],\"/tutorials/vue/\":[{\"text\":\"Tutorial\",\"path\":\"/tutorials/vue/\",\"items\":[{\"text\":\"Setup\",\"link\":\"/tutorials/vue/\"},{\"text\":\"Entities\",\"link\":\"/tutorials/vue/entities\"},{\"text\":\"Paging, Sorting and Filtering\",\"link\":\"/tutorials/vue/sorting-filtering\"},{\"text\":\"CRUD Operations\",\"link\":\"/tutorials/vue/crud\"},{\"text\":\"Validation\",\"link\":\"/tutorials/vue/validation\"},{\"text\":\"Live Queries\",\"link\":\"/tutorials/vue/live-queries\"},{\"text\":\"Backend methods\",\"link\":\"/tutorials/vue/backend-methods\"},{\"text\":\"Authentication and Authorization\",\"link\":\"/tutorials/vue/auth\"},{\"text\":\"Database\",\"link\":\"/tutorials/vue/database\"},{\"text\":\"Deployment\",\"link\":\"/tutorials/vue/deployment\"}]}],\"/tutorials/sveltekit/\":[{\"text\":\"Tutorial\",\"path\":\"/tutorials/sveltekit/\",\"items\":[{\"text\":\"Setup\",\"link\":\"/tutorials/sveltekit/\"},{\"text\":\"Entities\",\"link\":\"/tutorials/sveltekit/entities\"},{\"text\":\"Paging, Sorting and Filtering\",\"link\":\"/tutorials/sveltekit/sorting-filtering\"},{\"text\":\"CRUD Operations\",\"link\":\"/tutorials/sveltekit/crud\"},{\"text\":\"Validation\",\"link\":\"/tutorials/sveltekit/validation\"},{\"text\":\"Live Queries\",\"link\":\"/tutorials/sveltekit/live-queries\"},{\"text\":\"Backend methods\",\"link\":\"/tutorials/sveltekit/backend-methods\"},{\"text\":\"Authentication and Authorization\",\"link\":\"/tutorials/sveltekit/auth\"},{\"text\":\"Database\",\"link\":\"/tutorials/sveltekit/database\"},{\"text\":\"Deployment\",\"link\":\"/tutorials/sveltekit/deployment\"},{\"text\":\"Go further / Extra\",\"link\":\"/docs/installation/framework/sveltekit#extra\"}]}],\"/tutorials/react-next/\":[{\"text\":\"Tutorial\",\"path\":\"/tutorials/react-next/\",\"items\":[{\"text\":\"Setup\",\"link\":\"/tutorials/react-next/\"},{\"text\":\"Entities\",\"link\":\"/tutorials/react-next/entities\"},{\"text\":\"Paging, Sorting and Filtering\",\"link\":\"/tutorials/react-next/sorting-filtering\"},{\"text\":\"CRUD Operations\",\"link\":\"/tutorials/react-next/crud\"},{\"text\":\"Validation\",\"link\":\"/tutorials/react-next/validation\"},{\"text\":\"Live Queries\",\"link\":\"/tutorials/react-next/live-queries\"},{\"text\":\"Backend methods\",\"link\":\"/tutorials/react-next/backend-methods\"},{\"text\":\"Authentication and Authorization\",\"link\":\"/tutorials/react-next/auth\"},{\"text\":\"Database\",\"link\":\"/tutorials/react-next/database\"},{\"text\":\"Deployment\",\"link\":\"/tutorials/react-next/deployment\"}]}],\"/tutorials/solid-start/\":[{\"text\":\"Tutorial\",\"path\":\"/tutorials/solid-start/\",\"items\":[{\"text\":\"Setup\",\"link\":\"/tutorials/solid-start/\"},{\"text\":\"Entities\",\"link\":\"/tutorials/solid-start/entities\"},{\"text\":\"Paging, Sorting and Filtering\",\"link\":\"/tutorials/solid-start/sorting-filtering\"},{\"text\":\"CRUD Operations\",\"link\":\"/tutorials/solid-start/crud\"},{\"text\":\"Validation\",\"link\":\"/tutorials/solid-start/validation\"},{\"text\":\"Live Queries\",\"link\":\"/tutorials/solid-start/live-queries\"},{\"text\":\"Backend methods\",\"link\":\"/tutorials/solid-start/backend-methods\"},{\"text\":\"Authentication and Authorization\",\"link\":\"/tutorials/solid-start/auth\"},{\"text\":\"Database\",\"link\":\"/tutorials/solid-start/database\"},{\"text\":\"Deployment\",\"link\":\"/tutorials/solid-start/deployment\"}]}]},\"footer\":{\"message\":\"MIT Licensed | Made by the Remult team with ❤️\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
</body>
</html>