From 157ab456a40c1cda0fd8cbdbad2c734d74a48612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Lachowski?= Date: Mon, 15 Jun 2026 15:37:10 +0200 Subject: [PATCH] RDBTC-221 Migrate Technical Guides: RDBTC-99 Integrate RavenDB into SvelteKit app --- docs/authors.json | 7 + ...integrate-ravendb-into-sveltekit-app1.webp | Bin 0 -> 5312 bytes ...integrate-ravendb-into-sveltekit-app2.webp | Bin 0 -> 6572 bytes ...integrate-ravendb-into-sveltekit-app3.webp | Bin 0 -> 23350 bytes ...integrate-ravendb-into-sveltekit-app4.webp | Bin 0 -> 10452 bytes .../integrate-ravendb-into-sveltekit-app.mdx | 422 +++++++++++++++++- 6 files changed, 424 insertions(+), 5 deletions(-) create mode 100644 guides/assets/integrate-ravendb-into-sveltekit-app1.webp create mode 100644 guides/assets/integrate-ravendb-into-sveltekit-app2.webp create mode 100644 guides/assets/integrate-ravendb-into-sveltekit-app3.webp create mode 100644 guides/assets/integrate-ravendb-into-sveltekit-app4.webp diff --git a/docs/authors.json b/docs/authors.json index a2d2028227..8109417d97 100644 --- a/docs/authors.json +++ b/docs/authors.json @@ -26,5 +26,12 @@ "url": null, "image_url": "https://ravendb.net/wp-content/uploads/2021/01/egor_shamanaev.jpg", "socials": {} + }, + "Damian Olszewski": { + "name": "Damian Olszewski", + "job_title": "Frontend developer", + "url": null, + "image_url": "https://ravendb.net/wp-content/uploads/2022/01/Damian.jpg", + "socials": {} } } diff --git a/guides/assets/integrate-ravendb-into-sveltekit-app1.webp b/guides/assets/integrate-ravendb-into-sveltekit-app1.webp new file mode 100644 index 0000000000000000000000000000000000000000..5a9f8d20050bb8a69d045afe13bdaaa9caab0798 GIT binary patch literal 5312 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�K?nVT$yb)Ik|#gs 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 literal 0 HcmV?d00001 diff --git a/guides/assets/integrate-ravendb-into-sveltekit-app4.webp b/guides/assets/integrate-ravendb-into-sveltekit-app4.webp new file mode 100644 index 0000000000000000000000000000000000000000..186aad38ec80e400f12eb1b34b3572476c405b8c GIT binary patch literal 10452 zcmZvAWmFtMv*q9#Tmpl;d$8cH!QCB#TW|(!356Z{O~oeS5Zl z)amZi)lzkGT)svM_2BPD5F5Va6dgAmW#eN6gFomi%le64dEc?*VB6vz%~W^lxuVpfNP& zz3B03MZN$s_Y&+|b60l*+URWrwLnRa8{WYCM;)L{r~{Pf9djG*>FA#P4zwZa-D4pH zgxo-=A$;wawLuL9bIqlO7 zO<2px^#eM&d7eASwQtk%o7h2#zcm@EPQ&s^%gt$MJ5c9HXaW)Qxv+f#1Zt((=#+2f z+OR^c9`kQHE7|UJ*W6R|H6~-!kEwz38=iTfacF2@NHV=ngugLNuj*?H~(vd zA{?W09+K-uOZPz(3Hz4;Tz1a2V74q=Ilq2WqNX^*lvW) z(*i8(f2;k+5RM(xag-GN$QS?9ERG$2mKs|36F9XY>ock)*;{;j?u|!U z&4<6Il|QjI_K!7ITK>)PAFU&LslJ%9(=%mhD^J9sc)h0J_`WBZ1lk&uB8?Yr3e$7Dl@ z;fT%McfX^5z5nM-BY?xwyt#Y?|5vRKAMOJDCF?!~aI~|5PkKDE#Prax7sV(h%5IFj z6FQLEUi*&!p~f`lZIyJ?rCuk?mH15>a_5$ft1JJxhQc5G4TH^_4W<#WYtLcP)qr_&;lqI-tGqW zMq8chQiimn^g&{EehMn_O)Qm(80uW=R!Q;#cUBZw3S>{t;rUQknE*aF!ZrOdJK4ut zhQ*?Ik5_Mz`T~nvtBH-_AsQon$J}<%e^EpwHhJ|q?jP7O>#q_xzIQ<+t3NZ&J2d== za9>ONl)Z+|!rvf*w)|g7z|-pU>(Ru<$1dT$YvNOVTx;7*>OxgFcC&UPQ}@Nq^hn89 zDu?`$8di(=wRHPKg^4x+!AD-ZXK_+S5}hvgt?yT+EsK99Z~7U3ld7`0+qxdtxCA$z z(KZHX9W4g&TQe)B?X(HfZ2{|f1bGJq zn$N1`>{aK^vz;lCXI#4zXDi=Do3&>E{~r-t9h_x3c>VkpU8Q*;0FWI2a`N?ZS^)5` z!18^@TO%-MY{X9Di3`ymW$(~`fs5jCW{9AKr^0c$l%6cLOc$=@X!vvAAG*ZKQEYbb z*?!kf=Hb9bHkb{!;x3}Q8L(8*`4-kdYa!DSpk_=Q-GZ3W?B|fqW53SHs-j#O`SgC) z)P`%ERY>j3Y~7Exkkk}<7TwAvkTdO>Xx{nOu|b1(vWX;Jh4AMCZ)T;&BtsM1F3k7S zZ}X)e1SK#>?58ix$f=jV-YdS`e=m}7=y@d~G-Y90LS9QOxlHU`^oYOY`f-_cDYkH1 zAwwNYUZk#}As7N}dvqEl^5K{oAr0cJ~&0 z3B>(&-)2_U+FLC>0szzSHX6S!Aq9O7Q0X@yWueLa&{-+eNT!360?c=_p-RJ_)XV-$ zg2kt-vmuj}ui%?WqVWVX2w}gItJKbbl_^P|hoOa}9TRxI)Qlejc7-CNlsFPk-uF!9R z`$+`4sc_p>Wn}dBVUuLS;vTcG#vB-Qy@UqyMUvN^R6_;h-{UjLXA`4lUU6{jv?z@h z2$bpWBDsfac07Q(c9Y{{aF#kXox6~x<@lK@fwysi*J}ZKF4A4c>gJHMAJ=r0S{sU&`-t_9sfq^|e_ySHdKMEf~+8kRF8u-s@w< zNOEQN6J3czfsAL2m*FF|5t1(A+&H>&N&}l*LQx0TJB4x3!25x2MOV6NcAd{fYDJS@ z1t)T~)xxv#FB2|)JSBJ94Ad}*2%Wm1+ywisWdT+u1I|~$Y+sTbr8I2`Lr{IpSLDB$ zliw&#F$s+B2@eW0SN_(@?#b^6`-$s#YLd3RJGk#nAW1@a!ieDg32AKFOZAMfmx>+K z_+6yn%ZZmmvq`)-?-Rxy*a69~oT%s09(f5wDKf43xTlMvSlD5umIm9V7p(z+>de-Q z^2E(-65xBWNMQ?t?xdDK{BV71U1C5O%J(W4s^ec371?Z zu8*-g%_d5s3l@k`2_ZGFBy}#g9_@6&-tsB1DP-?O0wLJNleuu#3dn(Ci-zqkm`1q1nHL`jDR(W=kK_Hg|INzaDjuW(Ke9 z7kBH7JA77zVO5>+_u!~2Qe6j|IvCX+Q z`GN>AeU4Zc4X_~a7cyN7UCatp1&Sn!C;eV&zy2Yye(C@ZGCee#fMKG>@dL>5$L4sm zGi&n>lv(V16lmW?FSj_PRSHE!~?+{2h`T#rwsmAxeznq zpFZXMB1C3`lh!_K+F?sngA%G}v&L`1ud^I7#rRf2KkxeNi8o?)7<*ry=uM)FnSIc1 zb>_Qe1a_f*s=|)faT8TmgwG=HV81z4ny-Vx#WHC3r?G4;lJhlM+AbVk8`8`SH*h$X z8$zgl1IVh?PczrzJtV;f4sfE!FQC8-5> z8H1~Aek?`^1ds>Po^#x4KfZq1)B}1X{&VB}D?Hg)001_wc;aci z$sQ9Jy=60e>sGkfIp`y4QJY+XAo-`4cW16-0ia(E@>qW$CO8k%ZJZ6KfRoSqg^4$X z)X4S}8%8_u^WkhR!|c-z|A6>kDm>BrGq2)?qf~PGp3|)J2ow4pydmDMbD6G{F+{D6 z6x(zs>JvY@B4^rzxmnKvpa!^c!$eNdBi%32SO;}&oS3{(mVccLaA2ux=swor5)pUX z_u6j7o=GsFYD_!&Tark*wM$_*!tfmvudIItFa5n=b7llH8r*?vU&o6Ot6i=kDaSlHiv@6m|V-dfR|VaQ60-K@uhs8^7nMd{~QF0)A3o!?qD&1N>oguen#20o76#$m^^Q~2MQ=hSL;wlP(WL&XIM_8k3n2_z_ zj@$>?=6ThLs)^uPb!!?=zi9vfMnq+KG=vRq#nH6hDW8V%@fNh6XGXu16Uc3*4)abK z@Z&nTqiOM$Vz6_Ci`-Wau)?4;J_3EcCC`TAVwth9E=ZjX-z?>a@@Yx^l>(Cz6D$F*%EBF|KU2>yCo z=v7~k(yQP0#|r@k$~~?q??qIY!wp09l4Hw(NTwC_pZQ8a@^_Vq`l+l^)f)~>iv`}x z$508G;6x0*wRX(5Tf`{TeFT3kZ=*i8JCU9NI*jx+wiYi4BtJT}P78k_vBg^V-2(S1rrOK1^c-n^6 zqz`J|h+d<+V^i{q!gQ?{!Sc#H0AS48O_yW{yYG$`<+ojgT6`Y5O0aRnI;T;Y9=-oC z5lO>lF*%02tmWJshbbk#>h>Z+Y$ySLpIOOj{(%tuRJHgsfPp;u-k+yE4CRDfbuP98 zhCS{BSB`v3IbaFmTplrH#O>1*^)L47Fo^2!kE9^CF8Gx?X;|!OVZ+*A^sZx3EA$qHNG+y`6yj54!c90?xV!$77=*Y(Kglg-xgstKUbJu&~N*V3@<);S0eYu+j~Iw!cgHg|`8#GoKv-9dL$=tLS0P zQ_PH1s3`Ra0hc^pET>q?ooMGb0$`@frnDf+4oQZ+2^|B;fN|(gZ&B@7#qdLkV{n$s98(&6qbIB-6gozs6a^3hs+N(tn zLn&f#-zKybBAl3>fe{U;XA7i0Wnj*=Fpv5&!eM~kcdi=paO=mgdgEN|K%&a8seW6o z=f6i;tmedq^le+{BXG8|A9F_X8Kd3V$>sxnobM>BLN01v9+BTw>B8jnfJ$_t%pfem z&E1H`^$}aD;d#-u_!vp)sXn!{3pucUDL4q7VpT*4@(qj6cC=CivYYQCidW{Zl8789 zI#k+5{kJ-Sv>wA%E8CeyW8fEz+@b|JiC(5sQa@VxLnJ|5y@MRd#{-T^1nj8Fm%`;<-v&J&4PC5p_S<>$-$KN0MjtX4sr*9(W`1D4z;q@Z(mq~kuTqsbJ7olUh$OM(`K;p z6jhjAT%wo2sp&W`CfQ ztu9JX-VDpxCfNgLdsWbI9M;|^I@_2EyKgq~kseX=rwLL>ALlx_72Tnmkm0X(?RLgi zRBWyjR67{n#~O@-r%4D(%DGI(T6bDJ?3%nJj{`0w7c(=J{QsqGk*pyfo}cm)o$?MY zgLQ6~+_)KyE_n@T6xmy{DE$L84S^{BpYd$fXXaAjv=`4AxS0Nk0fdx(Dxn6mtz}1Q zH9A!;fn@T?$Sl=4_<|n9AwmBMUKoBd2BzF4Z-jjRGh{-2^KSq}fpGGfV^p`{nM--x zSm%pB3`A{u2gc_MKXWg_N%(LETv`6R2!PhwI|+x3dx@s_ES`B|*mzydCwANbWi2T^ zCwpnIH9v61EmmPm=Rl!6l5^%Ut$7DeA|$rgd)dA5`lO&HWEV2d9H-9~7^qzLaw z7_LId3?7=3zouR)7QtWKBU`MT)gicXX}5?I9(Ol=*lEAF+x-}=?Q|ARD) zw8HZUA{kS(3;%4HE_7-e@lLa35l{az!f=knW2b4W3k$U`h#)_ske8-=ov7>I>z7)x z%Oj_({$rMvOL79$Nty!Y*z7s}GNMh@ZSDIk-sDxE=M)Q{TAln&op|`CJY=)Zbfp}b zJeeQLKB!wxaAWB6zMm}33w?Pe=^e-ZZN*}OEhl%c8bMpCBIzG z9$qSr@IKZ(v(D={V+~e*m>mFjGQiIAV+6uov_X&PM_m&5ly0+jNms{MiRd6Udci3k_*J?hE zeBMgd!)rXBmH}v@?55K>yMnFy0@;aAS0Xg}y|jA?57g+A*MEsG;L*N*NY(6w_^t;U z4VdjZmJv889lBq1isOhrk!QKW8ini}6A-d^y9I{T%r1Z;+|`U|4IN1o&W`Ey7kFOv zDyL`c)~N*YKwFP6cA@^l4++d(w8(QbCGE6IRe`588y-OeCsE5!-vgTAhUpPOtugh) zYikTX!lATL48ud#^`C?Qbuy z7@Np2Lmz@?BFvd#QR@pFH?HZ{#+GBiaX3SQF1iMPJ@df|>sY~nE7>suEMDqy?rbQ} zCoBR>o}CS(G&+!B88_bdZNd0}V8a&|u2{h%`FA7SI~bAhmZ#5d&#`#KXf3%{QajZb%)7#rr&Fla=3<)VA+&Gj(~P-;g4M}KPE)%ehZmpziqmcQ?3gSFAN zV-49GK27|dD+y{iL~U=A9#y-^JZ{^%&M*eW3a;rRDe7IMfo6{Ubds4YqVOHjxuatE zVnl9bP?I^zl8Vt5OjO6+|FL}Wku@B`Ya&(+`5}((CH05#ZiZOc^y03r^!26FI1B?J z@g^#po1@5R)95PbX|_^dZZj9xNL_F9ismG@#mjNeuS2rCB?^zu?g63)b=!OAMnAf* zIuLDDXrk{@^H7PX?eJihmL#amq{yw%7ilU_QipUHV276t8huAxvExQW z&Y{#W@qj~3=>p-Cdu9h=hcP|k)5|;{o}5>2)eiCv(^3oZe5f&$DgGFq!LK*GOM#y# zUQ_kAjAIi%>mMX}TfQ6(#_W}R=GZ|A8xiZog0-l(3eD4TASK=3vGa~dIMlk2E|_98 z7O0-LfabxWmK2Q?jjj*@-(O)ztF2O8TN2M6%1SYf*PXCpeDaoL`OO%f-w#XSL$E2N zGVc5)R<=k5Q7a^JYRx|6`4q}%uWf34z6fLr;1Oq65v3eF)Lg@eIQ>4%6B?x!|0M{O z#Tb&HGc%kn(u{v!3*?@L4V;6QD~4#(T*2axEw&X?hC9~=UTCdv1E!#`pBc7E|NW#= zzRQ+IP!y06sND#ErHu-wVL6hb*MxE!Y4^haiYrb>kyUcR?TQCeFsWmYNtP$mwW%Hd zQceR?D)~n%un6%+=Dec6A(5%cV1-LXVDs9%D1t=4mi0MR7Yvq%e)oF$Wneg{3ECBK zU0tIlGj|ol8MoA1;AwI3_H0YJe+R7+$uS!*RMp^%kXksu&gf;6TgyV_OArV!Sz6@0 zYZ|2TT$MgX4I)&f1n$Z|I~|HF!sXGZp6E|vOjx4-+lv2W+iaW2By znJ^2xA!lo?#mNgMr=6;7j=83GJ88{HUXvbbC!v2ImA!uLX(@by5j`Q#Cxkf);n;N8 zR1?Kg{^j(AhfvL?Za7|y7c@(wH7b}L?rAs6AQrH{4IJ;D4o>%lAEK`D+s_jg-Nl3C zGpg7qq$nD*6a3Y@Sy~cvfjL43437nQ@o=}wLT8a-^>M8Zl!IWYV|CXmQKtthCsPtT ztMQbRq+aw1Y*6dae|(=n#h6Wa**PELwaCs&{@O`Rf{BJffV)r;Vr(EQco$6Qnxs}} zBW$_%xmShMvg+_t1>Pq;7~3~wosvRfy+ZktByEC7*t1#Ra@YfuM_4n~!DUo2SgjVN z-2lyMCbC1dM=6!`n3yF8w7~Qp>?#_gpx#Ldf8x8iD#y0p1Wgn|=KWhZ(M54X%JuWr z4ENsG-3z_9aSaxnqD3rW#e zXXWwg8%q#iSuGTk>GGY95cGF#^VvQ0qCv)VT4N2NEESnNlKEID+oqm|TrDxBA6=nE zXb0KUbt+%f2KtQub_cD;e7FL?#qP8ctqZL9bPQyJ?4vi`_!7o6qvh7g$UrZu!1!(^yKMgjjL^&_4;<@PJ~P|SF3X$kSj-TJ>>YOESEy!D*`_c zJGhOcwO*;b>UbpCRwocJJg=Z`>NaF;u;aV$WG}A6DvwvWhZHy^tBODK9XhZ`$Olnr z8`ro0K$aJj=mWR_dy3O8G}^@S(f(%NfR+r~6pw24obJ8(s=MB6Uo@UTO*V?;Z+0&6 zOVP$BU`ZqJt#5_o}`-B586FtRT9~v4;4f^HgRV;@=5(t(|iwW72x~SE8(eceioCIXozfwdkE#A z&B3fP8oE4-g>P}QN)Esbz6iAu5F%nZ#gf&pT0G%;BXC;ZlQBJ17AN<8DAdAJ{VKS?optOzcv+yV+_rcm_JFzC8B}q|b!0K;wN*A)zCRJSUA_z3SOMm9YA1Cb4 ze|1VH*zLAa)pmp|<7y5})0r>AMi@$d$?IYFUiKFtxiSnNPqvcwFh$Pqru_j@8SFn> z9o`PT?RCvDnSR=s{B*h|hfi<%RM+n-f*lLFy!xVH34$>vzi4!B^P)2O#W_9=dn3Kb z-sv^Ot`i0L0)G?c|5H!$Z+tct{o9n*dt|uqGdFBe&+cm@GsQa71e}B8hkI`UdzxxL z^TXS-WW7fpWd}nh#B1Q!TDm(3e3dMBQndxkVk(zkRT=W=FabC>&j*c>R(aJD+l2Mk zpCN)ZIs0wW@x4-mFF|JU7Ij9z8Yw$QIiBo4D6~F-4UW&cQ4O3dA6G(%bUF#M0~Jfk z4T6HVf4_BHPn6uhk1xHsi|;9ZY)0A10&%UdRF^t%r;dsq)EwW*;P5i94QJEeF?d8r z6@LDzronbA4u#l#JS|aQDW&t^5cfQx>*sIPYH}~wupKfNiCMiT7*RoiO-wa3&DnQ+ zWQX~{#*rFXK`YAe8;8RvCf?z$3+L8-gdD{DydRiDUHH%oiOsJTl);PV!X&S zDKf4z*4*7xk_*$BUl(@D$W}U>?SieDkepg!ZpUIbEV@#T&WLhC7#q+7x9x*FTXpJu z4QyoWP+sI4>hIgUg>Z;b1o=f4G>IiX6u!zNn_+)_(iHg0#$$Ddq;W)a17yWm)uI4+ zl;j3&iyVU%fLA#)EKarwuP9Pru#9;e3YX3>8S0DVT4s0~?5dXOB9XZD3%ZC*Oq z^KVg{a&Hr!o#{!PhD~P3#jXt|{qy1mdVBL96=^d`H`mkW8V%CLBaRh>`1Y9Ue|+_N zdi6jZqsr&{lSWjP6GduFOG+vMJrjt*Y<73yD2RBIcC{lX|mrq?xfV*<=7M1Js9k{O*70dU=zf%biCyvaXdA}B)2!xZGn z{`ul{tBCpZd&AyS+g;#u$anf{QN9iUvkbPVvGB|$Sj<`VuQCZv^U52lz3P$k%kF8V zw|9EIw!Q?{f~-H+ulK=VxusZ2^tgy4@%j3lKJLoTI z@-r?iE=&b>jbv$X@+8QKd=S)1W1iLc>1NA|fike`-^vZseWwonJOjIG8=ra63*Cpq z80l9SYgnfB9^~7u9^&(@)fo`eIVv*=XzL}W5tn;H{a39vx!u4X)?yYexkNMvy<%Cs zB=V~Tzc+vZ^^QP6YY?6N)&WTUUm-|%nC({hAX4`z1jS@;) zbdJ25!?j7@=l*;kWT~h+l#&MJ3!f9tsz^nFwXrqik?~Y4B&*Uwzr^rT-V>B`!)rCA z$69BOuyjwA8)1W|3>z=9?OBF@Rkt0n-g>@PNF(JxI597W_oLI(o~FU^v)#5a|8?4Z+PAxr_KM#1ur&ZAi?m6y?V=Y6i#EGi*0}f<7w9yv#vWc4!ZhFfp?P- z+_51R=cx7)AZlhAN81$oLWDrp+3HavOOAK zAmOsdJ#N^BvC1TIJah+>-9M#+1X=$9e7;$n6|jFZp+_os@P0eN3xP$d+OtU9Uc zd{rS6?Z+JRzC~P$$_ZMpm-H|Rb~f4{SSk0|t7v$vZUrH~%`JZw&GXOjU)gP>FaHnW Y1i+Tja#m>&H^x+8% Session" + - title: "Storing Entities" + link: "client-api/session/storing-entities" + source: "docs" + path: "Client API > Session" +author: "Damian Olszewski" proficiency_level: "Beginner" --- + +import Admonition from '@theme/Admonition'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import CodeBlock from '@theme/CodeBlock'; +import LanguageSwitcher from "@site/src/components/LanguageSwitcher"; +import LanguageContent from "@site/src/components/LanguageContent"; +import Image from "@theme/IdealImage"; + +In this article we will explore SvelteKit, a framework for rapidly developing robust, performant web applications using Svelte, and build step by step a sample web application for ordering beverages between a wholesaler and a bar to see the advantages of using this framework. As a database, RavenDB will be used along with our Node.js **ravendb** client API. Everything in this tutorial will be wrapped up in a GitHub repository for easier access. + +## Create Database + +In order to begin, we need to set up a RavenDB database server. There are a few options available here, starting from Demo instances (beware that the data is public there, this is just a playground server), Free RavenDB Cloud instances, and a local installation. It is up to you to pick the one that you need; we are leaving links to each type for a quicker few-minute setup. + +1. Demo Server: Go to [live-test.ravendb.net](https://live-test.ravendb.net) +2. Free Cloud Instance: Go to [cloud.ravendb.net](https://cloud.ravendb.net), create an account and then create a free product +3. Local server: Go to [ravendb.net/download](https://ravendb.net/download), get RavenDB for your system and run it + +For more details, visit [ravendb.net/try](https://ravendb.net/try). + +## Create SvelteKit Project + +Used Node.js version: **22.13.0** + +### Init SvelteKit project + +After the RavenDB database is installed, we need to create an initial project structure. Fortunately, the authors of the SvelteKit framework did a great job and created a wonderful template that through a set of questions will create exactly what we want. + +To start the template generator, execute: + +```bash +npx sv create ravendb-sveltekit-example +``` + +We recommend using TypeScript for type safety and enhanced code maintainability. ESLint ensures code quality and consistency, and with Tailwind CSS we will be able to quickly style our components with utility classes. + +To make it shorter, our recommendation would be to answer as follows: + +``` +◇ Which template would you like? +│ SvelteKit minimal +│ +◇ Add type checking with Typescript? +│ Yes, using Typescript syntax +│ +◇ What would you like to add to your project? (use arrow keys / space bar) +│ prettier, eslint, tailwindcss +│ +◇ tailwindcss: Which plugins would you like to add? +│ none +│ +◇ Which package manager do you want to install dependencies with? +│ npm +``` + +### Install ravendb package + +Our next step, since we want to store our data in RavenDB, is to add the Node.js RavenDB Client API. + +```bash +cd ravendb-sveltekit-example +npm install ravendb +``` + +## Example App + +Now that we are good to go, and since we are building an application that lists orders between a wholesaler and a bar, our new system needs basic functionality so we can order the beverage we want with the desired quantity. Once we place an order, it must be marked in some way, so we will add the option of crossing-out or completely removing the item from the list. + +Since our solution is using Tailwind CSS, we will take advantage of it for CSS styling purposes. + +### Setting up database + +What is an application nowadays without data storage? Let's set up the database connection in a few steps. + +Create a `store.ts` file inside `src/lib/`. + +We need to import `DocumentStore` from the `ravendb` package. Then we create a new store object. + +As the first parameter, we provide the address under which our server is running: + +- If you created a database on the demo server, it will be `https://live-test.ravendb.net`. +- In the case of a cloud instance, you will find the address in the cloud portal. +- For a server running locally, enter the one you have set (default is `http://127.0.0.1:8080/`). + +The second parameter is the name of the database you created. + +Now we can initialize the store and export it. + +```typescript +// store.ts +import { DocumentStore } from "ravendb"; +import { BeerOrder } from "$lib/models"; + +// Change it to your url and database name +const store = new DocumentStore("https://live-test.ravendb.net", "beer-order-database"); + +// Avoid class name minification in production build +store.conventions.findCollectionName = constructorOrTypeChecker => { + if (constructorOrTypeChecker === BeerOrder) { + return "BeerOrders"; + } + + return constructorOrTypeChecker.name; +} + +store.initialize(); + +export { store }; +``` + +### Models + +Before diving into creating pages, it's crucial to define models for our data entities. Models provide a structured way to interact with the database, ensuring type safety and consistency throughout the application. + +In the ravendb client, you can represent entities as either [classes](https://github.com/ravendb/ravendb-nodejs-client?tab=readme-ov-file#using-classes-for-entities) or [object literals](https://github.com/ravendb/ravendb-nodejs-client?tab=readme-ov-file#using-object-literals-for-entities). + +We will use the class approach here. + +Let's create a `models.ts` file in the `src/lib` directory. For our application, we will need a document in which we store information about added orders. We'll call it `BeerOrder`. + +```typescript +// models.ts +export class BeerOrder { + constructor( + public id: string | null = null, + public beerType: string = "", + public liters: number = 0, + public isDone: boolean = false, + public createDate: Date = new Date() + ) {} +} +``` + +With these models in place, we're equipped to seamlessly integrate RavenDB into our SvelteKit application, ensuring a smooth flow of data between frontend and database. + +### Styling + +Let's add all the CSS classes needed for this project upfront so we can focus on the more important stuff later. Go to `src/routes/+page.svelte`, remove everything, and paste in these styles. + +```css +/* +page.svelte */ + + +``` + +### Main page + +In this section, we'll focus on the main page of our SvelteKit application. Navigate to `src/routes/+page.svelte`. + +The form will include input fields for the beer type and the quantity in liters, along with a submit button labeled "Add order". We can progressively enhance our form interactions to provide a better user experience by adding `use:enhance`. + +```javascript +// +page.svelte + + + +
+

