VS-CRM: A self-hosted CRM that runs inside VS Code, on a database you own
A VS Code-native CRM with optimistic mutations, realtime sync, and PDF invoices. Powered entirely by the user's own Supabase database, no middleman, no lock-in.
- Role
- Lead Developer
- Timeline
- 2 Month
- Year
- 2026
- Status
- In Progress
vs-crm is a full-featured CRM that runs as a Visual Studio Code extension. It manages clients, leads, projects, tasks, time tracking, invoices (with branded PDF export), expenses, and reports — without ever leaving the editor. Every byte of customer data lives in the user's own Supabase project, not on a server I control.
Under the hood it's a Svelte 5 webview talking to Supabase over the user's own URL and keys (stored in VS Code's OS-level SecretStorage). I built it on top of TanStack Query for caching, optimistic mutations, and live multi-tab sync via Supabase Realtime — the same data layer you'd expect from a polished SaaS product, only the database belongs to whoever installs it.
It ships with auto-applying schema migrations, a one-click onboarding flow that bootstraps a fresh Supabase project, OAuth (Google / GitHub) routed back into VS Code via a custom URI handler, file uploads to a private storage bucket, and a notifications inbox. The whole thing is open source on GitHub — install it, fork it, extend it, host it for your team.
Every CRM I've ever used has the same fundamental problem: it isn't yours.
You sign up for a SaaS CRM and within a quarter you realize you've handed over the most sensitive data your business has — every client, every lead, every invoice, every conversation — to a vendor whose incentives are not aligned with yours. They decide what features ship. They decide what you pay per seat. They decide when the pricing tier you signed up for gets sunset and you get pushed to the one that costs three times more. And if a billing dispute, a TOS interpretation, or just a bad day in their support queue ever goes sideways, they can lock your account and take your operational backbone offline at any moment — leads you can't contact, invoices you can't generate, history you can't export.
The deeper issue is the database. You don't own it. You can't SELECT *. You can't add a column when your workflow needs one. You can't run a custom report the dashboard doesn't expose. You can't migrate to another tool without paying someone to write a one-off ETL — assuming the export endpoint even gives you everything. Your data is in their system, not yours.
On top of all of that, there's the workflow tax: every CRM lives in its own browser tab, away from where the work actually happens. For anyone who spends their day in an editor — developers, indie consultants, technical founders — context-switching to a separate web app to log a client call or send an invoice is friction that compounds every single day.
I wanted a CRM where I owned the database, owned the code, and never left the editor.
vs-crm is a CRM you install as a VS Code extension and point at your own Supabase project. That single architectural choice flips every problem above on its head.
You own the database. The extension stores your Supabase URL and keys in VS Code's OS-level SecretStorage and talks directly to your Postgres instance over the wire. There is no vs-crm server, no vs-crm database, no vs-crm middleman. I have zero access to user data. If the project disappeared from the Marketplace tomorrow, every install would keep working — the data is sitting in a Supabase project the user controls, with the standard Postgres dump/restore tooling available to migrate it anywhere.
You own the schema. All tables, RLS policies, and storage buckets are provisioned through versioned SQL migrations bundled with the extension. They auto-apply on activate the first time you connect, and any future schema bundle ships the same way — friction-free upgrades, with the migration history recorded in a _vscrm_migrations table you can inspect and audit. Need a column the product doesn't have? Add it in your Supabase SQL editor; the existing UI keeps working, and you can fork the extension to surface the new field.
You own the code. vs-crm is open source on GitHub: it will be open source soon when i publish it and will share the github link here. Clone it, audit it, fork it, change the brand color, swap in your own currency rules, ship a private build to your team — the whole thing is a normal TypeScript + Svelte 5 codebase with esbuild and a transparent build pipeline. There are no obfuscated binaries and no SaaS dependencies.
It lives inside VS Code. A single command (vs-crm: Open) brings the panel up next to your code. The webview is a real Svelte 5 + Tailwind app — themed against --vscode-* CSS variables so it inherits your editor theme automatically (light, dark, high-contrast all work). OAuth (Google / GitHub) flows back into the editor through a custom URI handler. PDFs save to your file system through VS Code's native dialogs. Notifications surface in a header bell. Every list page has filters and sorting. Optimistic mutations + Supabase Realtime mean changes feel instant and stay in sync across windows.
The result is a CRM that costs you the price of a Supabase project (free tier covers most solo users), can never be taken away, and is one git pull away from being whatever you need it to be.
About this project
-
VS-CRM is a full-featured CRM that runs as a Visual Studio Code extension, so you can manage your business without ever leaving the editor. It handles clients, leads, projects, tasks, time tracking, invoices with branded PDF export, expenses, and reports. Every list page has filtering and sorting, and there is a notifications inbox and file uploads to a private storage bucket.
-
All of your data lives in your own Supabase project, not on any server controlled by the developer. The extension stores your Supabase URL and keys in VS Code's OS-level SecretStorage and talks directly to your own Postgres instance, so there is no middleman and the developer has zero access to user data. If the extension ever vanished from the Marketplace, every install would keep working because the data sits in a Supabase project you control and can dump, restore, or migrate anywhere.
-
The webview is a Svelte 5 and Tailwind app written in TypeScript and bundled with esbuild, themed against VS Code CSS variables so it inherits your editor theme automatically. It talks to Supabase using the user's own URL and keys, and the data layer is built on TanStack Query for caching, optimistic mutations, and live multi-tab sync via Supabase Realtime. It also includes auto-applying versioned SQL migrations and OAuth via Google or GitHub routed back into VS Code through a custom URI handler.
-
It is aimed at people who spend their day inside an editor, such as developers, indie consultants, and technical founders, who find it a constant friction to context-switch to a separate web app just to log a client call or send an invoice. It is also for anyone who wants true ownership of their CRM, the database, the schema, and the code, rather than handing their most sensitive business data to a SaaS vendor whose pricing and account access they cannot control.
-
Yes, VS-CRM is intended to be open source on GitHub once it is published, with the repository link to be shared at that point. It is built as a normal TypeScript and Svelte 5 codebase with a transparent build pipeline, no obfuscated binaries, and no SaaS dependencies, so it can be cloned, audited, forked, and self-hosted for a team. The project is currently In Progress, built by Abdulkader Safi as Lead Developer over roughly two months.