r/sveltejs

put your startup through this and see where a first-time user gets confused
▲ 54 r/sveltejs+14 crossposts

put your startup through this and see where a first-time user gets confused

I built tryproduck.com/audit, it walks your app like someone opening it for the first time and sends back every bug and confusing bit it hits. Over 650 startups have run it so far.

u/Ninjishnu — 20 hours ago
▲ 114 r/sveltejs

Svelte DataTables Components: 16 components + 11 table blocks | Self Promo

Hey everyone, I’ve been working on Svelte Datatables Components, a free and open-source collection for building data tables in Svelte.

It’s built on top of TanStack Table v9, and components can be installed using the shadcn-svelte CLI.

Some of the components:

  • Data filters
  • Row & header selection
  • Debounced search
  • Pagination
  • Column visibility
  • Row actions
  • CSV export

11 ready-to-use blocks, including:

  • Basic data table
  • Row selection
  • Filterable tables
  • Draggable & pinnable columns
  • Resizable columns
  • Pagination
  • Complex tables

Live: https://sv-table.vercel.app/

GitHub: https://github.com/SikandarJODD/sv-table

Filter Component is inspired from Bazza UI
it include: range calendar, min-max number filter, options based filter( active, pending, inactive) you can add any options, text based tooo

Would love some feedback. Also, let me know if there’s any table block you’d like to see added.

u/Design_FusionXd — 16 hours ago
▲ 31 r/sveltejs+3 crossposts

PeekM2: A real-time dashboard/viewer for your PM2 processes

Note: I'm just a beginner, don't bash too hard on me :/. AI wasn't used to write this post at all and I'd love if you'd take a minute and check the project out!

AI was used to lend me a hand me during the dev of the project, but it wasn't used extensively and most of the UI is just shad/cn, it was used mostly to help me learn Svelte as it's my first time using it :P

Also, for anyone that isn't inside the JS/TS ecosystem or just don't know what PM2 is, it's just a process manager, allows you to control all of your Node/Bun/Deno processes (or even other interpreters) and auto-start them on boot. Find more about it here: https://pm2.keymetrics.io/

Project Repo: https://github.com/AngelCMHxD/PeekM2

Live demo: https://peekm2.angelcmh.com/

---

I've been looking for PM2 dashboards for quite a while and I've been able to find quite a lot of options, however, none of them were quite what I was looking for.

The official one has a LOT of features, though mostly ones that I don't need, and the only plan with a fixed/public pricing is $39 a MONTH, which is just too much for what I was looking for, and especially for hobby projects.

And for the open-source ones, some of them were too complex to setup, like I don't want to setup a whole PostgreSQL instance just for a PM2 dashboard. And others were over-complicated, I don't really need an user management feature other than just an admin/master password, if I didn't have a dashboard I'd have to give the other maintainers access to the whole daemon anyways. (Though right now you can set up multiple instances, so you can handle access that way too)

So, for mine I built a historical CPU/RAM usage history chart, logs, basic controls to restart/stop/delete processes, and a small uptime chart (that probably needs to be reworked because it only checks every 5 mins, and for it to be reliable it should check WAY more frequently)

Now, I do have other features in mind that I could implement and have them in mind, like these:

  • Discord (or other) webhooks to notify about process changes or downtime.
  • Fix the uptime thing I mentioned before.
  • Add a way to check historical data from other than the last 24h.
  • Related to the one above, limit the amount of historical data stored, as it's currently uncapped and we only use the last 24h, so keep only what's needed
  • Maybe add a way to see the process env variables?

This list is not exhaustive though, and I'm quite open for feedback, even if it's the user management thing I mentioned before that I didn't need, I'll just find a way to make it unobtrusive for anyone that may not want it.

The main point of the project is just keeping it simple for anyone that doesn't want that much, but I could add other features as long as they don't impact the simplicity for anyone that don't want them. Just keeping the "barrier of entry" as low as possible.

I've also deployed a "demo" instance so you can see how it currently looks like, and I've said before, I'm open to feedback!

If you like the idea, please star the repo ;D! It's my first time doing a project and posting it on things like Reddit, I'm just a beginner at these things