Beer Order

+
+ + + +
+
+ +``` + +With this main page set up, users will be able to interact with our application by submitting beer orders through the form. In the subsequent sections, we'll enhance this functionality by integrating RavenDB for storing and managing these orders efficiently. + +Now in the terminal run: + +```bash +npm run dev +``` + +And open `http://localhost:5173` in the browser. Your component should render the beer order form. + +Beer Order form with empty Type and Liters input fields and an Add order button + +### Form actions + +For form submission we will use [form actions](https://svelte.dev/docs/kit/form-actions). + +We already defined our form action to point to `?/addOrder`, so now let's create this action. Create the `+page.server.ts` file in the `src/routes/` directory. From here we will export an object containing all actions. For now let's focus on `addOrder`. + +From `formData` we can get values by input name. + +Inside our function we can simply use the RavenDB database store. + +```typescript +// +page.server.ts +import type { Actions } from './$types'; +import { store } from '$lib/store'; +import { BeerOrder } from '$lib/models'; + +export const actions: Actions = { + addOrder: async ({ request }) => { + const data = await request.formData(); + const beerType = String(data.get('beerType')); + const liters = Number(data.get('liters')); + + const session = store.openSession(); + + await session.store(new BeerOrder(null, beerType, liters)); + await session.saveChanges(); + }, +}; +``` + +Now let's try to add an order. Fill the form with some values and hit "Add order". + +Beer Order form filled with Porter as the beer type and 15 liters + +New documents should be added to your database. + +RavenDB Studio Documents view showing the beerOrders collection with a Porter document containing beerType, liters, isDone, and createDate fields + +### Getting data from database + +As you can see, our order is in the database, but nothing has changed in the application. + +In SvelteKit we can load data to our page by exporting the `load` function from `+page.server.ts`. This function must return data that can be serialized with devalue (e.g. JSON). Your data can also include promises, in which case it will be streamed to browsers. This is perfect for us because we will be able to display the status of loading our query from the database. + +Since our query will return a list of deeply nested objects, we need to serialize the data appropriately. For this purpose, we will add the `serializeNonPOJOs` function. + +```typescript +// +page.server.ts +import type { Actions, PageServerLoad } from './$types'; +import { store } from '$lib/store'; +import { BeerOrder } from '$lib/models'; + +export const load: PageServerLoad = async () => { + return { + beerOrder: store + .openSession() + .query({ collection: 'BeerOrders' }) + .orderBy('createDate') + .all() + .then((data) => serializeNonPOJOs(data)) + }; +}; + +function serializeNonPOJOs(value: T): T { + return JSON.parse(JSON.stringify(value)); +} +... +``` + +Time to show the list on the UI. We can get our promise from page props. We will also prepare a button for crossing-out and removing from the list. The final form of the page should look like this: + +```javascript +// +page.svelte + + + +
+

