SvelteKit
FluidKit
Python

FluidKit

Web development for the Pythonist

Write backend functions in Python — FluidKit turns them into type‑safe SvelteKit remote functions. No glue code. No duplicated types.

Write Python. Use it in Svelte.

Decorate a function on the left — import and use it on the right. FluidKit generates the bridge, the types, and the cache invalidation.

src/lib/posts.py python
















+page.svelte svelte
 1<script>
 2  import { get_posts, like_post, add_post }
 3    from '$lib/posts.remote';
 4</script>
 5
 6<!-- @query → await directly in templates -->
 7{#each await get_posts() as post}
 8  <h2>{post.title}</h2>
 9  <p>{post.content}</p>
10
11  <!-- @command → call from event handlers -->
12  <button onclick={() => like_post(post.id)}>
13    👍 {post.likes}
14  </button>
15{/each}
16
17<!-- @form → spread onto form elements -->
18<form {...add_post}>
19  <input {...add_post.fields.title.as('text')} />
20  <input {...add_post.fields.content.as('text')} />
21  <button>Add Post</button>
22</form>

Under the Hood

One decorator. Three things happen.

You write
@query
@query
async def get_posts():
return await db.get_all()
FluidKit registers
FastAPI endpoint
POST /remote/get_posts
validates input
forwards cookies
returns typed JSON
You import
.svelte
import { get_posts }
from '$lib/posts.remote'
await get_posts()

Zero to Running in Seconds

No system Node.js needed. FluidKit bundles everything.

~
$
FluidKit