Edit: Fixed the formatting... so sad that it didn't worked at first :/

2nd Edit: Also, I'd love to promote Hack Club! It's an amazing non-profit dedicated to incentivize programming for teenagers (13-18 inclusive) and overall just doing cool projects while getting rewards. This project was made/submitted to one of their programs as I'm a teenager myself :D

u/Anglotx — 1 day ago
▲ 3 r/sveltejs+1 crossposts

[Self Promo] Svelte 5 removed $capture_state — two gotchas that silently broke my component playground

Self-promo disclosure: I maintain poveste, a component playground continuing histoire. Two Svelte 5 fixes worth sharing — both failed silently, and both apply to anyone wrapping or re-mounting user components.

1. $capture_state / $inject_state are gone

A playground mounts your story twice — once for the controls panel, once for the preview. histoire bridged those two instances with $capture_state / $inject_state. They were dev-only compiler internals, and Svelte 5 removed them.

Without the bridge, a plain let exists twice. The checkbox writes to one copy; your component renders the other. The control moves, nothing happens, no warning.

Fix: stop reading state out of components and own it instead.

<script>
  const initState = () => ({ disabled: false })
</script>

<Hst.Story {initState}>
  {#snippet children({ state })}
    <MyButton disabled={state.disabled} />
  {/snippet}
  {#snippet controls({ state })}
    <Hst.Checkbox bind:value={state.disabled} title="Disabled" />
  {/snippet}
</Hst.Story>

One object, both snippets. It also survives crossing into the preview iframe, which the old approach never could.

2. Spreading a bound prop drops its setter

Svelte 5 passes bound props as getter/setter pairs. Spread them onto a wrapper:

<Inner {...props} />

...and the spread invokes the getter, handing the child a plain value. The setter is gone, so bind: silently degrades to one-way. Forward the prop explicitly instead of spreading it.


Since the first failure was invisible, a story with controls but no initState now logs an error naming itself. Happy to answer migration questions.

u/50rayn — 1 day ago

Tested sveltekit on cloudflare. Oooooh boy....

Color me impressed. What started out as a quick look at cloudflare workers capabilities turned into a fun weekend of porting a whole project to cloudflare workers.

Honestly, the cloudflare workers + kv + D1 + hyperdrive (postgres) + pages running sveltekit frontend + better auth + hono rest api is the ultimate stack. Everything just works. And works beautifully! Did I mention everything is free? And they manage all infrastructure apart from my postgres that I run on an oracle ampere instance with 4ocpu and 24gb ram.

Hard to believe that this whole stack costs me exactly $0.00

Yip, $0.00. And will continue to be for the foreseeable future. By the time I start to hit the free tier limits, I would already be making money on apps hosted on this stack. And seeing the ridiculously cheap pricing of cloudflare, $20 will get you insanely far.

If you havent tried cloudflare workers, I implore you to give it a go.

reddit.com
u/Soft_Cat2594 — 2 days ago
▲ 278 r/sveltejs+2 crossposts

We Released TanStack Table V9 Last Week - Finally Compatible with the React Compiler

In case you missed it, TanStack Table V9 was released as stable last week.

This release entailed huge refactors over the past couple of years that ended up becoming practically a full rewrite when all was said and done, though much of the API surface that you're familiar with is still there. The state management layer was completely rewritten on top of our own internal TanStack Store library, which improved compatibility and performance with all the framework adapters we offer, including React and the React Compiler.

Other improvements include a new tree-shakable feature/plugin architecture that lowers the bundle size of the average table, better type-safety throughout with new utilities and per table meta, much less memory consumption and better processing performance, a few new features like cell spanning and cell selection, hundreds of bug fixes, and a lot more, but you can read the above linked migration guide for the full details.

On top of all that, I put in a lot of time into reorganizing and rewriting major portions of the docs, including many more introductory guides, and more examples than ever that showcase more of our features, integrations with other TanStack libraries, and usage with most of the popular UI component libraries out there.

tanstack.com
u/KevinVandy656 — 6 days ago
▲ 29 r/sveltejs+3 crossposts

🚀 ScrollStack Js — headless infinite scrolling for Web

🚀 Shipped ScrollStack — headless infinite scrolling for Web

📦 1.92 KB gzipped, zero runtime deps

⚛️ React, Vue & Svelte adapters

🔁 Cursor, offset, Virtual list & page pagination → one function

🧠 Stale responses can't resurrect dead state

You bring the markup 👇

https://scrollstack.js.org

u/devgauravjat — 5 days ago
▲ 46 r/sveltejs+1 crossposts

[self-promo] I built an i18n compiler for SvelteKit where the source string is the key

Hi all,

I've been working on yapyak, an open-source i18n compiler that runs as a Vite plugin. There are adapters for a few frameworks, but SvelteKit is the one I use myself.

The idea is that the source string is the key:

<script lang="ts">
  import { t } from 'yapyak';
</script>

<button>{t('Download recovery key')}</button>

You save the file, and the source string shows up in your locale files as an empty stub. If you've set up a translator, it gets auto-translated and written back, using call-site context (the component and the code around the call). HMR picks it up in the running app.

The video is a small example of that. I add a download button to a dialog and hit save. The German page is sitting right next to the English one, so I see it the moment it lands: Wiederherstellungsschlüssel herunterladen pushes the button row 97px past the edge of the dialog.

So I fix it right there, one prop on the button group.

That's a small slice of what yapyak does, but it's the part I use most. Translating stops being something I come back to later. It just happens on save.

Because it runs in the compiler, it sees more than the string itself. It reads ICU parameters out of the string literal, and it keeps track of a translation when you move or rename the source file.

In the SvelteKit SSR adapter, locale state is scoped per request on the server and uses Svelte's reactivity on the client. Switching locale is synchronous, since the translations a module uses get compiled into it. A fixed-locale build can compile t() away entirely and leave just the translated string.

Auto-translation is optional. There are shipped translators for Anthropic, OpenAI, Gemini and Ollama, all using your own API key, or you can leave the stubs empty and hand-edit the locale files.

I built it for a product I'm working on, and that's the whole business plan. There's no follow-up post where I get to the pricing.

MIT licensed, and still pretty early.

yapyak.dev

If you've done a lot of i18n in SvelteKit, especially SSR or anything big, I'd like to hear what you'd try to break.

u/ElectronicShop8677 — 6 days ago

ShardsUI — a Svelte adaptation inspired by Base UI is now in beta

I’ve been working on ShardsUI, a headless UI library for Svelte inspired by Base UI.

The first beta is now available:
https://shardsui.com/

It’s still early, and I’d really appreciate feedback from Svelte developers on the API, components, and overall direction.

u/Minimum-Public-8019 — 5 days ago

[Self Promo] I built NoMoreCritics.com—a movie cataloging & ranking site using SvelteKit and .NET. Would love your feedback!

Hi all of you Svelters (Sveltees?),

I wanted to reach out and share a project that I wrote using Svelte/Sveltekit. It’s called NoMoreCritics.com.

This came out of frustration with the job market, frustration with movie critics, and pure boredom. I was out of work and wanted a project that would not only keep my skills fresh, but also allow me learn something new in Svelte/Sveltekit. I was a mostly backend developer and didn’t have much skills on the frontend. CSS scared me as well as being a bit frustrated with React and Angular. A friend of mine suggested that I look into other frontend technologies and through my research, I landed on Svelte. Let me tell you, Svelte is a breath of fresh air. It was so easy to pick up and Sveltekit is just so intuitive, in my opinion.

Plus, I’m a big fan of movies and love finding new ones that I can fall in love with. However, my relationship with critics was that if they loved a movie, I probably didn’t like it or if they hated a movie, I probably would like it. I had been looking for a website that would cut through the BS of critics, but couldn’t find one. So, I came up with my own. At the very least, it helped me land a Svelte frontend role. So, now I finally see myself as a true full-stack developer. Kevin Powell’s videos on YouTube helped me with my fear of CSS and now I’m no longer afraid of it.

At first, I watched tons of YouTube videos trying to learn all that I could about frontend development, but eventually just decided to go with my gut for better or worse and came up with NoMoreCritics.com.

It’s not just another aggregate review site. In fact, there are no reviews or social media aspects to it at all. Instead of reviewing, you rank movies and the rankings are aggregated. It’s completely anonymous allowing people the freedom to promote movies they truly love instead of what the crowd says they should love. Rankings aren’t set in stone either. You may see a movie and fall in love and rank it at the top of your list one day. The next day, you realize that it’s not as good as you remembered and rank it further down your list later. Rankings are meant to change. Sure, there will be some movies that float to the top and hold on for a while, but with users coming and going, I’d expect the rankings to change frequently.

Now, rankings aren’t the only thing the site does. It’s actual goal is to be a discovery site. I want people to find movies that they haven’t heard of before and check them out. So, features were added to cater to that and help people keep track of what they watched, when they watched it, what they want to watch, and where to watch it. It utilizes TMDB and JustWatch for the data, but is not affiliated with them. So don’t blame them if you don’t like it. :)

To sum it up

  • Organic Rankings: Global rankings are driven strictly by active users, and your personal scoring weight scales up the more movies you rank. Individual lists are capped at 250 movies so rankings actually mean something.
  • No Pressure Discovery: Recommendations are tailored purely to your watch list and personal rankings. Everything is anonymous, with no public review pressure (though you can leave private notes for yourself).
  • Still Want to Share?: You can share your rankings with others if you like with a link that expires in 7 days from creation and can be revoked. People will have a window into your rankings with the ability to filter them as they please. It can be anonymous or you can state who you are. That’s up to you.
  • Deep Filtering & Streaming: You can filter any list down by ranking, genre, release date, or where it’s streaming via JustWatch. I also wrote a few positive feature articles with friends focused purely on movie discovery rather than reviews.

Tech Stack & Architecture

  • Frontend: SvelteKit + Svelte 5 Runes
  • Backend: C# / .NET Web API
  • Database: PostgreSQL in Docker
  • CI/CD: GitHub Actions
  • Data Sources: TMDB & JustWatch
  • Animations: GSAP

I used the SvelteKit endpoints as proxies to my .Net backend for secure api calls. I used the server side rendering and fetching mostly instead of client-side fetching. I used GSAP for my landing page animation, but had trouble with utilizing their ScrollTriggers due to timing issues that I ran into that didn’t play well with my smooth scrolling. So, I used Svelte’s builtin scroll binding instead for scroll animations.

I did the first pass with using AI sparingly, so that I could actually learn how to do it on my own. Then, after getting a job where I was forced to be a prompt developer, I embraced AI and used Windsurf/Devin to help with the coding. I used Copilot first, but their new payment system was too expensive for me so I had to switch.

Feedback

I’m looking for some feedback on this and would love to get some more users since it’s mostly just a buddy and me using it. I was the solo developer on this and had to learn a lot about all of the ins and outs of producing a website on my own. This is my first. I’m really nervous about promoting it like this, and would love some constructive feedback. So, if you have a minute, check it out and let me know what you think. Hopefully, some of you will like it and find it useful. NoMoreCritics.com

Thank you for taking the time to read this!

reddit.com
u/EvilDonkey_HeeHaw — 4 days ago

React Server Components, for Svelte

Hey all, last week I had launched a library called Ogygia. It provides islands, Server Islands, Lakes, and all that nice stuff which allows making your Page's JS scale according to what you mark as interactive

I have overhauled all that, and realized that Ive built a machinery to render a Svelte Component on the server, send it over the wire to client, and having it hydrate there normally, with proper JS and interactivity rules. Basically, dissolving another aspect of client:server boundary.

Page: https://ogygia.puruvj.dev/docs/regions/held-regions

Ah and Ive launched content collections too, so, just point it at your .md/.svx files, and render them on your page using `<Region of={data.body} />`, and voila! JS-less md-html render, with all island imports within the .svx files preserved. works for builder io blocks as well:

https://ogygia.puruvj.dev/docs/content/collections

u/PuruVJ — 6 days ago