Beer Order

+
+ + + +
+ {#await data.beerOrder} +

Loading...

+ {:then beerOrder} + {#each beerOrder as order} +
+
+
+ +
+ {order.liters} liters +
+
+ +
+
+ {/each} + {:catch error} +

{error.message}

+ {/await} +
+ +``` + +Now the app should look like this. + +Beer Order page showing a list of two orders, Porter (15 liters) and APA (30 liters), each with a Delete order button + +### Delete and modify data + +We've already shown the delete buttons, now let's write logic for them. We will also add an option to click on a beer type from the list to mark it as ordered. Let's go to the `+page.server.ts` file. + +We will add the `deleteOrder` and `toggleOrder` functions here. To make a change in the database, we only need the `id`. + +```typescript +// +page.server.ts + +... +export const actions: Actions = { + ... + deleteOrder: async ({ url }) => { + const id = String(url.searchParams.get('id')); + + const session = store.openSession(); + + await session.delete(id); + await session.saveChanges(); + }, + toggleOrder: async ({ url }) => { + const id = String(url.searchParams.get('id')); + + const session = store.openSession(); + + const order = await session.load(id); + if (!order) { + throw new Error(`Order (${id}) not found`); + } + + order.isDone = !order.isDone; + await session.saveChanges(); + } +}; +``` + +Now everything should work. For the complete code, visit the [GitHub repository](https://github.com/ravendb/samples-sveltekit). + +## Summary + +In this tutorial, we successfully integrated RavenDB into a SvelteKit project to create a beverage ordering application. We've covered database setup, project initialization, data handling, and UI development. + +- SvelteKit's server-side `load` function and returning promises lets you stream query results to the browser, so the UI renders immediately while data loads rather than blocking the initial response. +- RavenDB's `findCollectionName` convention needs to be configured before `store.initialize()` when using TypeScript classes; otherwise production minification will break collection routing. +- Sessions are the unit of work in RavenDB: open one, make changes, call `saveChanges()` once. Reusing a session across multiple unrelated requests is an anti-pattern. +- The `serializeNonPOJOs` helper is necessary because RavenDB returns rich proxy objects that SvelteKit's devalue serializer cannot handle; stripping them to plain JSON before returning from `load` avoids hard-to-debug runtime errors. + +Happy coding!