open-silong
Open-source, self-hostable Notion/Obsidian-style workspace — block editor for notes, docs and lightweight databases, plus a knowledge graph over them. Next.js 16 · React 19 · Convex · Tailwind v4.
Open-source, self-hostable Notion/Obsidian-style workspace — block editor for notes, docs and lightweight databases, plus a knowledge graph over them. Next.js 16 · React 19 · Convex · Tailwind v4.
Open-source, self-hostable Notion/Obsidian-style workspace — block editor for notes, docs and lightweight databases, plus a knowledge graph over them. Next.js 16 · React 19 · Convex · Tailwind v4.
Open-source, self-hostable collaborative workspace — inspired by Notion & Obsidian.
Live demo · Docs · Contributing · Security
A block-based workspace for notes, docs, and lightweight databases, with an Obsidian-style knowledge graph on top. Built for teams that want to own their data: self-host the full stack with Docker Compose, or run on Convex Cloud free tier. MIT licensed. No vendor lock-in.
Inspired by Notion & Obsidian. open-silong is an independent, clean-room project — not affiliated with, endorsed by, or connected to Notion Labs, Inc. or Dynalist Inc. It borrows ideas (the block editor, the knowledge graph), never code or brand assets. See
TRADEMARKS.md.

| Block editor | Database — Table | Database — Board |
|---|---|---|
![]() |
![]() |
![]() |
| Template gallery | Admin panel | Command palette |
![]() |
![]() |
![]() |
| Dark mode | Mobile | First-run setup |
|---|---|---|
![]() |
![]() |
![]() |
Captured live on silong-os.vercel.app, signed in as the workspace superadmin (demo workspace seeded from the
/setupwizard).
[[wikilink]], @mention, #tag, and database row — with backlinks
and unresolved "ghost" nodes. Live d3-force layout with tunable
forces, cluster tinting, and focus/neighbourhood highlighting.@page mentions,
presence indicators, version snapshots./mcp/v1).One-click: Deploy with Vercel —
only asks for CONVEX_DEPLOY_KEY (create a project at
dashboard.convex.dev → Settings → Deploy
Keys). The build deploys the Convex functions, provisions the auth keys,
and injects NEXT_PUBLIC_CONVEX_URL automatically. Your first visit
lands on the /setup wizard: claim the owner (superadmin) account and
seed the template gallery + demo workspace in one click.
Local development:
git clone https://github.com/rahmanef63/open-silong.git
cd open-silong
bun install
cp .env.example .env.local # fill NEXT_PUBLIC_CONVEX_URL after step 4
bunx convex dev # creates Convex Cloud project, prints URL
bun run dev # http://localhost:3000
Convex Cloud free tier covers small teams. Full walk-through in
DEPLOY.md.
git clone https://github.com/rahmanef63/open-silong.git
cd open-silong
cp .env.example .env.local # fill INSTANCE_*, JWT_*, POSTGRES_URL
docker compose up -d # Convex backend on port 3210
bun install
bunx convex deploy --yes # push schema + functions
bun run dev # http://localhost:3000
Full Dokploy + Traefik + Postgres + S3 setup in
DEPLOY.md.
convex/auth.ts already wires Google — just provide credentials:
# 1. Google Cloud Console → APIs & Services → Credentials → Create OAuth 2.0
# client (Web app). Authorized redirect URI:
# https://<your-CONVEX_SITE_ORIGIN>/api/auth/callback/google
# 2. Set on Convex backend
bunx convex env set AUTH_GOOGLE_ID <client-id>.apps.googleusercontent.com
bunx convex env set AUTH_GOOGLE_SECRET <client-secret>
The "Sign in with Google" button in /auth activates automatically
once those two env vars are set. Step-by-step including consent screen
setup + adding GitHub/Apple/Discord providers:
DEPLOY.md#google-oauth-sign-in-optional.
silong-os.vercel.app — public demo. Lands you straight in a guest workspace (no sign-up needed), or create an email + password account to keep your data. Instance is shared.
Looking for the UI as a localStorage-only starter? The same editor
ships as notion-page-clone-os in the
rahman-resources template
marketplace:
bunx rahman-resources@latest add notion-page-clone-os
| Layer | Choice | Why |
|---|---|---|
| Frontend | Next 16 (App Router) + React 19 | RSC, streaming, file-based routing |
| Styling | Tailwind v4 + shadcn/ui | Theme tokens, primitives, dark mode |
| Backend | Convex 1.43 (self-hostable) | Realtime, optimistic, typed end-to-end |
| Auth | @convex-dev/auth |
Magic-link, OAuth-ready, no Clerk |
| Storage | Convex file storage OR S3 adapter | Pluggable per slice |
| Search | Convex full-text index | No external search service |
| Deploy | Docker Compose + Traefik (self-host) OR Convex Cloud | Pick your trade-off |
A one-screen system view. The full set — data model, auth/authz flow, slice
graph, and the memory-graph pipeline — lives in
docs/architecture/diagrams.md.
flowchart LR
B["Browser<br/>Next 16 · React 19"] --> P["proxy.ts<br/>optimistic auth gate"]
B -- "reactive queries" --> C["Convex backend<br/>queries · mutations<br/>in-handler authz"]
P --> C
C --> S["schema.ts · 32 tables"]
S --> DB[("Postgres / Convex Cloud")]
C --> F[("Files: Convex blob / S3")]
A["AI agents"] -- "Notion-canonical JSON" --> H["MCP HTTP surface"] --> C
Repository layout:
app/ Next 16 App Router routes
dashboard/* Authenticated surfaces (pages, db, settings, …)
share/[id] Public read-only share surface
preview/* Marketing + sandbox
frontend/
slices/<name>/ Vertical feature slices — see docs/api/slices.md
shared/ Cross-slice primitives, providers, store hooks
proxy.ts Convex auth optimistic gate (not the security boundary)
convex/
features/<name>/ Per-feature backend (schema + queries + mutations)
_shared/ Auth helpers, rate limit, workspace gates
http.ts Public HTTP routes (share, MCP)
mcp/ MCP HTTP surface (Notion-canonical JSON)
docker-compose.yml Convex self-hosted (port 3210, Traefik-frontable)
The codebase follows a slice architecture: each feature lives in
frontend/slices/<name>/ with optional convex/features/<name>/
mirror. Cross-slice imports go through the barrel only. See
CONTRIBUTING.md for the rules.
| Topic | Where |
|---|---|
| Documentation index (what is current, what is archived) | docs/README.md |
| Per-slice API + UX docs | docs/api/ |
| Architecture diagrams (system · data model · flows) | docs/architecture/diagrams.md |
| Deploy walkthroughs (cloud + self-host + Dokploy) | DEPLOY.md |
| Slice catalog (every feature in one page) | docs/api/slices.md |
| Architecture decisions + audit notes | docs/audit/ |
| Historical / superseded docs | docs/archive/ |
| Contributing guide | CONTRIBUTING.md |
| Roadmap + good first issues | ROADMAP.md |
| Security policy | SECURITY.md |
| Code of Conduct | CODE_OF_CONDUCT.md |
| Trademarks + inspiration + legal notes | TRADEMARKS.md |
| Changelog | CHANGELOG.md |
See ROADMAP.md for the full picture — what is next,
the known gaps and debt, and what is explicitly out of scope.
Bug reports, feature ideas, doc fixes, and code PRs are all welcome.
The maintainer pushes straight to main; outside contributions come in
as pull requests and get CI-checked. Read
CONTRIBUTING.md for dev setup, the slice
architecture, and PR conventions — and
ROADMAP.md for a list of verified
small tasks to start on.
By participating, you agree to the Code of Conduct.
Found a vulnerability? Please don't open a public issue. Email
security@rahmanef.com or use a private GitHub Security Advisory —
see SECURITY.md for SLAs and scope.
MIT © 2026 Rahman Effendi and open-silong contributors.
open-silong is an independent open-source project. It is not
affiliated with, sponsored by, endorsed by, or associated with Notion
Labs, Inc. or Dynalist Inc. (the maker of Obsidian) in any way.
It is inspired by Notion (the block editor + lightweight databases) and Obsidian (the local-first knowledge graph). "Notion" and "Obsidian" are trademarks of their respective owners, used here only in a nominative / descriptive sense to identify familiar UI patterns — analogous to how an "iPhone case" advertises compatibility without claiming any link to Apple.
open-silong is a clean-room implementation built independently on Convex, Next.js, shadcn/ui, and the open-source d3-force layout. No proprietary Notion or Obsidian code, design files, brand assets, or trade secrets are used. Import/export adapters target documented public file formats purely for interoperability.
A full plain-language explanation — the idea/expression distinction,
nominative fair use, and international (EU/CJEU) anchors — is in
TRADEMARKS.md. If you represent a rights holder
and have a good-faith concern, reach us via the email in
SECURITY.md — we will adjust naming, disclaimers, or
surfaces in good faith.
This notice is not legal advice; consult a qualified attorney for guidance specific to your jurisdiction and use.