├── .changeset
├── README.md
├── config.json
└── wise-keys-shout.md
├── .editorconfig
├── .envrc
├── .git-blame-ignore-revs
├── .github
├── ISSUE_TEMPLATE
│ └── docs-request.md
├── actions
│ ├── android-emulator
│ │ └── action.yml
│ └── source-code
│ │ └── action.yml
└── workflows
│ ├── build-examples.yaml
│ ├── build-starters.yaml
│ ├── code-quality.yml
│ ├── e2e-rn-test.yml
│ ├── jazz-run.yml
│ ├── playwright.yml
│ ├── pre-release.yml
│ ├── release.yml
│ └── unit-test.yml
├── .gitignore
├── .node-version
├── .npmrc
├── .nvmrc
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── biome.json
├── examples
├── betterauth
│ ├── .env
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── components.json
│ ├── next.config.ts
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.mjs
│ ├── public
│ │ ├── jazz-logo.svg
│ │ └── jazz.svg
│ ├── src
│ │ ├── app
│ │ │ ├── (app)
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── page.tsx
│ │ │ │ └── settings
│ │ │ │ │ └── page.tsx
│ │ │ ├── api
│ │ │ │ └── auth
│ │ │ │ │ └── [...all]
│ │ │ │ │ └── route.ts
│ │ │ ├── auth
│ │ │ │ ├── forgot-password
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── reset-password
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── sign-in
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── sign-up
│ │ │ │ │ └── page.tsx
│ │ │ │ └── sso-providers.ts
│ │ │ ├── favicon.ico
│ │ │ ├── globals.css
│ │ │ └── layout.tsx
│ │ ├── components
│ │ │ ├── JazzAndAuth.tsx
│ │ │ ├── SSOButton.tsx
│ │ │ ├── forgot-password-form.tsx
│ │ │ ├── navbar.tsx
│ │ │ ├── reset-password-form.tsx
│ │ │ ├── signin-form.tsx
│ │ │ ├── signup-form.tsx
│ │ │ ├── ui
│ │ │ │ ├── button.tsx
│ │ │ │ ├── card.tsx
│ │ │ │ ├── input.tsx
│ │ │ │ ├── label.tsx
│ │ │ │ └── sonner.tsx
│ │ │ └── user-settings.tsx
│ │ └── lib
│ │ │ ├── auth.ts
│ │ │ ├── socialProviders.ts
│ │ │ └── utils.ts
│ ├── tests
│ │ ├── authFlow.spec.ts
│ │ └── pages
│ │ │ └── HomePage.ts
│ └── tsconfig.json
├── chat-rn-expo-clerk
│ ├── .env
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── app.json
│ ├── app
│ │ ├── (app)
│ │ │ ├── _layout.tsx
│ │ │ └── index.tsx
│ │ ├── (auth)
│ │ │ ├── _layout.tsx
│ │ │ ├── sign-in-oauth.tsx
│ │ │ ├── sign-in.tsx
│ │ │ └── sign-up.tsx
│ │ ├── +html.tsx
│ │ ├── +not-found.tsx
│ │ ├── _layout.tsx
│ │ └── chat
│ │ │ ├── [chatId].tsx
│ │ │ ├── _layout.tsx
│ │ │ └── index.tsx
│ ├── assets
│ │ ├── fonts
│ │ │ └── SpaceMono-Regular.ttf
│ │ └── images
│ │ │ ├── adaptive-icon.png
│ │ │ ├── dark-logo.png
│ │ │ ├── favicon.png
│ │ │ ├── hero.png
│ │ │ ├── icon.png
│ │ │ ├── light-logo.png
│ │ │ ├── partial-react-logo.png
│ │ │ ├── react-logo.png
│ │ │ ├── react-logo@2x.png
│ │ │ ├── react-logo@3x.png
│ │ │ └── splash.png
│ ├── babel.config.js
│ ├── cache.ts
│ ├── eas.json
│ ├── global.css
│ ├── index.js
│ ├── metro.config.js
│ ├── nativewind-env.d.ts
│ ├── package.json
│ ├── polyfills.js
│ ├── src
│ │ ├── apiKey.ts
│ │ ├── auth-context.tsx
│ │ └── schema.ts
│ ├── tailwind.config.js
│ └── tsconfig.json
├── chat-rn-expo
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── app.json
│ ├── assets
│ │ ├── adaptive-icon.png
│ │ ├── favicon.png
│ │ ├── icon.png
│ │ └── splash-icon.png
│ ├── index.ts
│ ├── package.json
│ ├── polyfills.ts
│ ├── src
│ │ ├── App.tsx
│ │ ├── apiKey.ts
│ │ ├── chat.tsx
│ │ └── schema.ts
│ ├── test
│ │ └── e2e
│ │ │ ├── erase_text.yml
│ │ │ ├── flow.yml
│ │ │ └── run.sh
│ └── tsconfig.json
├── chat-rn
│ ├── .bundle
│ │ └── config
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── .gitkeep
│ ├── .prettierrc.js
│ ├── .watchmanconfig
│ ├── CHANGELOG.md
│ ├── Gemfile
│ ├── Gemfile.lock
│ ├── README.md
│ ├── android
│ │ ├── app
│ │ │ ├── build.gradle
│ │ │ ├── debug.keystore
│ │ │ ├── proguard-rules.pro
│ │ │ └── src
│ │ │ │ ├── debug
│ │ │ │ └── AndroidManifest.xml
│ │ │ │ └── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── chatrn
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ └── MainApplication.kt
│ │ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ └── rn_edit_text_material.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ └── values
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ ├── build.gradle
│ │ ├── gradle.properties
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ └── settings.gradle
│ ├── app.json
│ ├── babel.config.js
│ ├── index.js
│ ├── ios
│ │ ├── .xcode.env
│ │ ├── ChatRN.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── xcshareddata
│ │ │ │ └── xcschemes
│ │ │ │ └── ChatRN.xcscheme
│ │ ├── ChatRN.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ ├── ChatRN
│ │ │ ├── AppDelegate.h
│ │ │ ├── AppDelegate.mm
│ │ │ ├── Images.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ ├── Info.plist
│ │ │ ├── LaunchScreen.storyboard
│ │ │ ├── PrivacyInfo.xcprivacy
│ │ │ └── main.m
│ │ ├── ChatRNTests
│ │ │ ├── ChatRNTests.m
│ │ │ └── Info.plist
│ │ ├── Podfile
│ │ └── Podfile.lock
│ ├── metro.config.js
│ ├── package.json
│ ├── src
│ │ ├── App.tsx
│ │ ├── apiKey.ts
│ │ ├── chat.tsx
│ │ ├── invite.tsx
│ │ ├── polyfills.ts
│ │ ├── schema.ts
│ │ └── theme.ts
│ └── tsconfig.json
├── chat-vue
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── env.d.ts
│ ├── index.html
│ ├── package.json
│ ├── postcss.config.js
│ ├── public
│ │ └── favicon.ico
│ ├── src
│ │ ├── App.vue
│ │ ├── apiKey.ts
│ │ ├── assets
│ │ │ ├── base.css
│ │ │ ├── logo.svg
│ │ │ └── main.css
│ │ ├── components
│ │ │ ├── AppContainer.vue
│ │ │ ├── BubbleBody.vue
│ │ │ ├── BubbleContainer.vue
│ │ │ ├── BubbleInfo.vue
│ │ │ ├── ChatBody.vue
│ │ │ ├── ChatBubble.vue
│ │ │ ├── ChatInput.vue
│ │ │ ├── EmptyChatMessage.vue
│ │ │ └── TopBar.vue
│ │ ├── index.css
│ │ ├── main.ts
│ │ ├── router.ts
│ │ ├── schema.ts
│ │ └── views
│ │ │ ├── ChatView.vue
│ │ │ └── HomeView.vue
│ ├── tailwind.config.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ └── vite.config.ts
├── chat
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── Dockerfile
│ ├── README.md
│ ├── index.html
│ ├── job-template.nomad
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.js
│ ├── public
│ │ └── jazz-logo.png
│ ├── src
│ │ ├── apiKey.ts
│ │ ├── app.tsx
│ │ ├── chatScreen.tsx
│ │ ├── index.css
│ │ ├── schema.ts
│ │ ├── themeProvider.tsx
│ │ ├── ui.tsx
│ │ ├── util.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tests
│ │ ├── chat.spec.ts
│ │ └── pages
│ │ │ └── ChatPage.ts
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── clerk
│ ├── .env
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── index.html
│ ├── package.json
│ ├── playwright.config.ts
│ ├── src
│ │ ├── App.tsx
│ │ ├── apiKey.ts
│ │ ├── index.css
│ │ ├── main.tsx
│ │ └── vite-env.d.ts
│ ├── tests
│ │ ├── expiration.spec.ts
│ │ ├── logout.spec.ts
│ │ └── reload.spec.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── file-share-svelte
│ ├── .gitignore
│ ├── .npmrc
│ ├── .prettierignore
│ ├── .prettierrc
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── eslint.config.js
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.js
│ ├── src
│ │ ├── apiKey.ts
│ │ ├── app.css
│ │ ├── app.d.ts
│ │ ├── app.html
│ │ ├── lib
│ │ │ ├── components
│ │ │ │ └── FileItem.svelte
│ │ │ ├── index.ts
│ │ │ ├── schema.ts
│ │ │ └── utils.ts
│ │ └── routes
│ │ │ ├── +layout.svelte
│ │ │ ├── +page.svelte
│ │ │ └── file
│ │ │ └── [fileId]
│ │ │ └── +page.svelte
│ ├── static
│ │ ├── favicon.png
│ │ └── jazz-logo.png
│ ├── svelte.config.js
│ ├── tailwind.config.ts
│ ├── tests
│ │ ├── fixtures
│ │ │ └── test-file.txt
│ │ └── upload.spec.ts
│ ├── tsconfig.json
│ └── vite.config.ts
├── filestream
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── index.html
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.js
│ ├── public
│ │ └── favicon.ico
│ ├── src
│ │ ├── App.tsx
│ │ ├── FileWidget.tsx
│ │ ├── Logo.tsx
│ │ ├── apiKey.ts
│ │ ├── index.css
│ │ ├── main.tsx
│ │ ├── schema.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tests
│ │ └── starter.spec.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── form
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── index.html
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.js
│ ├── public
│ │ └── favicon.ico
│ ├── src
│ │ ├── App.tsx
│ │ ├── CreateOrder.tsx
│ │ ├── DraftIndicator.tsx
│ │ ├── EditOrder.tsx
│ │ ├── Errors.tsx
│ │ ├── LinkToHome.tsx
│ │ ├── OrderForm.tsx
│ │ ├── OrderThumbnail.tsx
│ │ ├── Orders.tsx
│ │ ├── apiKey.ts
│ │ ├── index.css
│ │ ├── main.tsx
│ │ ├── schema.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tests
│ │ └── form.spec.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ ├── vite.config.d.ts
│ ├── vite.config.js
│ └── vite.config.ts
├── image-upload
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── index.html
│ ├── package.json
│ ├── postcss.config.js
│ ├── public
│ │ └── favicon.ico
│ ├── src
│ │ ├── App.tsx
│ │ ├── ImageUpload.tsx
│ │ ├── apiKey.ts
│ │ ├── index.css
│ │ ├── main.tsx
│ │ ├── schema.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── inspector
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── Dockerfile
│ ├── README.md
│ ├── favicon.ico
│ ├── index.html
│ ├── job-template.nomad
│ ├── package.json
│ ├── postcss.config.js
│ ├── public
│ │ └── jazz-logo.png
│ ├── src
│ │ ├── apiKey.ts
│ │ ├── app.tsx
│ │ ├── index.css
│ │ ├── viewer
│ │ │ ├── index.tsx
│ │ │ ├── new-app.tsx
│ │ │ └── use-page-path.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── jazz-nextjs
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── next.config.ts
│ ├── package.json
│ ├── postcss.config.mjs
│ ├── src
│ │ ├── app
│ │ │ ├── globals.css
│ │ │ ├── layout.tsx
│ │ │ ├── page.tsx
│ │ │ └── profile
│ │ │ │ └── [profileId]
│ │ │ │ └── page.tsx
│ │ ├── jazz.tsx
│ │ └── jazzSSR.ts
│ └── tsconfig.json
├── jazz-paper-scissors
│ ├── .env.example
│ ├── .gitignore
│ ├── .prettierignore
│ ├── README.md
│ ├── components.json
│ ├── generate-env.ts
│ ├── index.html
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── manifest.json
│ │ └── robots.txt
│ ├── src
│ │ ├── apiKey.ts
│ │ ├── app.tsx
│ │ ├── components
│ │ │ └── ui
│ │ │ │ ├── button.tsx
│ │ │ │ ├── card.tsx
│ │ │ │ ├── input.tsx
│ │ │ │ ├── jazz-and-auth.tsx
│ │ │ │ ├── label.tsx
│ │ │ │ └── separator.tsx
│ │ ├── constants.ts
│ │ ├── index.css
│ │ ├── lib
│ │ │ └── utils.ts
│ │ ├── main.tsx
│ │ ├── routeTree.gen.ts
│ │ ├── routes
│ │ │ ├── __root.tsx
│ │ │ ├── _authenticated.tsx
│ │ │ ├── _authenticated
│ │ │ │ ├── game.$gameId.tsx
│ │ │ │ └── waiting-room.$waitingRoomId.tsx
│ │ │ └── index.tsx
│ │ ├── schema.ts
│ │ └── worker.ts
│ ├── tsconfig.json
│ └── vite.config.ts
├── multi-cursors
│ ├── .env
│ ├── .env.local.example
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── favicon.ico
│ ├── index.html
│ ├── package.json
│ ├── postcss.config.js
│ ├── src
│ │ ├── App.tsx
│ │ ├── Logo.tsx
│ │ ├── apiKey.ts
│ │ ├── components
│ │ │ ├── Boundary.tsx
│ │ │ ├── Canvas.tsx
│ │ │ ├── CanvasBackground.tsx
│ │ │ ├── CanvasDemoContent.tsx
│ │ │ ├── Container.tsx
│ │ │ ├── Cursor.tsx
│ │ │ └── CursorLabel.tsx
│ │ ├── hooks
│ │ │ └── useCanvas.ts
│ │ ├── index.css
│ │ ├── main.tsx
│ │ ├── schema.ts
│ │ ├── types.ts
│ │ ├── utils
│ │ │ ├── __tests__
│ │ │ │ ├── boundaryIntersection.test.ts
│ │ │ │ ├── getLabelPosition.test.ts
│ │ │ │ └── isOutOfBounds.test.ts
│ │ │ ├── boundaryIntersection.ts
│ │ │ ├── centerOfBounds.ts
│ │ │ ├── getColor.ts
│ │ │ ├── getLabelPosition.ts
│ │ │ ├── getName.ts
│ │ │ ├── isOutOfBounds.ts
│ │ │ ├── loadCursorContainer.ts
│ │ │ └── throttleTime.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── multiauth
│ ├── .env
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── eslint.config.js
│ ├── favicon.ico
│ ├── index.html
│ ├── package.json
│ ├── src
│ │ ├── App.css
│ │ ├── App.tsx
│ │ ├── apiKey.ts
│ │ ├── components
│ │ │ ├── Home.tsx
│ │ │ └── OmniAuth.tsx
│ │ ├── index.css
│ │ ├── main.tsx
│ │ ├── vite-env.d.ts
│ │ └── wordlist.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ └── vite.config.ts
├── music-player
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── Dockerfile
│ ├── README.md
│ ├── components.json
│ ├── favicon.ico
│ ├── index.html
│ ├── job-template.nomad
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.js
│ ├── public
│ │ ├── example.mp3
│ │ └── jazz-logo.png
│ ├── src
│ │ ├── 1_schema.ts
│ │ ├── 2_main.tsx
│ │ ├── 3_HomePage.tsx
│ │ ├── 4_actions.ts
│ │ ├── 5_useMediaPlayer.ts
│ │ ├── 6_InvitePage.tsx
│ │ ├── apiKey.ts
│ │ ├── components
│ │ │ ├── AuthButton.tsx
│ │ │ ├── AuthModal.tsx
│ │ │ ├── FileUploadButton.tsx
│ │ │ ├── LocalOnlyTag.tsx
│ │ │ ├── LogoutButton.tsx
│ │ │ ├── MusicTrackRow.tsx
│ │ │ ├── MusicTrackTitleInput.tsx
│ │ │ ├── PlayerControls.tsx
│ │ │ ├── PlaylistTitleInput.tsx
│ │ │ ├── SidePanel.tsx
│ │ │ ├── Waveform.tsx
│ │ │ └── ui
│ │ │ │ ├── badge.tsx
│ │ │ │ ├── button.tsx
│ │ │ │ ├── dialog.tsx
│ │ │ │ ├── dropdown-menu.tsx
│ │ │ │ ├── input.tsx
│ │ │ │ ├── label.tsx
│ │ │ │ ├── separator.tsx
│ │ │ │ ├── sheet.tsx
│ │ │ │ ├── sidebar.tsx
│ │ │ │ ├── skeleton.tsx
│ │ │ │ ├── toast.tsx
│ │ │ │ ├── toaster.tsx
│ │ │ │ └── tooltip.tsx
│ │ ├── hooks
│ │ │ ├── use-mobile.tsx
│ │ │ └── use-toast.ts
│ │ ├── index.css
│ │ ├── lib
│ │ │ ├── audio
│ │ │ │ ├── AudioManager.ts
│ │ │ │ ├── getAudioFileData.ts
│ │ │ │ ├── useMediaEndListener.ts
│ │ │ │ ├── usePlayMedia.ts
│ │ │ │ ├── usePlayState.ts
│ │ │ │ └── usePlayerCurrentTime.ts
│ │ │ ├── getters.ts
│ │ │ ├── useKeyboardListener.ts
│ │ │ ├── useUploadExampleData.ts
│ │ │ └── utils.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tests
│ │ ├── auth.spec.ts
│ │ ├── createAndShare.spec.ts
│ │ └── pages
│ │ │ └── HomePage.ts
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── organization
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── favicon.ico
│ ├── index.html
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.js
│ ├── src
│ │ ├── AcceptInvitePage.tsx
│ │ ├── HomePage.tsx
│ │ ├── Layout.tsx
│ │ ├── OrganizationPage.tsx
│ │ ├── apiKey.ts
│ │ ├── components
│ │ │ ├── CreateOrganization.tsx
│ │ │ ├── CreateProject.tsx
│ │ │ ├── Errors.tsx
│ │ │ ├── Heading.tsx
│ │ │ ├── InviteLink.tsx
│ │ │ ├── OrganizationForm.tsx
│ │ │ ├── OrganizationMembers.tsx
│ │ │ └── OrganizationSelector.tsx
│ │ ├── index.css
│ │ ├── main.tsx
│ │ ├── schema.ts
│ │ ├── util.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tests
│ │ └── createAndShare.spec.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ └── vite.config.ts
├── passkey-svelte
│ ├── .gitignore
│ ├── .npmrc
│ ├── .prettierignore
│ ├── .prettierrc
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── eslint.config.js
│ ├── package.json
│ ├── src
│ │ ├── apiKey.ts
│ │ ├── app.d.ts
│ │ ├── app.html
│ │ ├── lib
│ │ │ └── index.ts
│ │ └── routes
│ │ │ ├── +layout.svelte
│ │ │ └── +page.svelte
│ ├── static
│ │ └── favicon.png
│ ├── svelte.config.js
│ ├── tsconfig.json
│ └── vite.config.ts
├── passkey
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── index.html
│ ├── package.json
│ ├── public
│ │ └── favicon.ico
│ ├── src
│ │ ├── App.tsx
│ │ ├── apiKey.ts
│ │ ├── index.css
│ │ ├── main.tsx
│ │ └── vite-env.d.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ ├── vite.config.ts
│ └── vite.config.ts.timestamp-1738152058499-fca68c40d6099.mjs
├── passphrase
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── favicon.ico
│ ├── index.html
│ ├── package.json
│ ├── src
│ │ ├── App.tsx
│ │ ├── index.css
│ │ ├── main.tsx
│ │ ├── vite-env.d.ts
│ │ └── wordlist.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── password-manager
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── demo.png
│ ├── favicon.ico
│ ├── index.html
│ ├── package.json
│ ├── postcss.config.js
│ ├── public
│ │ └── favicon.ico
│ ├── src
│ │ ├── 1_schema.ts
│ │ ├── 2_main.tsx
│ │ ├── 3_vault.tsx
│ │ ├── 4_actions.ts
│ │ ├── 5_App.tsx
│ │ ├── apiKey.ts
│ │ ├── components
│ │ │ ├── alert.tsx
│ │ │ ├── base-modal.tsx
│ │ │ ├── button.tsx
│ │ │ ├── invite-modal.tsx
│ │ │ ├── new-item-modal.tsx
│ │ │ └── table.tsx
│ │ ├── index.css
│ │ ├── types.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── pets
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── Dockerfile
│ ├── README.md
│ ├── components.json
│ ├── favicon.ico
│ ├── index.html
│ ├── job-template.nomad
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.js
│ ├── public
│ │ ├── jazz-logo-low-res.jpg
│ │ └── jazz-logo.png
│ ├── src
│ │ ├── 1_schema.ts
│ │ ├── 2_main.tsx
│ │ ├── 3_NewPetPostForm.tsx
│ │ ├── 4_RatePetPostUI.tsx
│ │ ├── apiKey.ts
│ │ ├── basicComponents
│ │ │ ├── TitleAndLogo.tsx
│ │ │ ├── index.ts
│ │ │ ├── lib
│ │ │ │ └── utils.ts
│ │ │ ├── themeProvider.tsx
│ │ │ └── ui
│ │ │ │ ├── button.tsx
│ │ │ │ ├── input.tsx
│ │ │ │ ├── skeleton.tsx
│ │ │ │ ├── toast.tsx
│ │ │ │ ├── toaster.tsx
│ │ │ │ └── use-toast.ts
│ │ ├── components
│ │ │ └── ShareButton.tsx
│ │ ├── index.css
│ │ ├── lib
│ │ │ └── support.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tests
│ │ ├── createAndShare.spec.ts
│ │ └── pages
│ │ │ ├── HomePage.ts
│ │ │ ├── LoginPage.ts
│ │ │ ├── NewPostPage.ts
│ │ │ └── PostPage.ts
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── reactions
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── favicon.ico
│ ├── index.html
│ ├── package.json
│ ├── src
│ │ ├── App.tsx
│ │ ├── ReactionsScreen.tsx
│ │ ├── apiKey.ts
│ │ ├── index.css
│ │ ├── main.tsx
│ │ ├── schema.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── richtext-tiptap
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── favicon.ico
│ ├── index.html
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.js
│ ├── src
│ │ ├── App.tsx
│ │ ├── AuthButton.tsx
│ │ ├── Editor.tsx
│ │ ├── Logo.tsx
│ │ ├── apiKey.ts
│ │ ├── index.css
│ │ ├── main.tsx
│ │ ├── schema.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── richtext
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── favicon.ico
│ ├── index.html
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.js
│ ├── src
│ │ ├── App.tsx
│ │ ├── AuthButton.tsx
│ │ ├── Editor.tsx
│ │ ├── Logo.tsx
│ │ ├── apiKey.ts
│ │ ├── index.css
│ │ ├── main.tsx
│ │ ├── schema.ts
│ │ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── todo-vue
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── env.d.ts
│ ├── index.html
│ ├── package.json
│ ├── postcss.config.js
│ ├── public
│ │ └── favicon.ico
│ ├── src
│ │ ├── App.vue
│ │ ├── apiKey.ts
│ │ ├── assets
│ │ │ ├── base.css
│ │ │ └── main.css
│ │ ├── main.ts
│ │ ├── router
│ │ │ └── index.ts
│ │ ├── schema.ts
│ │ └── views
│ │ │ └── HomeView.vue
│ ├── tailwind.config.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ └── vite.config.ts
├── todo
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── Dockerfile
│ ├── README.md
│ ├── components.json
│ ├── index.html
│ ├── job-template.nomad
│ ├── package.json
│ ├── postcss.config.js
│ ├── public
│ │ └── jazz-logo.png
│ ├── src
│ │ ├── 1_schema.ts
│ │ ├── 2_main.tsx
│ │ ├── 3_NewProjectForm.tsx
│ │ ├── 4_ProjectTodoTable.tsx
│ │ ├── apiKey.ts
│ │ ├── basicComponents
│ │ │ ├── SubmittableInput.tsx
│ │ │ ├── TitleAndLogo.tsx
│ │ │ ├── index.ts
│ │ │ ├── lib
│ │ │ │ └── utils.ts
│ │ │ ├── themeProvider.tsx
│ │ │ └── ui
│ │ │ │ ├── button.tsx
│ │ │ │ ├── checkbox.tsx
│ │ │ │ ├── input.tsx
│ │ │ │ ├── skeleton.tsx
│ │ │ │ ├── table.tsx
│ │ │ │ ├── toast.tsx
│ │ │ │ ├── toaster.tsx
│ │ │ │ └── use-toast.ts
│ │ ├── components
│ │ │ ├── InviteButton.tsx
│ │ │ └── TaskGenerator.tsx
│ │ ├── generate.ts
│ │ ├── index.css
│ │ ├── vite-env.d.ts
│ │ └── wordlist.ts
│ ├── tailwind.config.ts
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
└── version-history
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── favicon.ico
│ ├── index.html
│ ├── package.json
│ ├── postcss.config.js
│ ├── src
│ ├── App.tsx
│ ├── Issue.tsx
│ ├── IssueVersionHistory.tsx
│ ├── Project.tsx
│ ├── apiKey.ts
│ ├── index.css
│ ├── main.tsx
│ ├── schema.ts
│ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── flake.lock
├── flake.nix
├── homepage
├── Dockerfile
├── design-system
│ ├── .gitignore
│ ├── README.md
│ ├── colors
│ │ └── colors.ts
│ ├── fonts
│ │ ├── CommitMono-Regular.woff
│ │ └── CommitMono-Regular.woff2
│ ├── next.config.mjs
│ ├── package.json
│ ├── postcss.config.mjs
│ ├── public
│ │ ├── next.svg
│ │ └── vercel.svg
│ ├── src
│ │ ├── actions
│ │ │ └── resend.ts
│ │ ├── app
│ │ │ ├── favicon.ico
│ │ │ ├── globals.css
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
│ │ ├── components
│ │ │ ├── atoms
│ │ │ │ ├── Alert.tsx
│ │ │ │ ├── Button.tsx
│ │ │ │ ├── Card.tsx
│ │ │ │ ├── CodeRef.tsx
│ │ │ │ ├── ComingSoonBadge.tsx
│ │ │ │ ├── Copyright.tsx
│ │ │ │ ├── DocNavLink.tsx
│ │ │ │ ├── GridCard.tsx
│ │ │ │ ├── Heading.tsx
│ │ │ │ ├── Headings.tsx
│ │ │ │ ├── Icon.tsx
│ │ │ │ ├── Kicker.tsx
│ │ │ │ ├── ListItem.tsx
│ │ │ │ ├── Paragraph.tsx
│ │ │ │ ├── Separator.tsx
│ │ │ │ ├── Spinner.tsx
│ │ │ │ ├── TextLink.tsx
│ │ │ │ ├── covalues
│ │ │ │ │ ├── CoFeeds.tsx
│ │ │ │ │ ├── CoList.tsx
│ │ │ │ │ └── CoMap.tsx
│ │ │ │ ├── icons
│ │ │ │ │ ├── 404.tsx
│ │ │ │ │ ├── CoFeed.tsx
│ │ │ │ │ ├── CoRecord.tsx
│ │ │ │ │ └── index.tsx
│ │ │ │ └── logos
│ │ │ │ │ ├── GardenLogo.tsx
│ │ │ │ │ ├── GcmpLogo.tsx
│ │ │ │ │ ├── JazzIcon.tsx
│ │ │ │ │ └── JazzLogo.tsx
│ │ │ ├── molecules
│ │ │ │ ├── Breadcrumb.tsx
│ │ │ │ ├── CodeGroup.tsx
│ │ │ │ ├── FeatureCard.tsx
│ │ │ │ ├── GappedGrid.tsx
│ │ │ │ ├── HairlineGrid.tsx
│ │ │ │ ├── HeroHeader.tsx
│ │ │ │ ├── Input.tsx
│ │ │ │ ├── List.tsx
│ │ │ │ ├── Prose.tsx
│ │ │ │ ├── SectionHeader.tsx
│ │ │ │ ├── Select.tsx
│ │ │ │ ├── Testimonial.tsx
│ │ │ │ └── ThemeToggle.tsx
│ │ │ └── organisms
│ │ │ │ ├── Dialog.tsx
│ │ │ │ ├── Dropdown.tsx
│ │ │ │ ├── Footer.tsx
│ │ │ │ ├── Nav.tsx
│ │ │ │ ├── NewsletterForm.tsx
│ │ │ │ ├── OpenGraphImage.tsx
│ │ │ │ └── SocialLinks.tsx
│ │ ├── covalues
│ │ │ ├── layout.tsx
│ │ │ ├── page.tsx
│ │ │ └── schema.ts
│ │ ├── fonts.ts
│ │ └── utils
│ │ │ └── nav.ts
│ ├── tailwind.config.js
│ └── tsconfig.json
├── gcmp
│ ├── .dockerignore
│ ├── .gitignore
│ ├── README.md
│ ├── app
│ │ ├── api
│ │ │ └── rss
│ │ │ │ └── route.ts
│ │ ├── favicon.ico
│ │ ├── globals.css
│ │ ├── layout.tsx
│ │ ├── news
│ │ │ ├── [slug]
│ │ │ │ └── page.tsx
│ │ │ └── page.tsx
│ │ ├── page.tsx
│ │ ├── shiki.css
│ │ └── team
│ │ │ ├── members.ts
│ │ │ └── page.tsx
│ ├── components.json
│ ├── components
│ │ ├── FormattedDate.tsx
│ │ ├── Nav.tsx
│ │ ├── ThemeProvider.tsx
│ │ ├── ThemeToggle.tsx
│ │ ├── TilescapeLogo.tsx
│ │ ├── blog
│ │ │ ├── NewsletterCard.tsx
│ │ │ ├── PostCoverImage.tsx
│ │ │ ├── PostJsonLd.tsx
│ │ │ ├── Posts.tsx
│ │ │ ├── Swishes.tsx
│ │ │ └── posts
│ │ │ │ ├── 1_helloWorld.mdx
│ │ │ │ ├── 2_whatIsJazz.mdx
│ │ │ │ ├── 3_whatWeShippedSinceSummer.mdx
│ │ │ │ └── test.mdx
│ │ ├── favicon.ico
│ │ └── home
│ │ │ ├── Approach.tsx
│ │ │ └── Products.tsx
│ ├── lib
│ │ ├── date.ts
│ │ └── posts.tsx
│ ├── mdx-components.tsx
│ ├── mdx.d.ts
│ ├── next.config.mjs
│ ├── package.json
│ ├── postcss.config.cjs
│ ├── public
│ │ ├── posts
│ │ │ ├── post1.png
│ │ │ ├── post1.svg
│ │ │ ├── post2.png
│ │ │ ├── post2.svg
│ │ │ ├── post3.png
│ │ │ └── post3.svg
│ │ ├── social-image.png
│ │ └── team
│ │ │ ├── andrei.jpeg
│ │ │ ├── anselm.jpg
│ │ │ ├── benjamin.jpg
│ │ │ ├── emil.jpg
│ │ │ ├── gio.jpg
│ │ │ ├── guido.jpeg
│ │ │ ├── james.jpg
│ │ │ ├── marina.jpeg
│ │ │ ├── meg.jpg
│ │ │ ├── nikita.jpg
│ │ │ ├── nikos.png
│ │ │ ├── stephanie.jpg
│ │ │ └── trisha.png
│ ├── tailwind.config.ts
│ └── tsconfig.json
├── homepage
│ ├── .dockerignore
│ ├── .env.example
│ ├── .gitignore
│ ├── README.md
│ ├── app
│ │ ├── (docs)
│ │ │ ├── api-reference
│ │ │ │ ├── [package]
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ └── page.tsx
│ │ │ └── docs
│ │ │ │ └── [framework]
│ │ │ │ ├── [topic]
│ │ │ │ ├── [subtopic]
│ │ │ │ │ ├── opengraph-image.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── opengraph-image.tsx
│ │ │ │ └── page.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── opengraph-image.tsx
│ │ │ │ └── page.tsx
│ │ ├── (others)
│ │ │ ├── (home)
│ │ │ │ ├── coValueDescriptions
│ │ │ │ │ └── coPlainTextDescription.mdx
│ │ │ │ ├── page.tsx
│ │ │ │ └── toolkit
│ │ │ │ │ ├── cursorsAndCarets.mdx
│ │ │ │ │ ├── twoWaySync.mdx
│ │ │ │ │ └── videoPresenceCalls.mdx
│ │ │ ├── cloud
│ │ │ │ ├── cloudPlusBackup.mdx
│ │ │ │ ├── cloudPlusDIY.mdx
│ │ │ │ ├── completelyDIY.mdx
│ │ │ │ └── page.tsx
│ │ │ ├── examples
│ │ │ │ └── page.tsx
│ │ │ ├── layout.tsx
│ │ │ ├── showcase
│ │ │ │ └── page.tsx
│ │ │ └── status
│ │ │ │ └── page.tsx
│ │ ├── api
│ │ │ └── latencyMap
│ │ │ │ └── route.ts
│ │ ├── favicon.ico
│ │ ├── globals.css
│ │ ├── layout.tsx
│ │ ├── not-found.tsx
│ │ └── opengraph-image.tsx
│ ├── components
│ │ ├── DiagramAfterJazz.tsx
│ │ ├── DiagramBeforeJazz.tsx
│ │ ├── FakeGetStartedButton.tsx
│ │ ├── FileDownloadLink.tsx
│ │ ├── LatencyChart.tsx
│ │ ├── Pricing.tsx
│ │ ├── SideNav.tsx
│ │ ├── SideNavItem.tsx
│ │ ├── SideNavLayout.tsx
│ │ ├── SideNavSection.tsx
│ │ ├── ThemeProvider.tsx
│ │ ├── ThemeToggle.tsx
│ │ ├── TierLogos.tsx
│ │ ├── cloud
│ │ │ ├── latencyMap.tsx
│ │ │ ├── mapTooltip.tsx
│ │ │ ├── ne_110m_land.json
│ │ │ ├── pingColorThresholds.ts
│ │ │ └── pings.json
│ │ ├── docs
│ │ │ ├── ApiNav.tsx
│ │ │ ├── ContentByFramework.tsx
│ │ │ ├── DocHeading.tsx
│ │ │ ├── DocsLayout.tsx
│ │ │ ├── DocsLink.tsx
│ │ │ ├── DocsNav.tsx
│ │ │ ├── Framework.tsx
│ │ │ ├── FrameworkSelect.tsx
│ │ │ ├── HelpLinks.tsx
│ │ │ ├── IssueTrackerPreview.tsx
│ │ │ ├── PreviousNextLinks.tsx
│ │ │ ├── TableOfContents.tsx
│ │ │ ├── packageDocs.tsx
│ │ │ ├── requestProject.ts
│ │ │ └── tags.tsx
│ │ ├── examples
│ │ │ ├── CreateJazzApp.mdx
│ │ │ ├── ExampleCard.tsx
│ │ │ ├── ExampleLinks.tsx
│ │ │ └── ExampleTags.tsx
│ │ ├── footer.tsx
│ │ ├── forMdx.tsx
│ │ ├── home
│ │ │ ├── ChatDemoSection.tsx
│ │ │ ├── CodeStepAction.mdx
│ │ │ ├── CodeStepCloud.mdx
│ │ │ ├── CodeStepRender.mdx
│ │ │ ├── CodeStepSchema.mdx
│ │ │ ├── CollaborationFeaturesSection.tsx
│ │ │ ├── CollaborationInvite.mdx
│ │ │ ├── CollaborationPrivate.mdx
│ │ │ ├── CollaborationPublic.mdx
│ │ │ ├── ComingSoonSection.tsx
│ │ │ ├── CreateJazzApp.mdx
│ │ │ ├── EarlyAdopterSection.tsx
│ │ │ ├── EncryptionSection.tsx
│ │ │ ├── FeaturesSection.tsx
│ │ │ ├── HeroSection.tsx
│ │ │ ├── HowJazzWorksSection.tsx
│ │ │ ├── LocalFirstFeaturesSection.tsx
│ │ │ ├── ProblemStatementSection.tsx
│ │ │ ├── ServerWorkersDiagram.tsx
│ │ │ └── SupportedEnvironmentsSection.tsx
│ │ ├── icons
│ │ │ ├── ClerkFullLogo.tsx
│ │ │ ├── ClerkLogo.tsx
│ │ │ ├── KotlinLogo.tsx
│ │ │ ├── NodejsLogo.tsx
│ │ │ ├── ReactLogo.tsx
│ │ │ ├── ReactNativeLogo.tsx
│ │ │ ├── RustLogo.tsx
│ │ │ ├── SvelteLogo.tsx
│ │ │ ├── SwiftLogo.tsx
│ │ │ └── VueLogo.tsx
│ │ ├── nav.tsx
│ │ └── tooltip.tsx
│ ├── content
│ │ ├── docs
│ │ │ ├── ai-tools.mdx
│ │ │ ├── authentication
│ │ │ │ ├── authentication-states.mdx
│ │ │ │ ├── clerk.mdx
│ │ │ │ ├── clerk
│ │ │ │ │ └── react-native.mdx
│ │ │ │ ├── jazz-cloud.mdx
│ │ │ │ ├── jazz-cloud
│ │ │ │ │ ├── react-native.mdx
│ │ │ │ │ ├── svelte.mdx
│ │ │ │ │ └── vue.mdx
│ │ │ │ ├── overview.mdx
│ │ │ │ ├── passkey.mdx
│ │ │ │ └── passphrase.mdx
│ │ │ ├── building-with-jazz
│ │ │ │ ├── documentation-task-list.md
│ │ │ │ └── technical-content-tracking.md
│ │ │ ├── coming-soon.mdx
│ │ │ ├── design-patterns
│ │ │ │ ├── form.mdx
│ │ │ │ └── organization.mdx
│ │ │ ├── docNavigationItems.js
│ │ │ ├── docNavigationItemsTypes.ts
│ │ │ ├── faq.mdx
│ │ │ ├── groups
│ │ │ │ ├── inheritance.mdx
│ │ │ │ ├── intro.mdx
│ │ │ │ └── sharing.mdx
│ │ │ ├── guide
│ │ │ │ └── react.mdx
│ │ │ ├── index.mdx
│ │ │ ├── inspector.mdx
│ │ │ ├── project-setup
│ │ │ │ ├── providers
│ │ │ │ │ ├── react-native-expo.mdx
│ │ │ │ │ ├── react-native.mdx
│ │ │ │ │ ├── react.mdx
│ │ │ │ │ └── svelte.mdx
│ │ │ │ ├── react-native-expo.mdx
│ │ │ │ ├── react-native.mdx
│ │ │ │ ├── react.mdx
│ │ │ │ ├── server-side.mdx
│ │ │ │ ├── svelte.mdx
│ │ │ │ └── vue.mdx
│ │ │ ├── schemas
│ │ │ │ ├── accounts-and-migrations.mdx
│ │ │ │ └── covalues.mdx
│ │ │ ├── sync-and-storage.mdx
│ │ │ ├── tools
│ │ │ │ └── create-jazz-app.mdx
│ │ │ ├── upgrade
│ │ │ │ ├── 0-10-0.mdx
│ │ │ │ ├── 0-11-0.mdx
│ │ │ │ ├── 0-12-0.mdx
│ │ │ │ ├── 0-13-0.mdx
│ │ │ │ ├── 0-13-0
│ │ │ │ │ ├── react-native-expo.mdx
│ │ │ │ │ └── react-native.mdx
│ │ │ │ ├── 0-14-0.mdx
│ │ │ │ ├── 0-9-0
│ │ │ │ │ ├── react-native.mdx
│ │ │ │ │ ├── react.mdx
│ │ │ │ │ ├── svelte.mdx
│ │ │ │ │ └── vue.mdx
│ │ │ │ ├── 0-9-8.mdx
│ │ │ │ └── react-native-local-persistence.mdx
│ │ │ └── using-covalues
│ │ │ │ ├── cofeeds.mdx
│ │ │ │ ├── colists.mdx
│ │ │ │ ├── comaps.mdx
│ │ │ │ ├── cotexts.mdx
│ │ │ │ ├── creation.mdx
│ │ │ │ ├── filestreams.mdx
│ │ │ │ ├── history-draft.mdx
│ │ │ │ ├── imagedef.mdx
│ │ │ │ ├── imagedef
│ │ │ │ ├── react-native-expo.mdx
│ │ │ │ ├── react-native.mdx
│ │ │ │ └── react.mdx
│ │ │ │ └── subscription-and-loading.mdx
│ │ ├── example.ts
│ │ ├── framework.ts
│ │ ├── marketingCopy.ts
│ │ ├── navigation-items.ts
│ │ ├── packages.ts
│ │ ├── showcase.ts
│ │ └── socials.ts
│ ├── docs
│ │ ├── README.md
│ │ ├── authentication-method-template.md
│ │ └── tone-and-voice.md
│ ├── generate-docs
│ │ ├── llms-full.mjs
│ │ ├── llms-full.test.mjs
│ │ ├── typedocs.mjs
│ │ └── utils
│ │ │ ├── config.mjs
│ │ │ └── index.mjs
│ ├── lib
│ │ ├── docMdxContent.tsx
│ │ ├── use-framework.ts
│ │ └── utils.ts
│ ├── mdx-components.tsx
│ ├── next.config.mjs
│ ├── package.json
│ ├── pnpm-lock.yaml
│ ├── postcss.config.cjs
│ ├── public
│ │ ├── Zod sponsor message.png
│ │ ├── chatgpt-with-llms-full-txt.jpg
│ │ ├── dog.jpg
│ │ ├── hend.png
│ │ ├── invoice-radar.png
│ │ ├── learn-anything.png
│ │ ├── leaves.jpg
│ │ ├── theo-dark.jpg
│ │ ├── theo.jpg
│ │ └── todo.jpg
│ ├── tailwind.config.ts
│ ├── themes
│ │ ├── jazzDark.mjs
│ │ └── jazzLight.mjs
│ ├── tsconfig.json
│ ├── turbo.json
│ └── vercel.json
├── job-template.nomad
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
└── turbo.json
├── ignore-vercel-build.js
├── lefthook.yml
├── package.json
├── packages
├── cojson-storage-indexeddb
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── CoJsonIDBTransaction.ts
│ │ ├── idbClient.ts
│ │ ├── idbNode.ts
│ │ ├── index.ts
│ │ └── tests
│ │ │ ├── CoJsonIDBTransaction.test.ts
│ │ │ ├── idbNode.test.ts
│ │ │ ├── messagesTestUtils.ts
│ │ │ ├── storage.indexeddb.test.ts
│ │ │ └── testUtils.ts
│ ├── tsconfig.json
│ └── vitest.config.ts
├── cojson-storage-sqlite
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── betterSqliteDriver.ts
│ │ ├── index.ts
│ │ ├── sqliteNode.ts
│ │ └── tests
│ │ │ ├── messagesTestUtils.ts
│ │ │ ├── storage.sqlite.test.ts
│ │ │ └── testUtils.ts
│ └── tsconfig.json
├── cojson-storage
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── index.ts
│ │ ├── managerAsync.ts
│ │ ├── managerSync.ts
│ │ ├── sqlite
│ │ │ ├── client.ts
│ │ │ ├── index.ts
│ │ │ ├── node.ts
│ │ │ ├── sqliteMigrations.ts
│ │ │ └── types.ts
│ │ ├── sqliteAsync
│ │ │ ├── client.ts
│ │ │ ├── index.ts
│ │ │ ├── node.ts
│ │ │ └── types.ts
│ │ ├── syncUtils.ts
│ │ ├── tests
│ │ │ ├── fixtureMessages.ts
│ │ │ ├── getDependedOnCoValues.test.ts
│ │ │ ├── messagesTestUtils.ts
│ │ │ ├── storage.sqliteAsync.test.ts
│ │ │ ├── syncManager.test.ts
│ │ │ └── testUtils.ts
│ │ └── types.ts
│ └── tsconfig.json
├── cojson-transport-ws
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── BatchedOutgoingMessages.ts
│ │ ├── WebSocketPeerWithReconnection.ts
│ │ ├── createWebSocketPeer.ts
│ │ ├── index.ts
│ │ ├── serialization.ts
│ │ ├── tests
│ │ │ ├── BatchedOutgoingMessages.test.ts
│ │ │ ├── WebSocketPeerWithReconnection.test.ts
│ │ │ ├── createWebSocketPeer.test.ts
│ │ │ ├── integration.test.ts
│ │ │ ├── syncServer.ts
│ │ │ └── utils.ts
│ │ └── types.ts
│ └── tsconfig.json
├── cojson
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── PeerKnownStates.ts
│ │ ├── PeerState.ts
│ │ ├── PriorityBasedMessageQueue.ts
│ │ ├── SyncStateManager.ts
│ │ ├── base64url.test.ts
│ │ ├── base64url.ts
│ │ ├── coValue.ts
│ │ ├── coValueCore
│ │ │ ├── coValueCore.ts
│ │ │ └── verifiedState.ts
│ │ ├── coValues
│ │ │ ├── account.ts
│ │ │ ├── coList.ts
│ │ │ ├── coMap.ts
│ │ │ ├── coPlainText.ts
│ │ │ ├── coStream.ts
│ │ │ └── group.ts
│ │ ├── coreToCoValue.ts
│ │ ├── crypto
│ │ │ ├── PureJSCrypto.ts
│ │ │ ├── WasmCrypto.ts
│ │ │ └── crypto.ts
│ │ ├── exports.ts
│ │ ├── ids.ts
│ │ ├── index.ts
│ │ ├── jsonStringify.ts
│ │ ├── jsonValue.ts
│ │ ├── localNode.ts
│ │ ├── logger.ts
│ │ ├── media.ts
│ │ ├── permissions.ts
│ │ ├── priority.ts
│ │ ├── streamUtils.ts
│ │ ├── sync.ts
│ │ ├── tests
│ │ │ ├── LinkedList.test.ts
│ │ │ ├── PeerKnownStates.test.ts
│ │ │ ├── PeerState.test.ts
│ │ │ ├── PriorityBasedMessageQueue.test.ts
│ │ │ ├── SyncStateManager.test.ts
│ │ │ ├── account.test.ts
│ │ │ ├── coList.test.ts
│ │ │ ├── coMap.test.ts
│ │ │ ├── coPlainText.test.ts
│ │ │ ├── coStream.test.ts
│ │ │ ├── coValueCore.test.ts
│ │ │ ├── coValueCoreLoadingState.test.ts
│ │ │ ├── crypto.test.ts
│ │ │ ├── cryptoImpl.test.ts
│ │ │ ├── group.addMember.test.ts
│ │ │ ├── group.inheritance.test.ts
│ │ │ ├── group.invite.test.ts
│ │ │ ├── group.removeMember.test.ts
│ │ │ ├── group.roleOf.test.ts
│ │ │ ├── group.test.ts
│ │ │ ├── logger.test.ts
│ │ │ ├── messagesTestUtils.ts
│ │ │ ├── permissions.test.ts
│ │ │ ├── priority.test.ts
│ │ │ ├── sync.auth.test.ts
│ │ │ ├── sync.invite.test.ts
│ │ │ ├── sync.load.test.ts
│ │ │ ├── sync.mesh.test.ts
│ │ │ ├── sync.peerReconciliation.test.ts
│ │ │ ├── sync.storage.test.ts
│ │ │ ├── sync.test.ts
│ │ │ ├── sync.upload.test.ts
│ │ │ └── testUtils.ts
│ │ └── typeUtils
│ │ │ ├── accountOrAgentIDfromSessionID.ts
│ │ │ ├── expectGroup.ts
│ │ │ ├── isAccountID.ts
│ │ │ └── isCoValue.ts
│ └── tsconfig.json
├── create-jazz-app
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── config.ts
│ │ └── index.ts
│ └── tsconfig.json
├── cursor-docs
│ ├── .cursor
│ │ ├── docs
│ │ │ ├── jazz-schema-template.md
│ │ │ └── llms-full.md
│ │ └── rules
│ │ │ ├── generate-jazz-schema.mdc
│ │ │ └── jazz-general-help.mdc
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ └── package.json
├── hash-slash
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ └── index.tsx
│ └── tsconfig.json
├── jazz-auth-betterauth
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── package.json
│ ├── src
│ │ └── index.ts
│ └── tsconfig.json
├── jazz-auth-clerk
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── getClerkUsername.ts
│ │ ├── index.ts
│ │ ├── tests
│ │ │ ├── JazzClerkAuth.test.ts
│ │ │ ├── getClerkUsername.test.ts
│ │ │ └── types.test.ts
│ │ └── types.ts
│ └── tsconfig.json
├── jazz-betterauth-client-plugin
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── package.json
│ ├── src
│ │ └── index.ts
│ ├── tsconfig.build.json
│ └── tsconfig.json
├── jazz-betterauth-server-plugin
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── package.json
│ ├── src
│ │ ├── index.ts
│ │ └── types.ts
│ ├── tsconfig.build.json
│ └── tsconfig.json
├── jazz-browser-media-images
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ └── index.ts
│ └── tsconfig.json
├── jazz-browser
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── BrowserContextManager.ts
│ │ ├── auth
│ │ │ ├── LocalStorageKVStore.ts
│ │ │ └── PasskeyAuth.ts
│ │ ├── createBrowserContext.ts
│ │ ├── index.ts
│ │ ├── storageOptions.ts
│ │ ├── tests
│ │ │ ├── LocalStorageKVStore.test.ts
│ │ │ ├── PasskeyAuth.test.ts
│ │ │ ├── createInviteLink.test.ts
│ │ │ ├── storageOptions.test.ts
│ │ │ └── utils.ts
│ │ └── utils
│ │ │ └── export-account-inspector.ts
│ └── tsconfig.json
├── jazz-expo
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── auth
│ │ ├── clerk.d.ts
│ │ └── clerk.js
│ ├── crypto
│ │ ├── index.d.ts
│ │ └── index.js
│ ├── package.json
│ ├── src
│ │ ├── auth
│ │ │ └── clerk
│ │ │ │ ├── README.md
│ │ │ │ └── index.tsx
│ │ ├── index.ts
│ │ ├── provider.tsx
│ │ ├── storage
│ │ │ ├── expo-secure-store-adapter.ts
│ │ │ └── expo-sqlite-adapter.ts
│ │ └── testing.ts
│ └── tsconfig.json
├── jazz-inspector-element
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── element.tsx
│ │ ├── main.ts
│ │ └── vite-env.d.ts
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ └── vite.config.ts
├── jazz-inspector
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── package.json
│ ├── public
│ │ └── jazz-logo.png
│ ├── src
│ │ ├── app.tsx
│ │ ├── ui
│ │ │ ├── badge.tsx
│ │ │ ├── button.tsx
│ │ │ ├── card.tsx
│ │ │ ├── global-styles.tsx
│ │ │ ├── grid.tsx
│ │ │ ├── heading.tsx
│ │ │ ├── icon.tsx
│ │ │ ├── icons
│ │ │ │ ├── chevron-down-icon.tsx
│ │ │ │ ├── delete-icon.tsx
│ │ │ │ └── link-icon.tsx
│ │ │ ├── input.tsx
│ │ │ ├── select.tsx
│ │ │ ├── table.tsx
│ │ │ └── text.tsx
│ │ ├── viewer
│ │ │ ├── account-or-group-text.tsx
│ │ │ ├── breadcrumbs.tsx
│ │ │ ├── co-stream-view.tsx
│ │ │ ├── grid-view.tsx
│ │ │ ├── group-view.tsx
│ │ │ ├── inpsector-button.tsx
│ │ │ ├── new-app.tsx
│ │ │ ├── page-stack.tsx
│ │ │ ├── page.tsx
│ │ │ ├── role-display.tsx
│ │ │ ├── table-viewer.tsx
│ │ │ ├── type-icon.tsx
│ │ │ ├── types.ts
│ │ │ ├── use-page-path.ts
│ │ │ ├── use-resolve-covalue.ts
│ │ │ └── value-renderer.tsx
│ │ └── vite-env.d.ts
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ └── vite.config.ts
├── jazz-nodejs
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── index.ts
│ │ └── test
│ │ │ ├── startSyncServer.test.ts
│ │ │ ├── startWorker.test.ts
│ │ │ └── utils.ts
│ └── tsconfig.json
├── jazz-react-auth-betterauth
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── package.json
│ ├── src
│ │ ├── contexts
│ │ │ └── Auth.tsx
│ │ ├── index.tsx
│ │ ├── lib
│ │ │ └── social.ts
│ │ └── types
│ │ │ └── auth.ts
│ └── tsconfig.json
├── jazz-react-auth-clerk
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ └── index.tsx
│ └── tsconfig.json
├── jazz-react-core
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── auth
│ │ │ ├── DemoAuth.tsx
│ │ │ ├── PassphraseAuth.tsx
│ │ │ └── index.ts
│ │ ├── hooks.ts
│ │ ├── index.ts
│ │ ├── provider.tsx
│ │ ├── testing.tsx
│ │ ├── tests
│ │ │ ├── fixtures.ts
│ │ │ ├── testUtils.tsx
│ │ │ ├── useAccount.test.ts
│ │ │ ├── useAccountOrGuest.test.ts
│ │ │ ├── useCoState.test.ts
│ │ │ ├── useDemoAuth.test.tsx
│ │ │ ├── useInboxSender.test.ts
│ │ │ ├── useIsAuthenticated.test.ts
│ │ │ └── usePassPhraseAuth.test.ts
│ │ └── utils.ts
│ └── tsconfig.json
├── jazz-react-native-core
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── ReactNativeContextManager.ts
│ │ ├── auth
│ │ │ ├── DemoAuthUI.tsx
│ │ │ └── auth.ts
│ │ ├── crypto
│ │ │ ├── RNQuickCrypto.ts
│ │ │ └── index.ts
│ │ ├── hooks.tsx
│ │ ├── index.ts
│ │ ├── media.tsx
│ │ ├── platform.ts
│ │ ├── provider.tsx
│ │ ├── storage
│ │ │ ├── kv-store-context.ts
│ │ │ └── sqlite-react-native.ts
│ │ └── testing.tsx
│ └── tsconfig.json
├── jazz-react-native-media-images
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ └── index.ts
│ └── tsconfig.json
├── jazz-react-native
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── crypto
│ │ ├── index.d.ts
│ │ └── index.js
│ ├── package.json
│ ├── src
│ │ ├── index.ts
│ │ ├── provider.tsx
│ │ ├── storage
│ │ │ ├── mmkv-store-adapter.ts
│ │ │ └── op-sqlite-adapter.ts
│ │ └── testing.ts
│ └── tsconfig.json
├── jazz-react
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── auth
│ │ │ ├── DemoAuth.tsx
│ │ │ ├── PasskeyAuth.tsx
│ │ │ ├── PassphraseAuth.tsx
│ │ │ └── auth.ts
│ │ ├── hooks.tsx
│ │ ├── index.ts
│ │ ├── media.tsx
│ │ ├── provider.tsx
│ │ ├── scratch.tsx
│ │ ├── ssr.ts
│ │ ├── testing.tsx
│ │ └── tests
│ │ │ ├── testUtils.tsx
│ │ │ └── useAcceptInvite.test.ts
│ └── tsconfig.json
├── jazz-richtext-prosemirror
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── index.ts
│ │ ├── lib
│ │ │ ├── converter.ts
│ │ │ ├── plugin.ts
│ │ │ └── sync.ts
│ │ └── tests
│ │ │ └── plugin.test.ts
│ ├── tsconfig.json
│ └── vitest.config.ts
├── jazz-richtext-tiptap
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ └── index.ts
│ ├── tsconfig.json
│ └── vitest.config.ts
├── jazz-run
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── createWorkerAccount.ts
│ │ ├── index.ts
│ │ ├── startSyncServer.ts
│ │ └── tests
│ │ │ └── createWorkerAccount.test.ts
│ └── tsconfig.json
├── jazz-svelte
│ ├── .gitignore
│ ├── .npmrc
│ ├── .prettierignore
│ ├── .prettierrc
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── eslint.config.js
│ ├── package.json
│ ├── src
│ │ ├── app.d.ts
│ │ ├── app.html
│ │ ├── lib
│ │ │ ├── Provider.svelte
│ │ │ ├── auth
│ │ │ │ ├── PasskeyAuth.svelte.ts
│ │ │ │ ├── PasskeyAuthBasicUI.svelte
│ │ │ │ ├── PasskeyAuthBasicUI.svelte.test.ts
│ │ │ │ ├── PassphraseAuth.svelte.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── useIsAuthenticated.svelte.ts
│ │ │ ├── index.ts
│ │ │ ├── jazz.class.svelte.ts
│ │ │ ├── jazz.svelte.ts
│ │ │ ├── testing.ts
│ │ │ └── tests
│ │ │ │ ├── AccountCoState.svelte.test.ts
│ │ │ │ ├── CoState.svelte.test.ts
│ │ │ │ ├── components
│ │ │ │ ├── CoState
│ │ │ │ │ ├── UpdateNestedValue.svelte
│ │ │ │ │ ├── UpdateNestedValueAccount.svelte
│ │ │ │ │ └── schema.ts
│ │ │ │ ├── ProviderTestComponent.svelte
│ │ │ │ ├── useAcceptInvite.svelte
│ │ │ │ └── usePassphraseAuth.svelte
│ │ │ │ ├── fixtures.ts
│ │ │ │ ├── useAcceptInvite.svelte.test.ts
│ │ │ │ └── usePassphraseAuth.svelte.test.ts
│ │ ├── routes
│ │ │ └── +page.svelte
│ │ └── test
│ │ │ └── setup.ts
│ ├── svelte.config.js
│ ├── testSetup.ts
│ ├── tsconfig.json
│ ├── vite.config.ts
│ └── vitest.config.ts
├── jazz-tools
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── auth
│ │ │ ├── AuthSecretStorage.ts
│ │ │ ├── DemoAuth.ts
│ │ │ ├── InMemoryKVStore.ts
│ │ │ ├── KvStoreContext.ts
│ │ │ └── PassphraseAuth.ts
│ │ ├── coValues
│ │ │ ├── CoValueBase.ts
│ │ │ ├── account.ts
│ │ │ ├── coFeed.ts
│ │ │ ├── coList.ts
│ │ │ ├── coMap.ts
│ │ │ ├── coPlainText.ts
│ │ │ ├── coRichText.ts
│ │ │ ├── deepLoading.ts
│ │ │ ├── extensions
│ │ │ │ └── imageDef.ts
│ │ │ ├── group.ts
│ │ │ ├── inbox.ts
│ │ │ ├── interfaces.ts
│ │ │ ├── profile.ts
│ │ │ ├── registeredSchemas.ts
│ │ │ └── schemaUnion.ts
│ │ ├── exports.ts
│ │ ├── implementation
│ │ │ ├── ContextManager.ts
│ │ │ ├── activeAccountContext.ts
│ │ │ ├── anonymousJazzAgent.ts
│ │ │ ├── createContext.ts
│ │ │ ├── devtoolsFormatters.ts
│ │ │ ├── errors.ts
│ │ │ ├── inspect.ts
│ │ │ ├── invites.ts
│ │ │ ├── refs.ts
│ │ │ ├── schema.ts
│ │ │ ├── symbols.ts
│ │ │ └── zodSchema
│ │ │ │ ├── coExport.ts
│ │ │ │ ├── runtimeConverters
│ │ │ │ ├── zodFieldToCoFieldDef.ts
│ │ │ │ └── zodSchemaToCoSchema.ts
│ │ │ │ ├── schemaTypes
│ │ │ │ ├── AccountSchema.ts
│ │ │ │ ├── CoFeedSchema.ts
│ │ │ │ ├── CoListSchema.ts
│ │ │ │ ├── CoMapSchema.ts
│ │ │ │ ├── CoRecordSchema.ts
│ │ │ │ ├── FileStreamSchema.ts
│ │ │ │ ├── PlainTextSchema.ts
│ │ │ │ └── RichTextSchema.ts
│ │ │ │ ├── typeConverters
│ │ │ │ ├── InstanceOfSchema.ts
│ │ │ │ ├── InstanceOfSchemaCoValuesNullable.ts
│ │ │ │ ├── InstanceOrPrimitiveOfSchema.ts
│ │ │ │ └── InstanceOrPrimitiveOfSchemaCoValuesNullable.ts
│ │ │ │ ├── unionUtils.ts
│ │ │ │ ├── zodCo.ts
│ │ │ │ ├── zodReExport.ts
│ │ │ │ └── zodSchema.ts
│ │ ├── index.ts
│ │ ├── internal.ts
│ │ ├── lib
│ │ │ ├── cache.test.ts
│ │ │ └── cache.ts
│ │ ├── subscribe
│ │ │ ├── CoValueCoreSubscription.ts
│ │ │ ├── JazzError.ts
│ │ │ ├── SubscriptionScope.ts
│ │ │ ├── index.ts
│ │ │ ├── types.ts
│ │ │ └── utils.ts
│ │ ├── testing.ts
│ │ ├── tests
│ │ │ ├── AuthSecretStorage.test.ts
│ │ │ ├── ContextManager.test.ts
│ │ │ ├── DemoAuth.test.ts
│ │ │ ├── PassphraseAuth.test.ts
│ │ │ ├── account.test.ts
│ │ │ ├── coFeed.test-d.ts
│ │ │ ├── coFeed.test.ts
│ │ │ ├── coList.test-d.ts
│ │ │ ├── coList.test.ts
│ │ │ ├── coMap.record.test-d.ts
│ │ │ ├── coMap.record.test.ts
│ │ │ ├── coMap.test-d.ts
│ │ │ ├── coMap.test.ts
│ │ │ ├── coPlainText.test.ts
│ │ │ ├── createContext.test.ts
│ │ │ ├── deepLoading.test.ts
│ │ │ ├── fixtures.ts
│ │ │ ├── groupsAndAccounts.test.ts
│ │ │ ├── imageDef.test.ts
│ │ │ ├── inbox.test.ts
│ │ │ ├── interfaces.test.ts
│ │ │ ├── invites.test.ts
│ │ │ ├── load.test.ts
│ │ │ ├── patterns
│ │ │ │ ├── notifications.test.ts
│ │ │ │ └── requestToJoin.test.ts
│ │ │ ├── schema.test.ts
│ │ │ ├── schemaUnion.test.ts
│ │ │ ├── subscribe.test.ts
│ │ │ ├── testing.test.ts
│ │ │ ├── utils.ts
│ │ │ └── zod.test.ts
│ │ └── types.ts
│ ├── tsconfig.json
│ ├── tsup.config.ts
│ └── vitest.config.ts
└── jazz-vue
│ ├── .gitignore
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── package.json
│ ├── src
│ ├── ProgressiveImg.vue
│ ├── auth
│ │ ├── DemoAuthBasicUI.vue
│ │ ├── useDemoAuth.ts
│ │ ├── useIsAuthenticated.ts
│ │ ├── usePasskeyAuth.ts
│ │ └── usePassphraseAuth.ts
│ ├── composables.ts
│ ├── index.ts
│ ├── provider.ts
│ ├── testing.ts
│ └── tests
│ │ ├── fixtures.ts
│ │ ├── testUtils.ts
│ │ ├── useAcceptInvite.test.ts
│ │ ├── useAccount.test.ts
│ │ ├── useAccountOrGuest.test.ts
│ │ ├── useCoState.test.ts
│ │ └── usePassphraseAuth.test.ts
│ ├── tsconfig.json
│ └── vite.config.ts
├── patches
└── expo-router.patch
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── scripts
└── check-catalog-deps.js
├── starters
└── react-passkey-auth
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── favicon.ico
│ ├── index.html
│ ├── package.json
│ ├── playwright.config.ts
│ ├── postcss.config.js
│ ├── src
│ ├── App.tsx
│ ├── AuthButton.tsx
│ ├── Form.tsx
│ ├── Logo.tsx
│ ├── apiKey.ts
│ ├── index.css
│ ├── main.tsx
│ ├── schema.ts
│ └── vite-env.d.ts
│ ├── tailwind.config.ts
│ ├── tests
│ └── starter.spec.ts
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.node.json
│ ├── vercel.json
│ └── vite.config.ts
├── tests
├── browser-integration
│ ├── package.json
│ ├── src
│ │ ├── browserSync.test.ts
│ │ ├── commands.ts
│ │ ├── fixtures
│ │ │ └── jazz-icon.png
│ │ ├── images.test.ts
│ │ ├── syncConflicts.test.ts
│ │ ├── syncServer.ts
│ │ ├── testUtils.ts
│ │ └── unstableConnection.test.ts
│ ├── tsconfig.json
│ └── vitest.config.ts
├── cloudflare-workers
│ ├── .gitignore
│ ├── package.json
│ ├── src
│ │ └── index.ts
│ ├── tests
│ │ └── integration.test.ts
│ ├── tsconfig.json
│ ├── worker-configuration.d.ts
│ └── wrangler.jsonc
├── e2e-rn-expo
│ ├── .gitignore
│ ├── README.md
│ ├── app.json
│ ├── assets
│ │ ├── adaptive-icon.png
│ │ ├── favicon.png
│ │ ├── icon.png
│ │ └── splash.png
│ ├── babel.config.js
│ ├── eas.json
│ ├── index.js
│ ├── metro.config.js
│ ├── package.json
│ ├── polyfills.js
│ ├── src
│ │ ├── App.tsx
│ │ ├── schema.ts
│ │ └── screens
│ │ │ └── SimpleSharing.tsx
│ ├── tsconfig.json
│ └── validateCoValue.mjs
└── e2e
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── index.html
│ ├── package.json
│ ├── playwright.config.ts
│ ├── src
│ ├── app.tsx
│ ├── jazz.tsx
│ ├── lib
│ │ ├── createCredentiallessIframe.ts
│ │ └── waitForCoValue.ts
│ ├── pages
│ │ ├── ConcurrentChanges.tsx
│ │ ├── FileStream
│ │ │ ├── DownloaderPeer.tsx
│ │ │ ├── UploaderPeer.tsx
│ │ │ ├── index.tsx
│ │ │ ├── lib
│ │ │ │ ├── BytesRadioGroup.tsx
│ │ │ │ ├── generateTestFile.ts
│ │ │ │ ├── getDownloaderPeerUrl.ts
│ │ │ │ └── searchParams.ts
│ │ │ └── schema.tsx
│ │ ├── Inbox.tsx
│ │ ├── ResumeSyncState.tsx
│ │ ├── RetryUnavailable.tsx
│ │ ├── Sharing.tsx
│ │ ├── TestInput.tsx
│ │ └── WriteOnly.tsx
│ └── vite-env.d.ts
│ ├── tests
│ ├── ConcurrentChanges.test.ts
│ ├── FileStream.spec.ts
│ ├── Inbox.spec.ts
│ ├── Offline.spec.ts
│ ├── ResumeSyncState.spec.ts
│ ├── RetryUnavailable.test.ts
│ ├── Sharing.test.ts
│ ├── TestInput.spec.ts
│ └── WriteOnly.test.ts
│ ├── tsconfig.json
│ └── vite.config.ts
├── tsconfig.json
├── turbo.json
└── vite.config.ts
/.changeset/wise-keys-shout.md:
--------------------------------------------------------------------------------
1 | ---
2 | "cojson-storage": patch
3 | ---
4 |
5 | Incorporate SQLite sync/async adapters and make them more aligned
6 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: https://editorconfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | # Unix-style newlines with a newline ending every file
7 | [*]
8 | end_of_line = lf
9 | insert_final_newline = true
10 | indent_style = space
11 | indent_size = 2
--------------------------------------------------------------------------------
/.envrc:
--------------------------------------------------------------------------------
1 | use flake
--------------------------------------------------------------------------------
/.git-blame-ignore-revs:
--------------------------------------------------------------------------------
1 | # Formatted workspace with biome
2 | be0a09a22295cd5d2ee3ef323e2d999da8a14110
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/docs-request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Docs request
3 | about: Allow people to quickly report issues & improvements for the docs
4 | title: 'Docs: '
5 | labels: docs, requested
6 | assignees: bensleveritt
7 |
8 | ---
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | yarn-error.log
3 | lerna-debug.log
4 | docsTmp
5 | .DS_Store
6 | .turbo
7 | coverage
8 | .direnv
9 |
10 | # Typescript
11 | **/*.tsbuildinfo
12 |
13 | # Next.js
14 | **/.next
15 |
16 | # Vite output
17 | **/dist
18 | __screenshots__
19 |
20 | # Playwright
21 | test-results
22 |
23 | .husky
24 |
25 | .vscode/*
26 | .idea/*
27 |
28 | .svelte-kit
29 |
30 | .cursorrules
31 | .windsurfrules
32 |
33 | playwright-report
--------------------------------------------------------------------------------
/.node-version:
--------------------------------------------------------------------------------
1 | 22
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | node-linker=hoisted
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 22
2 |
--------------------------------------------------------------------------------
/examples/betterauth/.env:
--------------------------------------------------------------------------------
1 | BETTER_AUTH_SECRET="TEST_SECRET"
--------------------------------------------------------------------------------
/examples/betterauth/next.config.ts:
--------------------------------------------------------------------------------
1 | import type { NextConfig } from "next";
2 |
3 | const nextConfig: NextConfig = {
4 | /* config options here */
5 | };
6 |
7 | export default nextConfig;
8 |
--------------------------------------------------------------------------------
/examples/betterauth/postcss.config.mjs:
--------------------------------------------------------------------------------
1 | const config = {
2 | plugins: ["@tailwindcss/postcss"],
3 | };
4 |
5 | export default config;
6 |
--------------------------------------------------------------------------------
/examples/betterauth/src/app/(app)/settings/page.tsx:
--------------------------------------------------------------------------------
1 | import { UserSettings } from "@/components/user-settings";
2 | import type { Metadata } from "next";
3 |
4 | export const metadata: Metadata = {
5 | title: "Settings | Jazz Example: Better Auth",
6 | };
7 |
8 | export default function SettingsPage() {
9 | return (
10 |
11 |
12 |
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/examples/betterauth/src/app/api/auth/[...all]/route.ts:
--------------------------------------------------------------------------------
1 | import { auth } from "@/lib/auth";
2 | import { toNextJsHandler } from "better-auth/next-js";
3 |
4 | export const { GET, POST } = (() => {
5 | if (!process.env.NEXT_PUBLIC_AUTH_BASE_URL) {
6 | return toNextJsHandler(auth.handler);
7 | } else {
8 | return { GET: undefined, POST: undefined };
9 | }
10 | })();
11 |
--------------------------------------------------------------------------------
/examples/betterauth/src/app/auth/forgot-password/page.tsx:
--------------------------------------------------------------------------------
1 | import { ForgotPasswordForm } from "@/components/forgot-password-form";
2 | import type { Metadata } from "next";
3 |
4 | export const metadata: Metadata = {
5 | title: "Forgot password | Jazz Example: Better Auth",
6 | };
7 |
8 | export default function ForgotPasswordPage() {
9 | return ;
10 | }
11 |
--------------------------------------------------------------------------------
/examples/betterauth/src/app/auth/reset-password/page.tsx:
--------------------------------------------------------------------------------
1 | import { ResetPasswordForm } from "@/components/reset-password-form";
2 | import type { Metadata } from "next";
3 |
4 | export const metadata: Metadata = {
5 | title: "Reset password | Jazz Example: Better Auth",
6 | };
7 |
8 | export default function ResetPasswordPage() {
9 | return ;
10 | }
11 |
--------------------------------------------------------------------------------
/examples/betterauth/src/app/auth/sign-in/page.tsx:
--------------------------------------------------------------------------------
1 | import { SigninForm } from "@/components/signin-form";
2 | import type { Metadata } from "next";
3 | import { ssoProviders } from "../sso-providers";
4 |
5 | export const metadata: Metadata = {
6 | title: "Sign in | Jazz Example: Better Auth",
7 | };
8 |
9 | export default function LoginPage() {
10 | return ;
11 | }
12 |
--------------------------------------------------------------------------------
/examples/betterauth/src/app/auth/sign-up/page.tsx:
--------------------------------------------------------------------------------
1 | import { SignupForm } from "@/components/signup-form";
2 | import type { Metadata } from "next";
3 | import { ssoProviders } from "../sso-providers";
4 |
5 | export const metadata: Metadata = {
6 | title: "Sign up | Jazz Example: Better Auth",
7 | };
8 |
9 | export default function LoginPage() {
10 | return ;
11 | }
12 |
--------------------------------------------------------------------------------
/examples/betterauth/src/app/auth/sso-providers.ts:
--------------------------------------------------------------------------------
1 | import type { SSOProviderType } from "jazz-react-auth-betterauth";
2 |
3 | // Fill in the providers you want to use
4 | export const ssoProviders: SSOProviderType[] = ["github"];
5 |
--------------------------------------------------------------------------------
/examples/betterauth/src/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/betterauth/src/app/favicon.ico
--------------------------------------------------------------------------------
/examples/betterauth/src/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { type ClassValue, clsx } from "clsx";
2 | import { twMerge } from "tailwind-merge";
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs));
6 | }
7 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/.env:
--------------------------------------------------------------------------------
1 | EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_ZXZpZGVudC1kYW5lLTg5LmNsZXJrLmFjY291bnRzLmRldiQ
2 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .expo/
3 | dist/
4 | npm-debug.*
5 | *.jks
6 | *.p8
7 | *.p12
8 | *.key
9 | *.mobileprovision
10 | *.orig.*
11 | web-build/
12 |
13 | # macOS
14 | .DS_Store
15 |
16 | ios
17 | android
18 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/app/(app)/_layout.tsx:
--------------------------------------------------------------------------------
1 | import { Redirect, Stack } from "expo-router";
2 | import { useIsAuthenticated } from "jazz-expo";
3 | import React from "react";
4 |
5 | export default function HomeLayout() {
6 | const isAuthenticated = useIsAuthenticated();
7 |
8 | if (isAuthenticated) {
9 | return ;
10 | }
11 |
12 | return (
13 |
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/app/chat/_layout.tsx:
--------------------------------------------------------------------------------
1 | import { Stack } from "expo-router";
2 | import React from "react";
3 |
4 | export default function ChatLayout() {
5 | return (
6 |
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/assets/fonts/SpaceMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo-clerk/assets/fonts/SpaceMono-Regular.ttf
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/assets/images/adaptive-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo-clerk/assets/images/adaptive-icon.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/assets/images/dark-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo-clerk/assets/images/dark-logo.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/assets/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo-clerk/assets/images/favicon.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/assets/images/hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo-clerk/assets/images/hero.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/assets/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo-clerk/assets/images/icon.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/assets/images/light-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo-clerk/assets/images/light-logo.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/assets/images/partial-react-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo-clerk/assets/images/partial-react-logo.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/assets/images/react-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo-clerk/assets/images/react-logo.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/assets/images/react-logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo-clerk/assets/images/react-logo@2x.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/assets/images/react-logo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo-clerk/assets/images/react-logo@3x.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/assets/images/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo-clerk/assets/images/splash.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = function (api) {
2 | api.cache(true);
3 | return {
4 | presets: [
5 | ["babel-preset-expo", { jsxImportSource: "nativewind" }],
6 | "nativewind/babel",
7 | ],
8 | };
9 | };
10 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/global.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/index.js:
--------------------------------------------------------------------------------
1 | import "./polyfills";
2 | import "expo-router/entry";
3 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/nativewind-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "chat-rn-expo-clerk-example-jazz@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/src/schema.ts:
--------------------------------------------------------------------------------
1 | import { CoList, co, coField, z } from "jazz-tools";
2 |
3 | export const Message = co.map({
4 | text: co.plainText(),
5 | image: z.optional(co.image()),
6 | });
7 |
8 | export const Chat = co.list(Message);
9 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | // NOTE: Update this to include the paths to all of your component files.
4 | content: [
5 | "./app/**/*.{js,jsx,ts,tsx}",
6 | "./components/**/*.{js,jsx,ts,tsx}",
7 | "./src/**/*.{js,jsx,ts,tsx}",
8 | ],
9 | presets: [require("nativewind/preset")],
10 | theme: {
11 | extend: {},
12 | },
13 | plugins: [],
14 | };
15 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo-clerk/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "expo/tsconfig.base",
3 | "compilerOptions": {
4 | "strict": true,
5 | "moduleResolution": "bundler",
6 | "paths": {
7 | "@/*": ["./*"]
8 | }
9 | },
10 | "include": ["**/*.ts", "**/*.tsx", "nativewind-env.d.ts"]
11 | }
12 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo/assets/adaptive-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo/assets/adaptive-icon.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo/assets/favicon.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo/assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo/assets/icon.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo/assets/splash-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn-expo/assets/splash-icon.png
--------------------------------------------------------------------------------
/examples/chat-rn-expo/index.ts:
--------------------------------------------------------------------------------
1 | import { registerRootComponent } from "expo";
2 | import "./polyfills";
3 |
4 | import App from "./src/App";
5 |
6 | // registerRootComponent calls AppRegistry.registerComponent('main', () => App);
7 | // It also ensures that whether you load the app in Expo Go or in a native build,
8 | // the environment is set up appropriately
9 | registerRootComponent(App);
10 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "chat-rn-expo-example-jazz@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo/src/schema.ts:
--------------------------------------------------------------------------------
1 | import { co, z } from "jazz-tools";
2 |
3 | export const Message = co.map({
4 | text: z.string(),
5 | });
6 | export type Message = co.loaded;
7 |
8 | export const Chat = co.list(Message);
9 | export type Chat = co.loaded;
10 |
--------------------------------------------------------------------------------
/examples/chat-rn-expo/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "expo/tsconfig.base",
3 | "compilerOptions": {
4 | "strict": true
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/examples/chat-rn/.bundle/config:
--------------------------------------------------------------------------------
1 | BUNDLE_PATH: "vendor/bundle"
2 | BUNDLE_FORCE_RUBY_PLATFORM: 1
3 |
--------------------------------------------------------------------------------
/examples/chat-rn/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ["@react-native", "plugin:prettier/recommended"],
4 | plugins: ["prettier"],
5 | };
6 |
--------------------------------------------------------------------------------
/examples/chat-rn/.gitkeep:
--------------------------------------------------------------------------------
1 | ios
2 | android
--------------------------------------------------------------------------------
/examples/chat-rn/.prettierrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | arrowParens: "avoid",
3 | bracketSameLine: true,
4 | bracketSpacing: true,
5 | singleQuote: false,
6 | trailingComma: "all",
7 | };
8 |
--------------------------------------------------------------------------------
/examples/chat-rn/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/examples/chat-rn/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
4 | ruby ">= 2.6.10"
5 |
6 | # Exclude problematic versions of cocoapods and activesupport that causes build failures.
7 | gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1'
8 | gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0'
9 | gem 'xcodeproj', '< 1.26.0'
10 | gem 'concurrent-ruby', '< 1.3.4'
11 | gem "bigdecimal", "~> 3.1"
12 |
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/debug.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn/android/app/debug.keystore
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
9 |
10 |
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | ChatRN
3 |
4 |
--------------------------------------------------------------------------------
/examples/chat-rn/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/examples/chat-rn/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-rn/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/chat-rn/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/examples/chat-rn/android/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") }
2 | plugins { id("com.facebook.react.settings") }
3 | extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() }
4 | rootProject.name = 'ChatRN'
5 | include ':app'
6 | includeBuild('../node_modules/@react-native/gradle-plugin')
7 |
--------------------------------------------------------------------------------
/examples/chat-rn/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ChatRN",
3 | "displayName": "ChatRN",
4 | "android": {
5 | "package": "tools.jazz.chatrn"
6 | },
7 | "ios": {
8 | "bundleIdentifier": "tools.jazz.chatrn"
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/examples/chat-rn/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["module:@react-native/babel-preset"],
3 | };
4 |
--------------------------------------------------------------------------------
/examples/chat-rn/index.js:
--------------------------------------------------------------------------------
1 | import "./src/polyfills";
2 | import { AppRegistry } from "react-native";
3 | import { name as appName } from "./app.json";
4 | import App from "./src/App";
5 |
6 | AppRegistry.registerComponent(appName, () => App);
7 |
--------------------------------------------------------------------------------
/examples/chat-rn/ios/ChatRN.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/examples/chat-rn/ios/ChatRN/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface AppDelegate : RCTAppDelegate
5 |
6 | @end
7 |
--------------------------------------------------------------------------------
/examples/chat-rn/ios/ChatRN/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/examples/chat-rn/ios/ChatRN/main.m:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char *argv[])
6 | {
7 | @autoreleasepool {
8 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/examples/chat-rn/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "chat-rn-cli-example-jazz@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/chat-rn/src/schema.ts:
--------------------------------------------------------------------------------
1 | import { co } from "jazz-tools";
2 |
3 | export const Message = co.map({
4 | text: co.plainText(),
5 | });
6 |
7 | export const Chat = co.list(Message);
8 |
--------------------------------------------------------------------------------
/examples/chat-rn/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@react-native/typescript-config/tsconfig.json"
3 | }
4 |
--------------------------------------------------------------------------------
/examples/chat-vue/.gitignore:
--------------------------------------------------------------------------------
1 | dist
--------------------------------------------------------------------------------
/examples/chat-vue/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/chat-vue/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Jazz Chat Vue Example
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/chat-vue/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/chat-vue/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat-vue/public/favicon.ico
--------------------------------------------------------------------------------
/examples/chat-vue/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "chat-example-jazz@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/chat-vue/src/assets/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/examples/chat-vue/src/components/AppContainer.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/examples/chat-vue/src/components/BubbleBody.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/examples/chat-vue/src/components/ChatBody.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
--------------------------------------------------------------------------------
/examples/chat-vue/src/components/EmptyChatMessage.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 | Start a conversation below.
6 |
7 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/examples/chat-vue/src/components/TopBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/examples/chat-vue/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/examples/chat-vue/src/schema.ts:
--------------------------------------------------------------------------------
1 | import { CoList, CoMap, CoPlainText, coField } from "jazz-tools";
2 |
3 | export class Message extends CoMap {
4 | text = coField.ref(CoPlainText);
5 | }
6 |
7 | export class Chat extends CoList.Of(coField.ref(Message)) {}
8 |
--------------------------------------------------------------------------------
/examples/chat-vue/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from "tailwindcss";
2 |
3 | const config: Config = {
4 | content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"],
5 | theme: {
6 | extend: {},
7 | },
8 | plugins: [],
9 | };
10 |
11 | export default config;
12 |
--------------------------------------------------------------------------------
/examples/chat-vue/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@vue/tsconfig/tsconfig.dom.json",
3 | "include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
4 | "exclude": ["src/**/__tests__/*"],
5 | "compilerOptions": {
6 | "composite": true,
7 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
8 |
9 | "baseUrl": ".",
10 | "paths": {
11 | "@/*": ["./src/*"]
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/examples/chat-vue/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | {
5 | "path": "./tsconfig.node.json"
6 | },
7 | {
8 | "path": "./tsconfig.app.json"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/examples/chat/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM caddy:2.7.3-alpine
2 | LABEL org.opencontainers.image.source="https://github.com/garden-co/jazz"
3 |
4 | COPY ./dist /usr/share/caddy/
--------------------------------------------------------------------------------
/examples/chat/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/chat/public/jazz-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/chat/public/jazz-logo.png
--------------------------------------------------------------------------------
/examples/chat/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "chat-example-jazz@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/chat/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/examples/chat/src/schema.ts:
--------------------------------------------------------------------------------
1 | import { co, z } from "jazz-tools";
2 |
3 | export const Message = co.map({
4 | text: co.plainText(),
5 | image: z.optional(co.image()),
6 | });
7 | export type Message = co.loaded;
8 |
9 | export const Chat = co.list(Message);
10 | export type Chat = co.loaded;
11 |
--------------------------------------------------------------------------------
/examples/chat/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/chat/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/examples/chat/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "jazz-chat"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/chat/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from "path";
2 | import react from "@vitejs/plugin-react-swc";
3 | import { defineConfig } from "vite";
4 |
5 | // https://vitejs.dev/config/
6 | export default defineConfig({
7 | plugins: [react()],
8 | resolve: {
9 | alias: {
10 | "@": path.resolve(__dirname, "./src"),
11 | },
12 | },
13 | build: {
14 | minify: false,
15 | },
16 | });
17 |
--------------------------------------------------------------------------------
/examples/clerk/.env:
--------------------------------------------------------------------------------
1 | VITE_CLERK_PUBLISHABLE_KEY=pk_test_ZXZpZGVudC1kYW5lLTg5LmNsZXJrLmFjY291bnRzLmRldiQ
--------------------------------------------------------------------------------
/examples/clerk/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
26 | playwright-report
--------------------------------------------------------------------------------
/examples/clerk/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Minimal Auth Clerk Example | Jazz
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/examples/clerk/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "minimal-auth-clerk-example@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/clerk/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/clerk/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/clerk/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "clerk-demo"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/clerk/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | # Output
4 | .output
5 | .vercel
6 | /.svelte-kit
7 | /build
8 |
9 | # OS
10 | .DS_Store
11 | Thumbs.db
12 |
13 | # Env
14 | .env
15 | .env.*
16 | !.env.example
17 | !.env.test
18 |
19 | # Vite
20 | vite.config.js.timestamp-*
21 | vite.config.ts.timestamp-*
22 |
23 | playwright-report
--------------------------------------------------------------------------------
/examples/file-share-svelte/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/.prettierignore:
--------------------------------------------------------------------------------
1 | # Package Managers
2 | package-lock.json
3 | pnpm-lock.yaml
4 | yarn.lock
5 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "useTabs": false,
3 | "tabWidth": 2,
4 | "singleQuote": true,
5 | "trailingComma": "none",
6 | "printWidth": 100,
7 | "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
8 | "overrides": [
9 | {
10 | "files": "*.svelte",
11 | "options": {
12 | "parser": "svelte"
13 | }
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {}
5 | }
6 | };
7 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "file-share-svelte@garden.co"
2 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/src/app.css:
--------------------------------------------------------------------------------
1 | @import 'tailwindcss/base';
2 | @import 'tailwindcss/components';
3 | @import 'tailwindcss/utilities';
4 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/src/app.d.ts:
--------------------------------------------------------------------------------
1 | // See https://svelte.dev/docs/kit/types#app.d.ts
2 | // for information about these interfaces
3 | declare global {
4 | namespace App {
5 | // interface Error {}
6 | // interface Locals {}
7 | // interface PageData {}
8 | // interface PageState {}
9 | // interface Platform {}
10 | }
11 | }
12 |
13 | export {};
14 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %sveltekit.head%
8 |
9 |
10 | %sveltekit.body%
11 |
12 |
13 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/src/lib/index.ts:
--------------------------------------------------------------------------------
1 | // place files you want to import through the `$lib` alias in this folder.
2 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/file-share-svelte/static/favicon.png
--------------------------------------------------------------------------------
/examples/file-share-svelte/static/jazz-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/file-share-svelte/static/jazz-logo.png
--------------------------------------------------------------------------------
/examples/file-share-svelte/svelte.config.js:
--------------------------------------------------------------------------------
1 | import adapter from '@sveltejs/adapter-vercel';
2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
3 |
4 | /** @type {import('@sveltejs/kit').Config} */
5 | const config = {
6 | // Consult https://svelte.dev/docs/kit/integrations
7 | // for more information about preprocessors
8 | preprocess: vitePreprocess(),
9 |
10 | kit: {
11 | adapter: adapter()
12 | }
13 | };
14 |
15 | export default config;
16 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import typography from '@tailwindcss/typography';
2 | import type { Config } from 'tailwindcss';
3 |
4 | export default {
5 | content: ['./src/**/*.{html,js,svelte,ts}'],
6 |
7 | theme: {
8 | extend: {}
9 | },
10 |
11 | plugins: [typography]
12 | } satisfies Config;
13 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/tests/fixtures/test-file.txt:
--------------------------------------------------------------------------------
1 | This is a test file for e2e testing
2 |
--------------------------------------------------------------------------------
/examples/file-share-svelte/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { sveltekit } from '@sveltejs/kit/vite';
2 | import { defineConfig } from 'vitest/config';
3 |
4 | export default defineConfig({
5 | plugins: [sveltekit()],
6 | });
7 |
--------------------------------------------------------------------------------
/examples/filestream/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 | /test-results/
15 | /playwright-report/
16 |
17 | # Editor directories and files
18 | .vscode/*
19 | !.vscode/extensions.json
20 | .idea
21 | .DS_Store
22 | *.suo
23 | *.ntvs*
24 | *.njsproj
25 | *.sln
26 | *.sw?
27 |
28 | playwright-report
--------------------------------------------------------------------------------
/examples/filestream/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/filestream/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/filestream/public/favicon.ico
--------------------------------------------------------------------------------
/examples/filestream/src/App.tsx:
--------------------------------------------------------------------------------
1 | import { FileWidget } from "./FileWidget.js";
2 | import { Logo } from "./Logo.tsx";
3 |
4 | function App() {
5 | return (
6 | <>
7 |
8 |
9 |
10 |
11 | >
12 | );
13 | }
14 |
15 | export default App;
16 |
--------------------------------------------------------------------------------
/examples/filestream/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "filestream-example-jazz@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/filestream/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/examples/filestream/src/schema.ts:
--------------------------------------------------------------------------------
1 | import { co, z } from "jazz-tools";
2 |
3 | export const JazzProfile = co.profile({
4 | file: z.optional(co.fileStream()),
5 | });
6 |
7 | export const JazzAccount = co.account({
8 | profile: JazzProfile,
9 | root: co.map({}),
10 | });
11 |
--------------------------------------------------------------------------------
/examples/filestream/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/filestream/tests/starter.spec.ts:
--------------------------------------------------------------------------------
1 | import { expect, test } from "@playwright/test";
2 |
3 | test("home page loads", async ({ page }) => {
4 | await page.goto("/");
5 | await expect(page.getByText("Welcome!")).toBeVisible();
6 |
7 | await page.getByLabel("Name").fill("Bob");
8 | await expect(page.getByText("Welcome, Bob!")).toBeVisible();
9 | });
10 |
--------------------------------------------------------------------------------
/examples/filestream/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/filestream/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "filestream"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/filestream/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/examples/form/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
26 | /test-results/
27 | /playwright-report/
28 |
--------------------------------------------------------------------------------
/examples/form/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/form/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/form/public/favicon.ico
--------------------------------------------------------------------------------
/examples/form/src/LinkToHome.tsx:
--------------------------------------------------------------------------------
1 | export function LinkToHome() {
2 | return (
3 |
4 | < Back to all orders
5 |
6 | );
7 | }
8 |
--------------------------------------------------------------------------------
/examples/form/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "form-example@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/form/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | :root {
6 | --border-default: theme("colors.stone.200");
7 | }
8 |
9 | .dark {
10 | --border-default: theme("colors.stone.900");
11 | }
12 |
13 | @layer components {
14 | strong {
15 | @apply font-semibold text-stone-900 dark:text-white;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/examples/form/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/form/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/examples/form/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "form-demo"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/form/vite.config.d.ts:
--------------------------------------------------------------------------------
1 | declare const _default: import("vite").UserConfig;
2 | export default _default;
3 |
--------------------------------------------------------------------------------
/examples/form/vite.config.js:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 | // https://vite.dev/config/
4 | export default defineConfig({
5 | plugins: [react()],
6 | });
7 |
--------------------------------------------------------------------------------
/examples/form/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/examples/image-upload/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/examples/image-upload/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Jazz | Image upload example
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/image-upload/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/image-upload/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/image-upload/public/favicon.ico
--------------------------------------------------------------------------------
/examples/image-upload/src/App.tsx:
--------------------------------------------------------------------------------
1 | import ImageUpload from "./ImageUpload.tsx";
2 |
3 | function App() {
4 | return (
5 | <>
6 |
7 |
8 |
9 | >
10 | );
11 | }
12 |
13 | export default App;
14 |
--------------------------------------------------------------------------------
/examples/image-upload/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "image-upload-example@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/image-upload/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/examples/image-upload/src/schema.ts:
--------------------------------------------------------------------------------
1 | import { co, z } from "jazz-tools";
2 |
3 | export const JazzProfile = co.profile({
4 | image: z.optional(co.image()),
5 | });
6 |
7 | export const JazzAccount = co.account({
8 | profile: JazzProfile,
9 | root: co.map({}),
10 | });
11 |
--------------------------------------------------------------------------------
/examples/image-upload/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/image-upload/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from "tailwindcss";
2 |
3 | const config: Config = {
4 | content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
5 | theme: {
6 | extend: {
7 | container: {
8 | center: true,
9 | padding: {
10 | DEFAULT: "0.75rem",
11 | sm: "1rem",
12 | },
13 | },
14 | },
15 | },
16 | } as const;
17 |
18 | export default config;
19 |
--------------------------------------------------------------------------------
/examples/image-upload/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/image-upload/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "image-upload-demo"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/image-upload/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/examples/inspector/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
26 | sync-db/
--------------------------------------------------------------------------------
/examples/inspector/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM caddy:2.7.3-alpine
2 | LABEL org.opencontainers.image.source="https://github.com/garden-co/jazz"
3 |
4 | COPY ./dist /usr/share/caddy/
--------------------------------------------------------------------------------
/examples/inspector/README.md:
--------------------------------------------------------------------------------
1 | # Jazz Inspector
2 |
3 | Live address: [https://inspector.jazz.tools](https://inspector.jazz.tools)
4 |
5 | Use this to visually inspect a Jazz account or other CoValue.
6 |
7 | For now, you can get your account credentials from the `jazz-logged-in-secret` local-storage key from within your Jazz app.
8 |
--------------------------------------------------------------------------------
/examples/inspector/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/inspector/favicon.ico
--------------------------------------------------------------------------------
/examples/inspector/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Jazz Inspector
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/examples/inspector/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/inspector/public/jazz-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/inspector/public/jazz-logo.png
--------------------------------------------------------------------------------
/examples/inspector/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "";
2 |
--------------------------------------------------------------------------------
/examples/inspector/src/app.tsx:
--------------------------------------------------------------------------------
1 | import ReactDOM from "react-dom/client";
2 | import App from "./viewer/new-app";
3 |
4 | ReactDOM.createRoot(document.getElementById("root")!).render();
5 |
--------------------------------------------------------------------------------
/examples/inspector/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/examples/inspector/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/inspector/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/examples/inspector/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "jazz-inspector"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/inspector/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from "path";
2 | import react from "@vitejs/plugin-react-swc";
3 | import { defineConfig } from "vite";
4 |
5 | // https://vitejs.dev/config/
6 | export default defineConfig({
7 | plugins: [react()],
8 | resolve: {
9 | alias: {
10 | "@": path.resolve(__dirname, "./src"),
11 | },
12 | },
13 | build: {
14 | minify: false,
15 | },
16 | });
17 |
--------------------------------------------------------------------------------
/examples/jazz-nextjs/next.config.ts:
--------------------------------------------------------------------------------
1 | import type { NextConfig } from "next";
2 |
3 | const nextConfig: NextConfig = {
4 | /* config options here */
5 | };
6 |
7 | export default nextConfig;
8 |
--------------------------------------------------------------------------------
/examples/jazz-nextjs/postcss.config.mjs:
--------------------------------------------------------------------------------
1 | const config = {
2 | plugins: ["@tailwindcss/postcss"],
3 | };
4 |
5 | export default config;
6 |
--------------------------------------------------------------------------------
/examples/jazz-nextjs/src/jazz.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { JazzProvider } from "jazz-react";
4 |
5 | export function Jazz({ children }: { children: React.ReactNode }) {
6 | return (
7 |
13 | {children}
14 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/examples/jazz-nextjs/src/jazzSSR.ts:
--------------------------------------------------------------------------------
1 | import { createSSRJazzAgent } from "jazz-react/ssr";
2 |
3 | export const jazzSSR = createSSRJazzAgent({
4 | peer: "wss://cloud.jazz.tools/",
5 | });
6 |
--------------------------------------------------------------------------------
/examples/jazz-paper-scissors/.env.example:
--------------------------------------------------------------------------------
1 | VITE_JAZZ_WORKER_ACCOUNT=
2 | JAZZ_WORKER_SECRET=
--------------------------------------------------------------------------------
/examples/jazz-paper-scissors/.gitignore:
--------------------------------------------------------------------------------
1 | dist
2 |
3 | .env
--------------------------------------------------------------------------------
/examples/jazz-paper-scissors/.prettierignore:
--------------------------------------------------------------------------------
1 | # Ignore artifacts:
2 | build
3 | coverage
4 |
5 | **/.git
6 | **/.svn
7 | **/.hg
8 | **/node_modules
--------------------------------------------------------------------------------
/examples/jazz-paper-scissors/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/jazz-paper-scissors/public/favicon.ico
--------------------------------------------------------------------------------
/examples/jazz-paper-scissors/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "TanStack App",
3 | "name": "Create TanStack App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | }
10 | ],
11 | "start_url": ".",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/examples/jazz-paper-scissors/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/examples/jazz-paper-scissors/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "jazz-paper-scissors@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/jazz-paper-scissors/src/components/ui/jazz-and-auth.tsx:
--------------------------------------------------------------------------------
1 | import { JazzProvider } from "jazz-react";
2 |
3 | export function JazzAndAuth({ children }: { children: React.ReactNode }) {
4 | return (
5 |
10 | {children}
11 |
12 | );
13 | }
14 |
--------------------------------------------------------------------------------
/examples/jazz-paper-scissors/src/constants.ts:
--------------------------------------------------------------------------------
1 | if (!import.meta.env.VITE_JAZZ_WORKER_ACCOUNT) {
2 | throw new Error(".env missing, run `pnpm generate-env`");
3 | }
4 |
5 | export const WORKER_ID = import.meta.env.VITE_JAZZ_WORKER_ACCOUNT;
6 |
--------------------------------------------------------------------------------
/examples/jazz-paper-scissors/src/routes/_authenticated.tsx:
--------------------------------------------------------------------------------
1 | import { Outlet, createFileRoute } from "@tanstack/react-router";
2 |
3 | export const Route = createFileRoute("/_authenticated")({
4 | component: RouteComponent,
5 | beforeLoad: ({ context }) => {
6 | return context;
7 | },
8 | });
9 |
10 | function RouteComponent() {
11 | return ;
12 | }
13 |
--------------------------------------------------------------------------------
/examples/multi-cursors/.env:
--------------------------------------------------------------------------------
1 | VITE_CURSOR_FEED_ID=multi-cursors-250425-1708
2 | VITE_GROUP_ID=co_zXE8C8sd9QxEbxnt3neRvFRPFUc
3 | VITE_OLD_CURSOR_AGE_SECONDS=36000
4 |
--------------------------------------------------------------------------------
/examples/multi-cursors/.env.local.example:
--------------------------------------------------------------------------------
1 | VITE_CURSOR_FEED_ID=multi-cursors-250425-1708
2 | VITE_GROUP_ID=co_zXE8C8sd9QxEbxnt3neRvFRPFUc
3 | VITE_OLD_CURSOR_AGE_SECONDS=5
--------------------------------------------------------------------------------
/examples/multi-cursors/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 | /test-results/
15 | /playwright-report/
16 |
17 | # Editor directories and files
18 | .vscode/*
19 | !.vscode/extensions.json
20 | .idea
21 | .DS_Store
22 | *.suo
23 | *.ntvs*
24 | *.njsproj
25 | *.sln
26 | *.sw?
27 |
28 | playwright-report
--------------------------------------------------------------------------------
/examples/multi-cursors/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/multi-cursors/favicon.ico
--------------------------------------------------------------------------------
/examples/multi-cursors/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/multi-cursors/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "jazz-multi-cursors@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/multi-cursors/src/components/Boundary.tsx:
--------------------------------------------------------------------------------
1 | import { ViewBox } from "../types";
2 |
3 | export function Boundary({ bounds }: { bounds: ViewBox }) {
4 | return (
5 | <>
6 |
14 | >
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/examples/multi-cursors/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/examples/multi-cursors/src/utils/centerOfBounds.ts:
--------------------------------------------------------------------------------
1 | import { Vec2, ViewBox } from "../types";
2 |
3 | /**
4 | * Get the center of a bounds.
5 | * @param bounds - The bounds to get the center of.
6 | * @returns The center of the bounds.
7 | */
8 | export function centerOfBounds(bounds?: ViewBox): Vec2 {
9 | if (!bounds) {
10 | return { x: 0, y: 0 };
11 | }
12 |
13 | return {
14 | x: bounds.x + bounds.width / 2,
15 | y: bounds.y + bounds.height / 2,
16 | };
17 | }
18 |
--------------------------------------------------------------------------------
/examples/multi-cursors/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/multi-cursors/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/multi-cursors/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "multi-cursors"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/multi-cursors/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | build: {
8 | minify: "esbuild",
9 | terserOptions: {
10 | compress: {
11 | drop_console: true,
12 | },
13 | },
14 | },
15 | });
16 |
--------------------------------------------------------------------------------
/examples/multiauth/.env:
--------------------------------------------------------------------------------
1 | VITE_CLERK_PUBLISHABLE_KEY=pk_test_ZXZpZGVudC1kYW5lLTg5LmNsZXJrLmFjY291bnRzLmRldiQ
--------------------------------------------------------------------------------
/examples/multiauth/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/examples/multiauth/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/multiauth/favicon.ico
--------------------------------------------------------------------------------
/examples/multiauth/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Jazz Multi-auth (React)
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/examples/multiauth/src/App.css:
--------------------------------------------------------------------------------
1 | #root {
2 | max-width: 1280px;
3 | margin: 0 auto;
4 | padding: 2rem;
5 | text-align: center;
6 | }
7 |
8 | .card {
9 | padding: 2em;
10 | display: flex;
11 | flex-direction: column;
12 | }
13 |
--------------------------------------------------------------------------------
/examples/multiauth/src/App.tsx:
--------------------------------------------------------------------------------
1 | import { Home } from "./components/Home.tsx";
2 | import "./App.css";
3 |
4 | export default function App() {
5 | return (
6 |
7 |
Jazz Multi-auth (React)
8 |
9 |
10 |
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/examples/multiauth/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "multiauth-example@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/multiauth/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/multiauth/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/multiauth/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/examples/music-player/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM caddy:2.7.3-alpine
2 | LABEL org.opencontainers.image.source="https://github.com/garden-co/jazz"
3 |
4 | COPY ./dist /usr/share/caddy/
--------------------------------------------------------------------------------
/examples/music-player/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://ui.shadcn.com/schema.json",
3 | "style": "default",
4 | "rsc": false,
5 | "tsx": true,
6 | "tailwind": {
7 | "config": "tailwind.config.ts",
8 | "css": "src/index.css",
9 | "baseColor": "stone",
10 | "cssVariables": true
11 | },
12 | "aliases": {
13 | "components": "@/components",
14 | "utils": "@/lib/utils"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/examples/music-player/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/music-player/favicon.ico
--------------------------------------------------------------------------------
/examples/music-player/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/music-player/public/example.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/music-player/public/example.mp3
--------------------------------------------------------------------------------
/examples/music-player/public/jazz-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/music-player/public/jazz-logo.png
--------------------------------------------------------------------------------
/examples/music-player/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "music-player-example-jazz@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/music-player/src/components/LogoutButton.tsx:
--------------------------------------------------------------------------------
1 | import { useAccount } from "jazz-react";
2 | import { Button } from "./ui/button";
3 |
4 | export function LogoutButton() {
5 | const { logOut } = useAccount();
6 |
7 | return ;
8 | }
9 |
--------------------------------------------------------------------------------
/examples/music-player/src/components/ui/skeleton.tsx:
--------------------------------------------------------------------------------
1 | import { cn } from "@/lib/utils";
2 |
3 | function Skeleton({
4 | className,
5 | ...props
6 | }: React.HTMLAttributes) {
7 | return (
8 |
12 | );
13 | }
14 |
15 | export { Skeleton };
16 |
--------------------------------------------------------------------------------
/examples/music-player/src/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { type ClassValue, clsx } from "clsx";
2 | import { twMerge } from "tailwind-merge";
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs));
6 | }
7 |
--------------------------------------------------------------------------------
/examples/music-player/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/music-player/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/examples/music-player/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "music-demo"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/music-player/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from "path";
2 | import react from "@vitejs/plugin-react-swc";
3 | import { defineConfig } from "vite";
4 |
5 | // https://vitejs.dev/config/
6 | export default defineConfig({
7 | plugins: [react()],
8 | resolve: {
9 | alias: {
10 | "@": path.resolve(__dirname, "./src"),
11 | },
12 | },
13 | build: {
14 | minify: false,
15 | },
16 | });
17 |
--------------------------------------------------------------------------------
/examples/organization/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
26 | playwright-report
--------------------------------------------------------------------------------
/examples/organization/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/organization/favicon.ico
--------------------------------------------------------------------------------
/examples/organization/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/organization/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "organization-example@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/organization/src/components/Heading.tsx:
--------------------------------------------------------------------------------
1 | import { OrganizationSelector } from "./OrganizationSelector.tsx";
2 |
3 | export function Heading({ text }: { text: string }) {
4 | return (
5 |
6 |
{text}
7 |
8 |
9 |
10 | );
11 | }
12 |
--------------------------------------------------------------------------------
/examples/organization/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer base {
6 | strong,
7 | h1,
8 | h2,
9 | h3 {
10 | @apply font-semibold text-stone-900 dark:text-white;
11 | }
12 |
13 | [type="text"],
14 | select {
15 | border-color: theme("colors.stone.200");
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/examples/organization/src/util.ts:
--------------------------------------------------------------------------------
1 | const animals = [
2 | "elephant",
3 | "penguin",
4 | "giraffe",
5 | "octopus",
6 | "kangaroo",
7 | "dolphin",
8 | "cheetah",
9 | "koala",
10 | "platypus",
11 | "pangolin",
12 | ];
13 |
14 | export function getRandomUsername() {
15 | return `Anonymous ${animals[Math.floor(Math.random() * animals.length)]}`;
16 | }
17 |
--------------------------------------------------------------------------------
/examples/organization/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/organization/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/examples/organization/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from "path";
2 | import react from "@vitejs/plugin-react";
3 | import { defineConfig } from "vite";
4 |
5 | // https://vite.dev/config/
6 | export default defineConfig({
7 | plugins: [react()],
8 | resolve: {
9 | alias: {
10 | "@": path.resolve(__dirname, "./src"),
11 | },
12 | },
13 | });
14 |
--------------------------------------------------------------------------------
/examples/passkey-svelte/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | # Output
4 | .output
5 | .vercel
6 | /.svelte-kit
7 | /build
8 |
9 | # OS
10 | .DS_Store
11 | Thumbs.db
12 |
13 | # Env
14 | .env
15 | .env.*
16 | !.env.example
17 | !.env.test
18 |
19 | # Vite
20 | vite.config.js.timestamp-*
21 | vite.config.ts.timestamp-*
22 |
--------------------------------------------------------------------------------
/examples/passkey-svelte/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/examples/passkey-svelte/.prettierignore:
--------------------------------------------------------------------------------
1 | # Package Managers
2 | package-lock.json
3 | pnpm-lock.yaml
4 | yarn.lock
5 |
--------------------------------------------------------------------------------
/examples/passkey-svelte/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "useTabs": false,
3 | "tabWidth": 2,
4 | "singleQuote": true,
5 | "trailingComma": "none",
6 | "printWidth": 100,
7 | "plugins": ["prettier-plugin-svelte"],
8 | "overrides": [
9 | {
10 | "files": "*.svelte",
11 | "options": {
12 | "parser": "svelte"
13 | }
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/examples/passkey-svelte/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = 'minimal-svelte-auth-passkey@garden.co';
2 |
--------------------------------------------------------------------------------
/examples/passkey-svelte/src/app.d.ts:
--------------------------------------------------------------------------------
1 | // See https://svelte.dev/docs/kit/types#app.d.ts
2 | // for information about these interfaces
3 | declare global {
4 | namespace App {
5 | // interface Error {}
6 | // interface Locals {}
7 | // interface PageData {}
8 | // interface PageState {}
9 | // interface Platform {}
10 | }
11 | }
12 |
13 | export {};
14 |
--------------------------------------------------------------------------------
/examples/passkey-svelte/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %sveltekit.head%
8 |
9 |
10 | %sveltekit.body%
11 |
12 |
13 |
--------------------------------------------------------------------------------
/examples/passkey-svelte/src/lib/index.ts:
--------------------------------------------------------------------------------
1 | // place files you want to import through the `$lib` alias in this folder.
2 |
--------------------------------------------------------------------------------
/examples/passkey-svelte/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/passkey-svelte/static/favicon.png
--------------------------------------------------------------------------------
/examples/passkey-svelte/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { sveltekit } from '@sveltejs/kit/vite';
2 | import { defineConfig } from 'vite';
3 |
4 | export default defineConfig({
5 | plugins: [sveltekit()]
6 | });
7 |
--------------------------------------------------------------------------------
/examples/passkey/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/examples/passkey/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/passkey/public/favicon.ico
--------------------------------------------------------------------------------
/examples/passkey/src/App.tsx:
--------------------------------------------------------------------------------
1 | import { useAccount } from "jazz-react";
2 |
3 | function App() {
4 | const { me, logOut } = useAccount();
5 |
6 | return (
7 |
8 | You're logged in
9 | Welcome back, {me?.profile?.name}!
10 |
11 |
12 | );
13 | }
14 |
15 | export default App;
16 |
--------------------------------------------------------------------------------
/examples/passkey/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "minimal-auth-passkey-example@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/passkey/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/passkey/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/passkey/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "passkey-demo"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/passkey/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/examples/passkey/vite.config.ts.timestamp-1738152058499-fca68c40d6099.mjs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/passkey/vite.config.ts.timestamp-1738152058499-fca68c40d6099.mjs
--------------------------------------------------------------------------------
/examples/passphrase/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/examples/passphrase/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/passphrase/favicon.ico
--------------------------------------------------------------------------------
/examples/passphrase/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Jazz | Minimal Auth Passphrase Example
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/passphrase/src/App.tsx:
--------------------------------------------------------------------------------
1 | import { useAccount } from "jazz-react";
2 |
3 | function App() {
4 | const { logOut } = useAccount();
5 |
6 | return (
7 |
8 | You're logged in
9 |
10 |
11 | );
12 | }
13 |
14 | export default App;
15 |
--------------------------------------------------------------------------------
/examples/passphrase/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/passphrase/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/passphrase/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "passphrase-demo"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/passphrase/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/examples/password-manager/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/examples/password-manager/demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/password-manager/demo.png
--------------------------------------------------------------------------------
/examples/password-manager/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/password-manager/favicon.ico
--------------------------------------------------------------------------------
/examples/password-manager/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Jazz Password Manager Example
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/password-manager/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/password-manager/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/password-manager/public/favicon.ico
--------------------------------------------------------------------------------
/examples/password-manager/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "password-manager-example-jazz@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/password-manager/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/examples/password-manager/src/types.ts:
--------------------------------------------------------------------------------
1 | import { Loaded } from "jazz-tools";
2 | import { FieldValues } from "react-hook-form";
3 | import { Folder } from "./1_schema";
4 |
5 | export interface PasswordItemFormValues extends FieldValues {
6 | name: string;
7 | username?: string;
8 | password: string;
9 | uri?: string;
10 | deleted: boolean;
11 | folder: Loaded;
12 | }
13 |
--------------------------------------------------------------------------------
/examples/password-manager/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/password-manager/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from "tailwindcss";
2 |
3 | const config: Config = {
4 | content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
5 | theme: {
6 | extend: {},
7 | },
8 | plugins: [],
9 | };
10 |
11 | export default config;
12 |
--------------------------------------------------------------------------------
/examples/password-manager/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/examples/password-manager/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "passwords-demo"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/password-manager/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/examples/pets/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 | /test-results/
26 | /playwright-report/
27 | /blob-report/
28 | /playwright/.cache/
29 |
30 | sync-db/
--------------------------------------------------------------------------------
/examples/pets/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM caddy:2.7.3-alpine
2 | LABEL org.opencontainers.image.source="https://github.com/garden-co/jazz"
3 |
4 | COPY ./dist /usr/share/caddy/
--------------------------------------------------------------------------------
/examples/pets/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://ui.shadcn.com/schema.json",
3 | "style": "default",
4 | "rsc": false,
5 | "tsx": true,
6 | "tailwind": {
7 | "config": "tailwind.config.js",
8 | "css": "src/index.css",
9 | "baseColor": "stone",
10 | "cssVariables": true
11 | },
12 | "aliases": {
13 | "components": "@/basicComponents",
14 | "utils": "@/basicComponents/lib/utils"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/examples/pets/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/pets/favicon.ico
--------------------------------------------------------------------------------
/examples/pets/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Jazz Rate My Pet Example
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/pets/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/pets/public/jazz-logo-low-res.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/pets/public/jazz-logo-low-res.jpg
--------------------------------------------------------------------------------
/examples/pets/public/jazz-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/pets/public/jazz-logo.png
--------------------------------------------------------------------------------
/examples/pets/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "pets-example-jazz@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/pets/src/basicComponents/TitleAndLogo.tsx:
--------------------------------------------------------------------------------
1 | import { Toaster } from ".";
2 |
3 | export function TitleAndLogo({ name }: { name: string }) {
4 | return (
5 | <>
6 |
7 |

{name}
8 |
9 |
10 | >
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/examples/pets/src/basicComponents/index.ts:
--------------------------------------------------------------------------------
1 | export { Button } from "./ui/button";
2 | export { Input } from "./ui/input";
3 | export { Toaster } from "./ui/toaster";
4 | export { useToast } from "./ui/use-toast";
5 | export { Skeleton } from "./ui/skeleton";
6 | export { TitleAndLogo } from "./TitleAndLogo";
7 | export { ThemeProvider } from "./themeProvider";
8 |
--------------------------------------------------------------------------------
/examples/pets/src/basicComponents/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { type ClassValue, clsx } from "clsx";
2 | import { twMerge } from "tailwind-merge";
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs));
6 | }
7 |
--------------------------------------------------------------------------------
/examples/pets/src/basicComponents/ui/skeleton.tsx:
--------------------------------------------------------------------------------
1 | import { cn } from "@/basicComponents/lib/utils";
2 |
3 | function Skeleton({
4 | className,
5 | ...props
6 | }: React.HTMLAttributes) {
7 | return (
8 |
12 | );
13 | }
14 |
15 | export { Skeleton };
16 |
--------------------------------------------------------------------------------
/examples/pets/src/lib/support.ts:
--------------------------------------------------------------------------------
1 | export const supportsWebAuthn =
2 | typeof PublicKeyCredential != "undefined" &&
3 | typeof PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable !=
4 | "undefined" &&
5 | (await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable());
6 |
--------------------------------------------------------------------------------
/examples/pets/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/pets/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/examples/pets/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "jazz-pets"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/pets/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from "path";
2 | import react from "@vitejs/plugin-react-swc";
3 | import { defineConfig } from "vite";
4 | import topLevelAwait from "vite-plugin-top-level-await";
5 |
6 | // https://vitejs.dev/config/
7 | export default defineConfig({
8 | plugins: [react(), topLevelAwait()],
9 | resolve: {
10 | alias: {
11 | "@": path.resolve(__dirname, "./src"),
12 | },
13 | },
14 | build: {
15 | minify: false,
16 | },
17 | });
18 |
--------------------------------------------------------------------------------
/examples/reactions/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/examples/reactions/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/reactions/favicon.ico
--------------------------------------------------------------------------------
/examples/reactions/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Jazz | Reactions example
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/examples/reactions/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "reactions-example@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/reactions/src/schema.ts:
--------------------------------------------------------------------------------
1 | import { co, z } from "jazz-tools";
2 |
3 | export const ReactionTypes = [
4 | "aww",
5 | "love",
6 | "haha",
7 | "wow",
8 | "tiny",
9 | "chonkers",
10 | ] as const;
11 |
12 | export type ReactionType = (typeof ReactionTypes)[number];
13 |
14 | export const Reactions = co.feed(z.literal([...ReactionTypes]));
15 |
--------------------------------------------------------------------------------
/examples/reactions/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/reactions/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from "tailwindcss";
2 |
3 | const config: Config = {
4 | content: [
5 | "./pages/**/*.{ts,tsx}",
6 | "./components/**/*.{ts,tsx}",
7 | "./app/**/*.{ts,tsx}",
8 | "./src/**/*.{ts,tsx}",
9 | ],
10 | theme: {
11 | extend: {},
12 | },
13 | plugins: [],
14 | };
15 |
16 | export default config;
17 |
--------------------------------------------------------------------------------
/examples/reactions/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/reactions/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "reactions-demo"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/reactions/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/examples/richtext-tiptap/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/richtext-tiptap/favicon.ico
--------------------------------------------------------------------------------
/examples/richtext-tiptap/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/richtext-tiptap/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "richtext-tiptap-example@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/richtext-tiptap/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/richtext-tiptap/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/richtext-tiptap/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "richtext-tiptap"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/richtext-tiptap/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/examples/richtext/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/richtext/favicon.ico
--------------------------------------------------------------------------------
/examples/richtext/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/richtext/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "richtext-example@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/richtext/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | .ProseMirror ul {
6 | @apply list-disc;
7 | }
8 | .ProseMirror ol {
9 | @apply list-decimal;
10 | }
11 |
--------------------------------------------------------------------------------
/examples/richtext/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/richtext/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/richtext/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "richtext"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/richtext/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/examples/todo-vue/.gitignore:
--------------------------------------------------------------------------------
1 | dist
--------------------------------------------------------------------------------
/examples/todo-vue/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/todo-vue/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite App
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/todo-vue/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/todo-vue/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/todo-vue/public/favicon.ico
--------------------------------------------------------------------------------
/examples/todo-vue/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "vue-todo-example-jazz@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/todo-vue/src/assets/main.css:
--------------------------------------------------------------------------------
1 | @import "./base.css";
2 |
--------------------------------------------------------------------------------
/examples/todo-vue/src/router/index.ts:
--------------------------------------------------------------------------------
1 | import { createRouter, createWebHistory } from "vue-router";
2 | import Home from "../views/HomeView.vue";
3 |
4 | const router = createRouter({
5 | history: createWebHistory(import.meta.env.BASE_URL),
6 | routes: [
7 | {
8 | path: "/",
9 | name: "Home",
10 | component: Home,
11 | },
12 | ],
13 | });
14 |
15 | export default router;
16 |
--------------------------------------------------------------------------------
/examples/todo-vue/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from "tailwindcss";
2 |
3 | const config: Config = {
4 | content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
5 | theme: {
6 | extend: {},
7 | },
8 | plugins: [],
9 | };
10 |
11 | export default config;
12 |
--------------------------------------------------------------------------------
/examples/todo-vue/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@vue/tsconfig/tsconfig.dom.json",
3 | "include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
4 | "exclude": ["src/**/__tests__/*"],
5 | "compilerOptions": {
6 | "composite": true,
7 | "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
8 |
9 | "baseUrl": ".",
10 | "paths": {
11 | "@/*": ["./src/*"]
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/examples/todo-vue/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | {
5 | "path": "./tsconfig.node.json"
6 | },
7 | {
8 | "path": "./tsconfig.app.json"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/examples/todo/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
26 | sync-db/
--------------------------------------------------------------------------------
/examples/todo/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM caddy:2.7.3-alpine
2 | LABEL org.opencontainers.image.source="https://github.com/garden-co/jazz"
3 |
4 | COPY ./dist /usr/share/caddy/
--------------------------------------------------------------------------------
/examples/todo/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://ui.shadcn.com/schema.json",
3 | "style": "default",
4 | "rsc": false,
5 | "tsx": true,
6 | "tailwind": {
7 | "config": "tailwind.config.js",
8 | "css": "src/index.css",
9 | "baseColor": "stone",
10 | "cssVariables": true
11 | },
12 | "aliases": {
13 | "components": "@/basicComponents",
14 | "utils": "@/basicComponents/lib/utils"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/examples/todo/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Jazz Todo List Example
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/todo/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/todo/public/jazz-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/todo/public/jazz-logo.png
--------------------------------------------------------------------------------
/examples/todo/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "todo-example-jazz@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/todo/src/basicComponents/TitleAndLogo.tsx:
--------------------------------------------------------------------------------
1 | import { Toaster } from ".";
2 |
3 | export function TitleAndLogo({ name }: { name: string }) {
4 | return (
5 | <>
6 |
7 |

{name}
8 |
9 |
10 | >
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/examples/todo/src/basicComponents/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { type ClassValue, clsx } from "clsx";
2 | import { twMerge } from "tailwind-merge";
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs));
6 | }
7 |
--------------------------------------------------------------------------------
/examples/todo/src/basicComponents/ui/skeleton.tsx:
--------------------------------------------------------------------------------
1 | import { cn } from "@/basicComponents/lib/utils";
2 |
3 | function Skeleton({
4 | className,
5 | ...props
6 | }: React.HTMLAttributes) {
7 | return (
8 |
12 | );
13 | }
14 |
15 | export { Skeleton };
16 |
--------------------------------------------------------------------------------
/examples/todo/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/todo/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/examples/todo/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "jazz-todo"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/todo/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from "path";
2 | import react from "@vitejs/plugin-react-swc";
3 | import { defineConfig } from "vite";
4 |
5 | // https://vitejs.dev/config/
6 | export default defineConfig({
7 | plugins: [react()],
8 | resolve: {
9 | alias: {
10 | "@": path.resolve(__dirname, "./src"),
11 | },
12 | },
13 | build: {
14 | minify: false,
15 | },
16 | });
17 |
--------------------------------------------------------------------------------
/examples/version-history/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/examples/version-history/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/examples/version-history/favicon.ico
--------------------------------------------------------------------------------
/examples/version-history/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/examples/version-history/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "version-history@garden.co";
2 |
--------------------------------------------------------------------------------
/examples/version-history/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/examples/version-history/src/schema.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Learn about schemas here:
3 | * https://jazz.tools/docs/react/schemas/covalues
4 | */
5 |
6 | import { co, z } from "jazz-tools";
7 |
8 | export const Issue = co.map({
9 | title: z.string(),
10 | description: co.plainText(),
11 | estimate: z.number(),
12 | status: z.literal(["backlog", "in progress", "done"]),
13 | });
14 |
15 | export const Project = co.map({
16 | name: z.string(),
17 | issues: co.list(Issue),
18 | });
19 |
--------------------------------------------------------------------------------
/examples/version-history/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/examples/version-history/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/examples/version-history/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "version-history"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/examples/version-history/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/homepage/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:22-slim
2 |
3 | COPY node_modules ./node_modules
4 | COPY homepage/.next/standalone ./homepage
5 | COPY homepage/.next/static ./homepage/.next/static
6 |
7 | EXPOSE 3001
8 |
9 | ENV PORT 3001
10 |
11 | CMD ["node", "homepage/server.js"]
--------------------------------------------------------------------------------
/homepage/design-system/colors/colors.ts:
--------------------------------------------------------------------------------
1 | export const COLORS = {
2 | BLUE: "#146AFF",
3 | TURQUOISE: "#2DC9C9",
4 | FOREST: "#42BB69",
5 | GREEN: "#8BDA27",
6 | PINK: "#EF478E",
7 | PURPLE: "#B441EB",
8 | YELLOW: "#FBC400",
9 | RED: "#FF601C",
10 | };
11 |
--------------------------------------------------------------------------------
/homepage/design-system/fonts/CommitMono-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/design-system/fonts/CommitMono-Regular.woff
--------------------------------------------------------------------------------
/homepage/design-system/fonts/CommitMono-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/design-system/fonts/CommitMono-Regular.woff2
--------------------------------------------------------------------------------
/homepage/design-system/next.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {};
3 |
4 | export default nextConfig;
5 |
--------------------------------------------------------------------------------
/homepage/design-system/postcss.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('postcss-load-config').Config} */
2 | const config = {
3 | plugins: {
4 | tailwindcss: {},
5 | },
6 | };
7 |
8 | export default config;
9 |
--------------------------------------------------------------------------------
/homepage/design-system/src/actions/resend.ts:
--------------------------------------------------------------------------------
1 | "use server";
2 |
3 | import { Resend } from "resend";
4 |
5 | const resend = new Resend(process.env.RESEND_API_KEY);
6 |
7 | export async function subscribe(email: string) {
8 | "use server";
9 |
10 | return resend.contacts.create({
11 | email,
12 | unsubscribed: false,
13 | audienceId: process.env.RESEND_AUDIENCE_ID || "",
14 | });
15 | }
16 |
--------------------------------------------------------------------------------
/homepage/design-system/src/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/design-system/src/app/favicon.ico
--------------------------------------------------------------------------------
/homepage/design-system/src/components/atoms/Card.tsx:
--------------------------------------------------------------------------------
1 | import { clsx } from "clsx";
2 |
3 | export function Card({
4 | children,
5 | className,
6 | }: { children: React.ReactNode; className?: string }) {
7 | return (
8 |
9 | {children}
10 |
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/homepage/design-system/src/components/atoms/Copyright.tsx:
--------------------------------------------------------------------------------
1 | export function Copyright({
2 | className,
3 | companyName = "Garden Computing, Inc.",
4 | }: {
5 | companyName?: string;
6 | className?: string;
7 | }) {
8 | return (
9 |
10 | © {new Date().getFullYear()} {companyName}
11 |
12 | );
13 | }
14 |
--------------------------------------------------------------------------------
/homepage/design-system/src/components/atoms/DocNavLink.tsx:
--------------------------------------------------------------------------------
1 | import Link from "next/link";
2 | import { ReactNode } from "react";
3 |
4 | export function DocNavLink({
5 | href,
6 | children,
7 | }: {
8 | href: string;
9 | children: ReactNode;
10 | }) {
11 | return (
12 |
16 | {children}
17 |
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/homepage/design-system/src/components/atoms/ListItem.tsx:
--------------------------------------------------------------------------------
1 | export function LI({ children }: { children: React.ReactNode }) {
2 | return {children};
3 | }
4 |
--------------------------------------------------------------------------------
/homepage/design-system/src/components/atoms/Paragraph.tsx:
--------------------------------------------------------------------------------
1 | import clsx from "clsx";
2 |
3 | export function P({
4 | children,
5 | className,
6 | }: {
7 | children: React.ReactNode;
8 | className?: string;
9 | }) {
10 | return {children}
;
11 | }
12 |
--------------------------------------------------------------------------------
/homepage/design-system/src/components/atoms/Separator.tsx:
--------------------------------------------------------------------------------
1 | import clsx from "clsx";
2 | import { forwardRef } from "react";
3 |
4 | export const Separator = forwardRef<
5 | HTMLHRElement,
6 | React.ComponentPropsWithoutRef<"hr">
7 | >(({ className, ...props }, ref) => {
8 | return
;
9 | });
10 |
--------------------------------------------------------------------------------
/homepage/design-system/src/components/atoms/icons/index.tsx:
--------------------------------------------------------------------------------
1 | import { IconCoFeed } from "./CoFeed";
2 | import { IconCoRecord } from "./CoRecord";
3 |
4 | export const GcmpIcons = {
5 | IconCoFeed,
6 | IconCoRecord,
7 | };
8 |
--------------------------------------------------------------------------------
/homepage/design-system/src/components/molecules/Breadcrumb.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { usePathname } from "next/navigation";
4 |
5 | export function BreadCrumb({
6 | items,
7 | }: {
8 | items: { title: string; href: string }[];
9 | }) {
10 | const pathName = usePathname();
11 | const title = items.find((item) => item.href === pathName)?.title;
12 |
13 | if (!title) return null;
14 |
15 | return {title};
16 | }
17 |
--------------------------------------------------------------------------------
/homepage/design-system/src/components/molecules/List.tsx:
--------------------------------------------------------------------------------
1 | export function UL({ children }: { children: React.ReactNode }) {
2 | return ;
3 | }
4 |
5 | export function OL({ children }: { children: React.ReactNode }) {
6 | return {children}
;
7 | }
8 |
--------------------------------------------------------------------------------
/homepage/design-system/src/covalues/layout.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { JazzProvider } from "jazz-react";
4 |
5 | export default function CovaluesLayout({
6 | children,
7 | }: {
8 | children: any;
9 | }) {
10 | return {children};
11 | }
12 |
--------------------------------------------------------------------------------
/homepage/design-system/src/covalues/schema.ts:
--------------------------------------------------------------------------------
1 | import { CoFeed, CoList, CoMap, coField } from "jazz-tools";
2 |
3 | // Example CoMap class
4 | export class Person extends CoMap {
5 | name = coField.string;
6 | age = coField.number;
7 | height = coField.optional.number;
8 | weight = coField.optional.number;
9 | }
10 |
11 | export class ListOfPeople extends CoList.Of(coField.ref(Person)) {}
12 |
13 | export class PersonFeed extends CoFeed.Of(coField.ref(Person)) {}
14 |
--------------------------------------------------------------------------------
/homepage/design-system/src/utils/nav.ts:
--------------------------------------------------------------------------------
1 | import { usePathname } from "next/navigation";
2 |
3 | export function isActive(href: string) {
4 | const path = usePathname();
5 |
6 | if (href === "/") {
7 | return path === "/";
8 | }
9 |
10 | return path.startsWith(href);
11 | }
12 |
--------------------------------------------------------------------------------
/homepage/gcmp/.dockerignore:
--------------------------------------------------------------------------------
1 | Dockerfile
2 | .dockerignore
3 | node_modules
4 | npm-debug.log
5 | README.md
6 | .next
7 | .git
--------------------------------------------------------------------------------
/homepage/gcmp/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/app/favicon.ico
--------------------------------------------------------------------------------
/homepage/gcmp/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://ui.shadcn.com/schema.json",
3 | "style": "default",
4 | "rsc": true,
5 | "tsx": true,
6 | "tailwind": {
7 | "config": "tailwind.config.js",
8 | "css": "app/globals.css",
9 | "baseColor": "stone",
10 | "cssVariables": true
11 | },
12 | "aliases": {
13 | "components": "@/components",
14 | "utils": "@/lib/utils"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/homepage/gcmp/components/FormattedDate.tsx:
--------------------------------------------------------------------------------
1 | import { formatDate } from "@/lib/date";
2 |
3 | export function FormattedDate({ date }: { date: string }) {
4 | const formattedDate = formatDate(new Date(date));
5 |
6 | return <>{formattedDate}>;
7 | }
8 |
--------------------------------------------------------------------------------
/homepage/gcmp/components/ThemeToggle.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { ThemeToggle as GardenThemeToggle } from "@garden-co/design-system/src/components/molecules/ThemeToggle";
4 | import { useTheme } from "next-themes";
5 |
6 | export function ThemeToggle({ className }: { className?: string }) {
7 | let useThemeProps = useTheme();
8 |
9 | return ;
10 | }
11 |
--------------------------------------------------------------------------------
/homepage/gcmp/components/blog/posts/2_whatIsJazz.mdx:
--------------------------------------------------------------------------------
1 | export const meta = {
2 | slug: "what-is-jazz",
3 | title: "What is Jazz?",
4 | subtitle: "(A framework for local-first state & permissions)",
5 | date: "2024-12-27",
6 | coverImage: "/posts/post2.svg",
7 | author: {
8 | name: "Anselm Eickhoff",
9 | image: "/team/anselm.jpg",
10 | },
11 | };
--------------------------------------------------------------------------------
/homepage/gcmp/components/blog/posts/3_whatWeShippedSinceSummer.mdx:
--------------------------------------------------------------------------------
1 | export const meta = {
2 | slug: "what-we-shipped-since-summer",
3 | title: "What we shipped since summer",
4 | subtitle: "(The first six months of Garden Computing & Jazz)",
5 | date: "2024-12-28",
6 | coverImage: "/posts/post3.svg",
7 | author: {
8 | name: "Anselm Eickhoff",
9 | image: "/team/anselm.jpg",
10 | }
11 | };
--------------------------------------------------------------------------------
/homepage/gcmp/components/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/components/favicon.ico
--------------------------------------------------------------------------------
/homepage/gcmp/lib/date.ts:
--------------------------------------------------------------------------------
1 | export function formatDate(date: Date) {
2 | const day = date.getDate().toString();
3 | date.getMonth();
4 | const year = date.getFullYear();
5 | const month = date.toLocaleString("en", { month: "short" });
6 |
7 | return `${month} ${day}, ${year}`;
8 | }
9 |
--------------------------------------------------------------------------------
/homepage/gcmp/mdx-components.tsx:
--------------------------------------------------------------------------------
1 | import type { MDXComponents } from "mdx/types";
2 |
3 | export function useMDXComponents(components: MDXComponents): MDXComponents {
4 | return {
5 | ...components,
6 | };
7 | }
8 |
--------------------------------------------------------------------------------
/homepage/gcmp/mdx.d.ts:
--------------------------------------------------------------------------------
1 | declare module "*.mdx" {
2 | export const meta: {
3 | slug: string;
4 | title: string;
5 | subtitle: string;
6 | date: string;
7 | coverImage: string;
8 | author: {
9 | name: string;
10 | image: string;
11 | };
12 | };
13 | }
14 |
--------------------------------------------------------------------------------
/homepage/gcmp/postcss.config.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | "@csstools/postcss-oklab-function": { preserve: true },
5 | autoprefixer: {},
6 | },
7 | };
8 |
--------------------------------------------------------------------------------
/homepage/gcmp/public/posts/post1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/posts/post1.png
--------------------------------------------------------------------------------
/homepage/gcmp/public/posts/post2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/posts/post2.png
--------------------------------------------------------------------------------
/homepage/gcmp/public/posts/post3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/posts/post3.png
--------------------------------------------------------------------------------
/homepage/gcmp/public/social-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/social-image.png
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/andrei.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/andrei.jpeg
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/anselm.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/anselm.jpg
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/benjamin.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/benjamin.jpg
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/emil.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/emil.jpg
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/gio.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/gio.jpg
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/guido.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/guido.jpeg
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/james.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/james.jpg
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/marina.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/marina.jpeg
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/meg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/meg.jpg
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/nikita.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/nikita.jpg
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/nikos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/nikos.png
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/stephanie.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/stephanie.jpg
--------------------------------------------------------------------------------
/homepage/gcmp/public/team/trisha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/gcmp/public/team/trisha.png
--------------------------------------------------------------------------------
/homepage/homepage/.dockerignore:
--------------------------------------------------------------------------------
1 | Dockerfile
2 | .dockerignore
3 | node_modules
4 | npm-debug.log
5 | README.md
6 | .next
7 | .git
--------------------------------------------------------------------------------
/homepage/homepage/.env.example:
--------------------------------------------------------------------------------
1 | GRAFANA_SERVICE_ACCOUNT=
2 |
--------------------------------------------------------------------------------
/homepage/homepage/app/(docs)/docs/[framework]/layout.tsx:
--------------------------------------------------------------------------------
1 | import { SideNavLayout } from "@/components/SideNavLayout";
2 | import { DocNav } from "@/components/docs/DocsNav";
3 |
4 | export default function Layout({ children }: { children: React.ReactNode }) {
5 | return }>{children};
6 | }
7 |
--------------------------------------------------------------------------------
/homepage/homepage/app/(others)/(home)/coValueDescriptions/coPlainTextDescription.mdx:
--------------------------------------------------------------------------------
1 | - Collaborative plain-text & rich-text
2 | - Gracefully prevents most editing conflicts
3 | - Rendered as markdown, HTML, JSX, etc.
--------------------------------------------------------------------------------
/homepage/homepage/app/(others)/(home)/toolkit/cursorsAndCarets.mdx:
--------------------------------------------------------------------------------
1 | - 2D canvas cursors
2 | - Text carets
3 | - Element-based focus-presence
4 | - Scroll-based / out-of-bounds helpers
5 |
--------------------------------------------------------------------------------
/homepage/homepage/app/(others)/(home)/toolkit/twoWaySync.mdx:
--------------------------------------------------------------------------------
1 | - Prisma
2 | - Drizzle
3 | - PostgreSQL introspection
4 |
--------------------------------------------------------------------------------
/homepage/homepage/app/(others)/(home)/toolkit/videoPresenceCalls.mdx:
--------------------------------------------------------------------------------
1 | - Automatic WebRTC connections between `Group` members
2 | - Audio/video recording into `BinaryCoStreams`
3 |
--------------------------------------------------------------------------------
/homepage/homepage/app/(others)/cloud/cloudPlusBackup.mdx:
--------------------------------------------------------------------------------
1 | #### Jazz Cloud + Data Backup Node
2 |
3 |
4 | Connect your users to Jazz Cloud for all its benefits, but also run and
5 | connect your own data backup node.
6 |
7 |
--------------------------------------------------------------------------------
/homepage/homepage/app/(others)/cloud/cloudPlusDIY.mdx:
--------------------------------------------------------------------------------
1 | #### Jazz Cloud + DIY Cloud
2 |
3 |
4 | Connect your users to Jazz Cloud, or your own nodes as a lower-performance
5 | fallback. The two networks stay in constant sync.
6 |
7 |
--------------------------------------------------------------------------------
/homepage/homepage/app/(others)/cloud/completelyDIY.mdx:
--------------------------------------------------------------------------------
1 | #### Completely DIY Cloud
2 |
3 |
4 | Build your own network of sync and storage nodes. Handle
5 | devops,networking, security and backups yourself.
6 |
7 |
--------------------------------------------------------------------------------
/homepage/homepage/app/(others)/layout.tsx:
--------------------------------------------------------------------------------
1 | import { JazzNav } from "@/components/nav";
2 |
3 | export default function RootLayout({
4 | children,
5 | }: {
6 | children: React.ReactNode;
7 | }) {
8 | return (
9 |
10 |
11 | {children}
12 |
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/homepage/homepage/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/homepage/app/favicon.ico
--------------------------------------------------------------------------------
/homepage/homepage/components/ThemeToggle.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { ThemeToggle as GardenThemeToggle } from "@garden-co/design-system/src/components/molecules/ThemeToggle";
4 | import { useTheme } from "next-themes";
5 |
6 | export function ThemeToggle({ className }: { className?: string }) {
7 | let useThemeProps = useTheme();
8 |
9 | return ;
10 | }
11 |
--------------------------------------------------------------------------------
/homepage/homepage/components/docs/Framework.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { frameworkNames } from "@/content/framework";
4 | import { useFramework } from "@/lib/use-framework";
5 |
6 | export function Framework() {
7 | const framework = useFramework();
8 |
9 | return <>{frameworkNames[framework].label}>;
10 | }
11 |
--------------------------------------------------------------------------------
/homepage/homepage/components/examples/CreateJazzApp.mdx:
--------------------------------------------------------------------------------
1 | ```sh
2 | npx create-jazz-app@latest --example $EXAMPLE
3 | ```
4 |
--------------------------------------------------------------------------------
/homepage/homepage/components/home/CodeStepAction.mdx:
--------------------------------------------------------------------------------
1 | ```ts
2 | const message = Message.create({
3 | text: “Hello world!”
4 | }, chat._owner);
5 |
6 | chat.push(message);
7 | ```
8 |
--------------------------------------------------------------------------------
/homepage/homepage/components/home/CodeStepCloud.mdx:
--------------------------------------------------------------------------------
1 | ```tsx
2 |
5 | {children}
6 |
7 | ```
8 |
--------------------------------------------------------------------------------
/homepage/homepage/components/home/CodeStepRender.mdx:
--------------------------------------------------------------------------------
1 | ```tsx
2 | import { useCoState } from "jazz-react";
3 |
4 | const ChatScreen = ({ id }) => {
5 | const chat = useCoState(Chat, id);
6 |
7 | return chat.messages.map(msg => (
8 | {msg.text}
9 | ));
10 | }
11 | ```
12 |
--------------------------------------------------------------------------------
/homepage/homepage/components/home/CodeStepSchema.mdx:
--------------------------------------------------------------------------------
1 | ```ts
2 | import { co, z } from "jazz-tools";
3 |
4 | const Message = co.map({
5 | text: z.string(),
6 | });
7 |
8 | const Chat = co.list(Message);
9 | ```
10 |
11 |
--------------------------------------------------------------------------------
/homepage/homepage/components/home/CollaborationInvite.mdx:
--------------------------------------------------------------------------------
1 | ```tsx
2 | // links to message, Group is inferred
3 | createInviteLink(
4 | messageId,
5 | "writer", // role that recipient gets
6 | );
7 | ```
8 |
--------------------------------------------------------------------------------
/homepage/homepage/components/home/CollaborationPrivate.mdx:
--------------------------------------------------------------------------------
1 | ```tsx
2 | Message.create({
3 | text: "Private message to myself."
4 | });
5 | ```
6 |
--------------------------------------------------------------------------------
/homepage/homepage/components/home/CollaborationPublic.mdx:
--------------------------------------------------------------------------------
1 | ```tsx
2 | const group = Group.create();
3 | group.addMember(Alice, "writer");
4 | group.addMember("everyone", "reader");
5 |
6 | Message.create({ text: "..." }, group);
7 | ```
8 |
--------------------------------------------------------------------------------
/homepage/homepage/components/home/CreateJazzApp.mdx:
--------------------------------------------------------------------------------
1 | ```sh
2 | npx create-jazz-app@latest
3 |
4 | > Framework: react
5 | > Auth: passkey
6 | > Project name: _
7 | ```
8 |
--------------------------------------------------------------------------------
/homepage/homepage/content/docs/authentication/clerk/react-native.mdx:
--------------------------------------------------------------------------------
1 | export const metadata = {
2 | description: "We do not currently support Clerk in React Native, but we do have support for React Native Expo."
3 | };
4 |
5 |
6 | # Clerk Authentication
7 |
8 | We do not currently support Clerk in React Native, but we do have support for [React Native Expo](/docs/react-native-expo/authentication/clerk).
9 |
--------------------------------------------------------------------------------
/homepage/homepage/content/docs/authentication/jazz-cloud/react-native.mdx:
--------------------------------------------------------------------------------
1 | # Jazz Cloud Authentication
2 |
3 | We do not currently support using Jazz Cloud Authentication with React Native.
4 | We do have support for [React](/docs/react/authentication/jazz-cloud), [Expo](/docs/react-native-expo/authentication/jazz-cloud), and [vanilla JavaScript](/docs/vanilla/authentication/jazz-cloud).
5 |
--------------------------------------------------------------------------------
/homepage/homepage/content/docs/authentication/jazz-cloud/svelte.mdx:
--------------------------------------------------------------------------------
1 | # Jazz Cloud Authentication
2 |
3 | We do not currently support using Jazz Cloud Authentication with Svelte.
4 | We do have support for [React](/docs/react/authentication/jazz-cloud), [Expo](/docs/react-native-expo/authentication/jazz-cloud), and [vanilla JavaScript](/docs/vanilla/authentication/jazz-cloud).
5 |
--------------------------------------------------------------------------------
/homepage/homepage/content/docs/authentication/jazz-cloud/vue.mdx:
--------------------------------------------------------------------------------
1 | # Jazz Cloud Authentication
2 |
3 | We do not currently support using Jazz Cloud Authentication with Vue.
4 | We do have support for [React](/docs/react/authentication/jazz-cloud), [Expo](/docs/react-native-expo/authentication/jazz-cloud), and [vanilla JavaScript](/docs/vanilla/authentication/jazz-cloud).
5 |
--------------------------------------------------------------------------------
/homepage/homepage/content/marketingCopy.ts:
--------------------------------------------------------------------------------
1 | export const marketingCopy = {
2 | headline: "Whip up an app",
3 | description:
4 | "Jazz gives you data without needing a database — plus auth, permissions, files and multiplayer without needing a backend. Do everything right from the frontend and ship better apps, faster.",
5 | };
6 |
--------------------------------------------------------------------------------
/homepage/homepage/content/socials.ts:
--------------------------------------------------------------------------------
1 | export const socials = {
2 | github: "https://github.com/garden-co/jazz",
3 | discord: "https://discord.gg/utDMjHYg42",
4 | bluesky: "https://bsky.app/profile/jazz.tools",
5 | x: "https://x.com/jazz_tools",
6 | };
7 |
--------------------------------------------------------------------------------
/homepage/homepage/docs/README.md:
--------------------------------------------------------------------------------
1 | # Homepage documentation
2 |
3 | This folder contains the documentation for the homepage documentation. Yup.
4 |
5 | ## Tone and Voice
6 |
7 | We have a tone and voice document. `./tone-and-voice.md`
8 |
9 | ## Writing docs
10 |
11 | We use MDX to write docs. You can find our docs in the `../app/(docs)/docs` folder.
12 |
13 |
--------------------------------------------------------------------------------
/homepage/homepage/lib/use-framework.ts:
--------------------------------------------------------------------------------
1 | import { DEFAULT_FRAMEWORK, isValidFramework } from "@/content/framework";
2 | import { useParams } from "next/navigation";
3 |
4 | export const useFramework = () => {
5 | const { framework } = useParams<{ framework?: string }>();
6 |
7 | return framework && isValidFramework(framework)
8 | ? framework
9 | : DEFAULT_FRAMEWORK;
10 | };
11 |
--------------------------------------------------------------------------------
/homepage/homepage/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { type ClassValue, clsx } from "clsx";
2 | import { twMerge } from "tailwind-merge";
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs));
6 | }
7 |
--------------------------------------------------------------------------------
/homepage/homepage/postcss.config.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | "@csstools/postcss-oklab-function": { preserve: true },
5 | autoprefixer: {},
6 | },
7 | };
8 |
--------------------------------------------------------------------------------
/homepage/homepage/public/Zod sponsor message.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/homepage/public/Zod sponsor message.png
--------------------------------------------------------------------------------
/homepage/homepage/public/chatgpt-with-llms-full-txt.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/homepage/public/chatgpt-with-llms-full-txt.jpg
--------------------------------------------------------------------------------
/homepage/homepage/public/dog.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/homepage/public/dog.jpg
--------------------------------------------------------------------------------
/homepage/homepage/public/hend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/homepage/public/hend.png
--------------------------------------------------------------------------------
/homepage/homepage/public/invoice-radar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/homepage/public/invoice-radar.png
--------------------------------------------------------------------------------
/homepage/homepage/public/learn-anything.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/homepage/public/learn-anything.png
--------------------------------------------------------------------------------
/homepage/homepage/public/leaves.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/homepage/public/leaves.jpg
--------------------------------------------------------------------------------
/homepage/homepage/public/theo-dark.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/homepage/public/theo-dark.jpg
--------------------------------------------------------------------------------
/homepage/homepage/public/theo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/homepage/public/theo.jpg
--------------------------------------------------------------------------------
/homepage/homepage/public/todo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/homepage/homepage/public/todo.jpg
--------------------------------------------------------------------------------
/homepage/homepage/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "jazz-homepage"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/homepage/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | packages:
2 | - "homepage"
3 | - "design-system"
4 | - "gcmp"
--------------------------------------------------------------------------------
/homepage/turbo.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://turbo.build/schema.json",
3 | "tasks": {
4 | "build": {
5 | "dependsOn": ["^build"],
6 | "outputs": [".next/**", "!.next/cache/**"]
7 | },
8 | "dev": {
9 | "cache": false,
10 | "persistent": true,
11 | "dependsOn": ["build"]
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/lefthook.yml:
--------------------------------------------------------------------------------
1 | pre-commit:
2 | commands:
3 | check:
4 | glob: "*.{js,ts,cjs,mjs,d.cts,d.mts,jsx,tsx,json,jsonc,vue,svelte}"
5 | run: npx @biomejs/biome check --write --no-errors-on-unmatched --files-ignore-unknown=true --colors=off {staged_files}
6 | stage_fixed: true
--------------------------------------------------------------------------------
/packages/cojson-storage-indexeddb/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/cojson-storage-indexeddb/README.md:
--------------------------------------------------------------------------------
1 | # CoJSON Storage IndexedDB
2 |
3 | This implements persistence for CoJSON / Jazz (see [jazz.tools](https://jazz.tools)) using IndexedDB.
--------------------------------------------------------------------------------
/packages/cojson-storage-indexeddb/src/index.ts:
--------------------------------------------------------------------------------
1 | export {
2 | IDBNode,
3 | IDBNode as IDBStorage,
4 | internal_setDatabaseName,
5 | } from "./idbNode.js";
6 |
--------------------------------------------------------------------------------
/packages/cojson-storage-indexeddb/vitest.config.ts:
--------------------------------------------------------------------------------
1 | import { defineProject } from "vitest/config";
2 |
3 | export default defineProject({
4 | test: {
5 | name: "cojson-storage-indexeddb",
6 | browser: {
7 | enabled: true,
8 | provider: "playwright",
9 | instances: [{ browser: "chromium", headless: true }],
10 | },
11 | },
12 | });
13 |
--------------------------------------------------------------------------------
/packages/cojson-storage-sqlite/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/cojson-storage-sqlite/README.md:
--------------------------------------------------------------------------------
1 | # CoJSON Storage SQLite
2 |
3 | This implements persistence for CoJSON / Jazz (see [jazz.tools](https://jazz.tools)) using SQLite.
--------------------------------------------------------------------------------
/packages/cojson-storage-sqlite/src/index.ts:
--------------------------------------------------------------------------------
1 | export { SQLiteNode, SQLiteNode as SQLiteStorage } from "./sqliteNode.js";
2 |
--------------------------------------------------------------------------------
/packages/cojson-storage/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/cojson-storage/README.md:
--------------------------------------------------------------------------------
1 | # CoJSON Storage IndexedDB
2 |
3 | This implements persistence sync service for CoJSON / Jazz (see [jazz.tools](https://jazz.tools)).
4 |
--------------------------------------------------------------------------------
/packages/cojson-storage/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./types.js";
2 | export { StorageManagerSync } from "./managerSync.js";
3 | export { StorageManagerAsync } from "./managerAsync.js";
4 | export * from "./sqlite/index.js";
5 | export * from "./sqliteAsync/index.js";
6 |
--------------------------------------------------------------------------------
/packages/cojson-storage/src/sqlite/index.ts:
--------------------------------------------------------------------------------
1 | export { SQLiteNodeBase } from "./node.js";
2 | export type { SQLiteDatabaseDriver } from "./types.js";
3 |
--------------------------------------------------------------------------------
/packages/cojson-storage/src/sqlite/types.ts:
--------------------------------------------------------------------------------
1 | export interface SQLiteDatabaseDriver {
2 | run(sql: string, params: unknown[]): void;
3 | get(sql: string, params: unknown[]): T | undefined;
4 | query(sql: string, params: unknown[]): T[];
5 | transaction(callback: () => unknown): void;
6 | }
7 |
--------------------------------------------------------------------------------
/packages/cojson-storage/src/sqliteAsync/index.ts:
--------------------------------------------------------------------------------
1 | export { SQLiteNodeBaseAsync } from "./node.js";
2 | export type { SQLiteDatabaseDriverAsync } from "./types.js";
3 |
--------------------------------------------------------------------------------
/packages/cojson-storage/src/sqliteAsync/types.ts:
--------------------------------------------------------------------------------
1 | export interface SQLiteDatabaseDriverAsync {
2 | initialize(): Promise;
3 | run(sql: string, params: unknown[]): Promise;
4 | query(sql: string, params: unknown[]): Promise;
5 | get(sql: string, params: unknown[]): Promise;
6 | transaction(callback: () => unknown): Promise;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/cojson-transport-ws/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/cojson-transport-ws/README.md:
--------------------------------------------------------------------------------
1 | # CoJSON Transport NodeJS/Websockets
2 |
3 | This implements sync protocol transport for CoJSON / Jazz (see [jazz.tools](https://jazz.tools)) using WebSockets.
--------------------------------------------------------------------------------
/packages/cojson-transport-ws/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./createWebSocketPeer.js";
2 | export * from "./WebSocketPeerWithReconnection.js";
3 | export { AnyWebSocketConstructor } from "./types.js";
4 |
--------------------------------------------------------------------------------
/packages/cojson/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/cojson/README.md:
--------------------------------------------------------------------------------
1 | # CoJSON
2 |
3 | CoJSON is the core protocol implementation of Jazz, a framework for distributed state.
4 |
5 | See [jazz.tools](https://jazz.tools).
--------------------------------------------------------------------------------
/packages/cojson/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./exports.js";
2 |
--------------------------------------------------------------------------------
/packages/cojson/src/media.ts:
--------------------------------------------------------------------------------
1 | import { RawCoMap } from "./coValues/coMap.js";
2 | import { RawBinaryCoStream } from "./coValues/coStream.js";
3 |
4 | export type ImageDefinition = RawCoMap<{
5 | originalSize: [number, number];
6 | placeholderDataURL?: string;
7 | [res: `${number}x${number}`]: RawBinaryCoStream["id"];
8 | }>;
9 |
--------------------------------------------------------------------------------
/packages/cojson/src/typeUtils/accountOrAgentIDfromSessionID.ts:
--------------------------------------------------------------------------------
1 | import { RawAccountID } from "../coValues/account.js";
2 | import { AgentID, SessionID } from "../ids.js";
3 |
4 | export function accountOrAgentIDfromSessionID(
5 | sessionID: SessionID,
6 | ): RawAccountID | AgentID {
7 | const until = sessionID.indexOf("_session");
8 | return sessionID.slice(0, until) as RawAccountID | AgentID;
9 | }
10 |
--------------------------------------------------------------------------------
/packages/cojson/src/typeUtils/isAccountID.ts:
--------------------------------------------------------------------------------
1 | import type { RawAccountID } from "../coValues/account.js";
2 | import type { AgentID } from "../ids.js";
3 |
4 | export function isAccountID(id: RawAccountID | AgentID): id is RawAccountID {
5 | return id.startsWith("co_");
6 | }
7 |
--------------------------------------------------------------------------------
/packages/create-jazz-app/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/cursor-docs/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/cursor-docs/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # cursor-docs
2 |
3 | ## 0.0.2
4 |
5 | ### Patch Changes
6 |
7 | - 3fa276c: Added Cursor docs
8 |
--------------------------------------------------------------------------------
/packages/cursor-docs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "cursor-docs",
3 | "license": "MIT",
4 | "version": "0.0.2",
5 | "scripts": {}
6 | }
7 |
--------------------------------------------------------------------------------
/packages/hash-slash/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/hash-slash/README.md:
--------------------------------------------------------------------------------
1 | # Hash-Slash
2 |
3 | This is a tiny location hash based router for React app demos.
--------------------------------------------------------------------------------
/packages/hash-slash/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "lib": ["ESNext", "DOM"],
4 | "module": "esnext",
5 | "target": "ES2020",
6 | "moduleResolution": "bundler",
7 | "moduleDetection": "force",
8 | "strict": true,
9 | "skipLibCheck": true,
10 | "jsx": "react",
11 | "forceConsistentCasingInFileNames": true,
12 | "noUncheckedIndexedAccess": true,
13 | "esModuleInterop": true
14 | },
15 | "include": ["./src/**/*"]
16 | }
17 |
--------------------------------------------------------------------------------
/packages/jazz-auth-betterauth/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-auth-betterauth/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "lib": ["ESNext", "DOM"],
4 | "module": "esnext",
5 | "target": "ES2020",
6 | "moduleResolution": "bundler",
7 | "moduleDetection": "force",
8 | "strict": true,
9 | "skipLibCheck": true,
10 | "jsx": "react",
11 | "forceConsistentCasingInFileNames": true,
12 | "noUncheckedIndexedAccess": true,
13 | "esModuleInterop": true
14 | },
15 | "include": ["./src/**/*"]
16 | }
17 |
--------------------------------------------------------------------------------
/packages/jazz-auth-clerk/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-betterauth-client-plugin/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-betterauth-client-plugin/src/index.ts:
--------------------------------------------------------------------------------
1 | import type { BetterAuthClientPlugin } from "better-auth";
2 | import type { jazzPlugin } from "jazz-betterauth-server-plugin";
3 |
4 | type JazzPlugin = typeof jazzPlugin;
5 |
6 | export const jazzClientPlugin = () => {
7 | return {
8 | id: "jazz-plugin",
9 | $InferServerPlugin: {} as ReturnType,
10 | } satisfies BetterAuthClientPlugin;
11 | };
12 |
--------------------------------------------------------------------------------
/packages/jazz-betterauth-server-plugin/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-betterauth-server-plugin/src/types.ts:
--------------------------------------------------------------------------------
1 | import type { User } from "better-auth";
2 |
3 | export interface UserWithJazz extends User {
4 | encryptedCredentials: string;
5 | salt: string;
6 | }
7 |
--------------------------------------------------------------------------------
/packages/jazz-browser-media-images/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-browser-media-images/README.md:
--------------------------------------------------------------------------------
1 | # `jazz-browser-media-images`
2 |
3 | This is an optional add-on for `jazz-browser` or `jazz-react` that provides support for creating `ImageDefinition`-compatible image sets from images provided as `File` or `Blob` objects.
4 |
5 | In particular, it implements multi-resolution resizing based on `pica`.
--------------------------------------------------------------------------------
/packages/jazz-browser/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-browser/README.md:
--------------------------------------------------------------------------------
1 | # `jazz-browser`
2 |
3 | These are browser bindings for Jazz (see [jazz.tools](https://jazz.tools)), a framework for distributed state.
4 |
5 | Use this only if you want to write Jazz apps using plain JavaScript,
6 | or to build your framework bindings for Jazz.
7 |
8 | ## Higher-level framework bindings:
9 |
10 | - `jazz-react` - React bindings for Jazz
--------------------------------------------------------------------------------
/packages/jazz-expo/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
3 |
--------------------------------------------------------------------------------
/packages/jazz-expo/auth/clerk.d.ts:
--------------------------------------------------------------------------------
1 | // Re-export the Clerk provider from the dist folder to make the `jazz-expo/auth/clerk` import work everywhere
2 | export * from "../dist/auth/clerk";
3 |
--------------------------------------------------------------------------------
/packages/jazz-expo/auth/clerk.js:
--------------------------------------------------------------------------------
1 | // Re-export the Clerk provider from the dist folder to make the `jazz-expo/auth/clerk` import work everywhere
2 | export * from "../dist/auth/clerk";
3 |
--------------------------------------------------------------------------------
/packages/jazz-expo/crypto/index.d.ts:
--------------------------------------------------------------------------------
1 | // Re-export the crypto module from the dist folder to make the `jazz-expo/crypto` import work everywhere
2 | export * from "jazz-react-native-core/dist/crypto";
3 |
--------------------------------------------------------------------------------
/packages/jazz-expo/crypto/index.js:
--------------------------------------------------------------------------------
1 | // Re-export the crypto module from the dist folder to make the `jazz-expo/crypto` import work everywhere
2 | export * from "jazz-react-native-core/dist/crypto";
3 |
--------------------------------------------------------------------------------
/packages/jazz-expo/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from "jazz-react-native-core";
2 |
3 | export * from "./provider.js";
4 | export * from "./storage/expo-secure-store-adapter.js";
5 | export * from "./storage/expo-sqlite-adapter.js";
6 |
--------------------------------------------------------------------------------
/packages/jazz-expo/src/testing.ts:
--------------------------------------------------------------------------------
1 | export * from "jazz-react-native-core/dist/testing";
2 |
--------------------------------------------------------------------------------
/packages/jazz-inspector-element/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
26 | sync-db/
--------------------------------------------------------------------------------
/packages/jazz-inspector-element/src/main.ts:
--------------------------------------------------------------------------------
1 | if (typeof window !== "undefined" && process.env.NODE_ENV === "development") {
2 | import("./element.js");
3 | }
4 |
--------------------------------------------------------------------------------
/packages/jazz-inspector-element/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/packages/jazz-inspector-element/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/jazz-inspector/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
26 | sync-db/
--------------------------------------------------------------------------------
/packages/jazz-inspector/README.md:
--------------------------------------------------------------------------------
1 | # Jazz Inspector
2 |
3 | Use this to visually inspect a Jazz account or other CoValue.
4 |
5 | Still unstable, you will very likely encounter bugs.
6 |
--------------------------------------------------------------------------------
/packages/jazz-inspector/public/jazz-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/packages/jazz-inspector/public/jazz-logo.png
--------------------------------------------------------------------------------
/packages/jazz-inspector/src/ui/heading.tsx:
--------------------------------------------------------------------------------
1 | import { styled } from "goober";
2 |
3 | const StyledHeading = styled("h1")<{ className?: string }>`
4 | font-size: 1.125rem;
5 | text-align: center;
6 | font-weight: 500;
7 | color: var(--j-text-color-strong);
8 | `;
9 |
10 | export function Heading({
11 | children,
12 | className,
13 | }: React.PropsWithChildren<{ className?: string }>) {
14 | return {children};
15 | }
16 |
--------------------------------------------------------------------------------
/packages/jazz-inspector/src/ui/icons/chevron-down-icon.tsx:
--------------------------------------------------------------------------------
1 | export function ChevronDownIcon(props: React.SVGProps) {
2 | return (
3 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/packages/jazz-inspector/src/viewer/types.ts:
--------------------------------------------------------------------------------
1 | import { CoID, RawCoValue } from "cojson";
2 |
3 | export type PageInfo = {
4 | coId: CoID;
5 | name?: string;
6 | };
7 |
8 | export const isCoId = (coId: unknown): coId is CoID =>
9 | typeof coId === "string" &&
10 | coId.startsWith("co_") &&
11 | !coId.includes("inviteSecret");
12 |
--------------------------------------------------------------------------------
/packages/jazz-inspector/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/packages/jazz-inspector/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/jazz-nodejs/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-nodejs/README.md:
--------------------------------------------------------------------------------
1 | # `jazz-nodejs`
2 |
3 | Node.JS bindings for Jazz (see [jazz.tools](https://jazz.tools)), a framework for distributed state.
4 |
5 | Lets you write server-side workers that interact with Jazz state.
6 |
7 | Compatible runtimes:
8 |
9 | - NodeJS
10 | - Bun
--------------------------------------------------------------------------------
/packages/jazz-react-auth-betterauth/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-react-auth-clerk/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-react-core/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-react-core/README.md:
--------------------------------------------------------------------------------
1 | # `jazz-react-core`
2 |
3 | Platform-agnostic React bindings for [jazz.tools](https://jazz.tools), a framework for distributed state.
4 |
5 | Used as building block for [jazz-react-native](https://github.com/garden-co/jazz/tree/main/packages/jazz-react-native) and [jazz-react](https://github.com/garden-co/jazz/tree/main/packages/jazz-react).
--------------------------------------------------------------------------------
/packages/jazz-react-core/src/auth/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./DemoAuth.js";
2 | export * from "./PassphraseAuth.js";
3 |
--------------------------------------------------------------------------------
/packages/jazz-react-core/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./hooks.js";
2 | export * from "./provider.js";
3 | export * from "./auth/index.js";
4 |
--------------------------------------------------------------------------------
/packages/jazz-react-core/src/provider.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import { Account, JazzContextManager, JazzContextType } from "jazz-tools";
4 |
5 | export const JazzContext = React.createContext<
6 | JazzContextType | undefined
7 | >(undefined);
8 |
9 | export const JazzContextManagerContext = React.createContext<
10 | JazzContextManager | undefined
11 | >(undefined);
12 |
--------------------------------------------------------------------------------
/packages/jazz-react-native-core/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
3 |
--------------------------------------------------------------------------------
/packages/jazz-react-native-core/src/crypto/index.ts:
--------------------------------------------------------------------------------
1 | export { RNQuickCrypto } from "./RNQuickCrypto.js";
2 |
--------------------------------------------------------------------------------
/packages/jazz-react-native-core/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./provider.js";
2 | export * from "./auth/auth.js";
3 | export * from "./hooks.js";
4 | export * from "./media.js";
5 | export * from "./storage/kv-store-context.js";
6 |
7 | export { SQLiteDatabaseDriverAsync } from "cojson-storage";
8 | export { parseInviteLink } from "jazz-tools";
9 | export { createInviteLink, setupKvStore } from "./platform.js";
10 |
--------------------------------------------------------------------------------
/packages/jazz-react-native-core/src/testing.tsx:
--------------------------------------------------------------------------------
1 | export * from "jazz-react-core/testing";
2 |
--------------------------------------------------------------------------------
/packages/jazz-react-native-media-images/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-react-native-media-images/README.md:
--------------------------------------------------------------------------------
1 | # `jazz-react-native-media-images`
2 |
3 | This is an optional add-on for `jazz-expo` that provides support for creating `ImageDefinition`-compatible image sets from images provided as base64 data URIs.
4 |
5 | In particular, it implements multi-resolution resizing based on `@bam.tech/react-native-image-resizer`.
--------------------------------------------------------------------------------
/packages/jazz-react-native/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
3 |
--------------------------------------------------------------------------------
/packages/jazz-react-native/crypto/index.d.ts:
--------------------------------------------------------------------------------
1 | // Re-export the crypto module from the dist folder to make the `jazz-react-native/crypto` import work everywhere
2 | export * from "jazz-react-native-core/dist/crypto";
3 |
--------------------------------------------------------------------------------
/packages/jazz-react-native/crypto/index.js:
--------------------------------------------------------------------------------
1 | // Re-export the crypto module from the dist folder to make the `jazz-react-native/crypto` import work everywhere
2 | export * from "jazz-react-native-core/dist/crypto";
3 |
--------------------------------------------------------------------------------
/packages/jazz-react-native/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from "jazz-react-native-core";
2 |
3 | export * from "./provider.js";
4 | export * from "./storage/mmkv-store-adapter.js";
5 | export * from "./storage/op-sqlite-adapter.js";
6 |
--------------------------------------------------------------------------------
/packages/jazz-react-native/src/testing.ts:
--------------------------------------------------------------------------------
1 | export * from "jazz-react-native-core/dist/testing";
2 |
--------------------------------------------------------------------------------
/packages/jazz-react/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-react/README.md:
--------------------------------------------------------------------------------
1 | # `jazz-react`
2 |
3 | React bindings for Jazz (see [jazz.tools](https://jazz.tools)), a framework for distributed state.
--------------------------------------------------------------------------------
/packages/jazz-react/src/auth/auth.ts:
--------------------------------------------------------------------------------
1 | export { DemoAuthBasicUI } from "./DemoAuth.js";
2 | export { usePasskeyAuth, PasskeyAuthBasicUI } from "./PasskeyAuth.js";
3 | export { PassphraseAuthBasicUI } from "./PassphraseAuth.js";
4 | export {
5 | useIsAuthenticated,
6 | useDemoAuth,
7 | usePassphraseAuth,
8 | } from "jazz-react-core";
9 |
--------------------------------------------------------------------------------
/packages/jazz-react/src/testing.tsx:
--------------------------------------------------------------------------------
1 | export * from "jazz-react-core/testing";
2 |
--------------------------------------------------------------------------------
/packages/jazz-richtext-prosemirror/src/index.ts:
--------------------------------------------------------------------------------
1 | export { createJazzPlugin } from "./lib/plugin.js";
2 |
--------------------------------------------------------------------------------
/packages/jazz-richtext-prosemirror/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "lib": ["ESNext", "DOM"],
4 | "module": "esnext",
5 | "target": "ES2021",
6 | "moduleResolution": "bundler",
7 | "moduleDetection": "force",
8 | "strict": true,
9 | "skipLibCheck": true,
10 | "forceConsistentCasingInFileNames": true,
11 | "noUncheckedIndexedAccess": true
12 | },
13 | "include": ["./src/**/*.ts"]
14 | }
15 |
--------------------------------------------------------------------------------
/packages/jazz-richtext-prosemirror/vitest.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vitest/config";
2 |
3 | export default defineConfig({
4 | test: {
5 | environment: "jsdom",
6 | globals: false,
7 | },
8 | });
9 |
--------------------------------------------------------------------------------
/packages/jazz-richtext-tiptap/README.md:
--------------------------------------------------------------------------------
1 | # Jazz Tiptap Rich-text Integration
2 |
3 | Integration between [Tiptap](https://tiptap.dev/) and Jazz's collaborative text value `CoRichText`, enabling real-time collaborative rich text editing in your applications.
4 |
--------------------------------------------------------------------------------
/packages/jazz-richtext-tiptap/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "lib": ["ESNext", "DOM"],
4 | "module": "esnext",
5 | "target": "ES2021",
6 | "moduleResolution": "bundler",
7 | "moduleDetection": "force",
8 | "strict": true,
9 | "skipLibCheck": true,
10 | "forceConsistentCasingInFileNames": true,
11 | "noUncheckedIndexedAccess": true
12 | },
13 | "include": ["./src/**/*.ts"]
14 | }
15 |
--------------------------------------------------------------------------------
/packages/jazz-richtext-tiptap/vitest.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vitest/config";
2 |
3 | export default defineConfig({
4 | test: {
5 | environment: "jsdom",
6 | globals: false,
7 | },
8 | });
9 |
--------------------------------------------------------------------------------
/packages/jazz-run/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-run/README.md:
--------------------------------------------------------------------------------
1 | # `jazz-run`
2 |
3 | CLI tools for Jazz (see [jazz.tools](https://jazz.tools)), a framework for distributed state.
--------------------------------------------------------------------------------
/packages/jazz-svelte/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | # Output
4 | .output
5 | .vercel
6 | /.svelte-kit
7 | /build
8 | /dist
9 |
10 | # OS
11 | .DS_Store
12 | Thumbs.db
13 |
14 | # Env
15 | .env
16 | .env.*
17 | !.env.example
18 | !.env.test
19 |
20 | # Vite
21 | vite.config.js.timestamp-*
22 | vite.config.ts.timestamp-*
23 |
--------------------------------------------------------------------------------
/packages/jazz-svelte/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/packages/jazz-svelte/.prettierignore:
--------------------------------------------------------------------------------
1 | # Package Managers
2 | package-lock.json
3 | pnpm-lock.yaml
4 | yarn.lock
5 |
--------------------------------------------------------------------------------
/packages/jazz-svelte/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "useTabs": false,
3 | "tabWidth": 2,
4 | "singleQuote": true,
5 | "trailingComma": "none",
6 | "printWidth": 100,
7 | "plugins": ["prettier-plugin-svelte"],
8 | "overrides": [
9 | {
10 | "files": "*.svelte",
11 | "options": {
12 | "parser": "svelte"
13 | }
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/packages/jazz-svelte/src/app.d.ts:
--------------------------------------------------------------------------------
1 | // See https://svelte.dev/docs/kit/types#app.d.ts
2 | // for information about these interfaces
3 | declare global {
4 | namespace App {
5 | // interface Error {}
6 | // interface Locals {}
7 | // interface PageData {}
8 | // interface PageState {}
9 | // interface Platform {}
10 | }
11 | }
12 |
13 | export {};
14 |
--------------------------------------------------------------------------------
/packages/jazz-svelte/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %sveltekit.head%
8 |
9 |
10 | %sveltekit.body%
11 |
12 |
13 |
--------------------------------------------------------------------------------
/packages/jazz-svelte/src/lib/auth/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./PasskeyAuth.svelte.js";
2 | export * from "./PassphraseAuth.svelte.js";
3 | export { default as PasskeyAuthBasicUI } from "./PasskeyAuthBasicUI.svelte";
--------------------------------------------------------------------------------
/packages/jazz-svelte/src/lib/index.ts:
--------------------------------------------------------------------------------
1 | export { createInviteLink, parseInviteLink } from "jazz-browser";
2 | export * from "./auth/index.js";
3 | export * from "./jazz.svelte.js";
4 | export * from "./jazz.class.svelte.js";
5 | export { useIsAuthenticated } from "./auth/useIsAuthenticated.svelte.js";
--------------------------------------------------------------------------------
/packages/jazz-svelte/src/lib/tests/components/ProviderTestComponent.svelte:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
11 | Hello
12 |
13 |
14 |
--------------------------------------------------------------------------------
/packages/jazz-svelte/src/routes/+page.svelte:
--------------------------------------------------------------------------------
1 | Welcome to your library project
2 | Create your package using @sveltejs/package and preview/showcase your work with SvelteKit
3 | Visit svelte.dev/docs/kit to read the documentation
4 |
--------------------------------------------------------------------------------
/packages/jazz-svelte/src/test/setup.ts:
--------------------------------------------------------------------------------
1 | import '@testing-library/jest-dom';
2 | import { cleanup } from '@testing-library/svelte';
3 | import { afterEach } from 'vitest';
4 |
5 | // Cleanup after each test case
6 | afterEach(() => {
7 | cleanup();
8 | });
9 |
10 |
--------------------------------------------------------------------------------
/packages/jazz-svelte/testSetup.ts:
--------------------------------------------------------------------------------
1 | import '@testing-library/jest-dom';
2 | import { cleanup } from '@testing-library/svelte';
3 | import { afterEach } from 'vitest';
4 |
5 | // Cleanup after each test case
6 | afterEach(() => {
7 | cleanup();
8 | });
9 |
10 |
--------------------------------------------------------------------------------
/packages/jazz-svelte/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./.svelte-kit/tsconfig.json",
3 | "compilerOptions": {
4 | "allowJs": true,
5 | "checkJs": true,
6 | "esModuleInterop": true,
7 | "forceConsistentCasingInFileNames": true,
8 | "resolveJsonModule": true,
9 | "skipLibCheck": true,
10 | "sourceMap": true,
11 | "strict": true,
12 | "module": "NodeNext",
13 | "moduleResolution": "NodeNext"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/packages/jazz-svelte/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { sveltekit } from '@sveltejs/kit/vite';
2 | import { defineConfig } from 'vitest/config';
3 |
4 | export default defineConfig({
5 | plugins: [sveltekit()],
6 | });
7 |
--------------------------------------------------------------------------------
/packages/jazz-tools/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-tools/README.md:
--------------------------------------------------------------------------------
1 | # `jazz-tools`
2 |
3 | The base implementation for Jazz (see [jazz.tools](https://jazz.tools)), a framework for distributed state.
4 |
5 | Provides a high-level API around the CoJSON protocol.
6 |
7 | ## Environments and bindings
8 |
9 | - `jazz-browser` (Vanilla JavaScript)
10 | - `jazz-react` (React apps)
11 | - `jazz-nodejs` (NodeJS or Bun server workers)
--------------------------------------------------------------------------------
/packages/jazz-tools/src/coValues/coRichText.ts:
--------------------------------------------------------------------------------
1 | import { CoPlainText } from "./coPlainText.js";
2 |
3 | export class CoRichText extends CoPlainText {}
4 |
--------------------------------------------------------------------------------
/packages/jazz-tools/src/coValues/registeredSchemas.ts:
--------------------------------------------------------------------------------
1 | import type { Account, CoMap, Group } from "../internal.js";
2 |
3 | /**
4 | * Regisering schemas into this Record to avoid circular dependencies.
5 | */
6 | export const RegisteredSchemas = {} as {
7 | Account: typeof Account;
8 | Group: typeof Group;
9 | CoMap: typeof CoMap;
10 | };
11 |
--------------------------------------------------------------------------------
/packages/jazz-tools/src/implementation/anonymousJazzAgent.ts:
--------------------------------------------------------------------------------
1 | import { LocalNode } from "cojson";
2 |
3 | export class AnonymousJazzAgent {
4 | _type = "Anonymous" as const;
5 | constructor(public node: LocalNode) {}
6 | }
7 |
--------------------------------------------------------------------------------
/packages/jazz-tools/src/implementation/errors.ts:
--------------------------------------------------------------------------------
1 | export type UnavailableError = "unavailable";
2 |
--------------------------------------------------------------------------------
/packages/jazz-tools/src/implementation/inspect.ts:
--------------------------------------------------------------------------------
1 | export const inspect = Symbol.for("nodejs.util.inspect.custom");
2 | export type inspect = typeof inspect;
3 |
--------------------------------------------------------------------------------
/packages/jazz-tools/src/implementation/symbols.ts:
--------------------------------------------------------------------------------
1 | export type JazzToolsSymbol = SchemaInit | ItemsSym | MembersSym;
2 |
3 | export const SchemaInit = "$SchemaInit$";
4 | export type SchemaInit = typeof SchemaInit;
5 |
6 | export const ItemsSym = "$items$";
7 | export type ItemsSym = typeof ItemsSym;
8 |
9 | export const MembersSym = "$members$";
10 | export type MembersSym = typeof MembersSym;
11 |
--------------------------------------------------------------------------------
/packages/jazz-tools/src/implementation/zodSchema/coExport.ts:
--------------------------------------------------------------------------------
1 | export { Loaded as loaded } from "./zodSchema.js";
2 | export {
3 | coMapDefiner as map,
4 | coRecordDefiner as record,
5 | coListDefiner as list,
6 | coFeedDefiner as feed,
7 | coPlainTextDefiner as plainText,
8 | coRichTextDefiner as richText,
9 | coFileStreamDefiner as fileStream,
10 | coImageDefiner as image,
11 | coAccountDefiner as account,
12 | coProfileDefiner as profile,
13 | } from "./zodCo.js";
14 |
--------------------------------------------------------------------------------
/packages/jazz-tools/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./exports.js";
2 |
3 | export { MAX_RECOMMENDED_TX_SIZE, cojsonInternals } from "cojson";
4 |
--------------------------------------------------------------------------------
/packages/jazz-tools/src/subscribe/types.ts:
--------------------------------------------------------------------------------
1 | import type { CoValue, RefsToResolve, Resolved } from "../internal.js";
2 | import type { JazzError } from "./JazzError.js";
3 |
4 | export type SubscriptionValue> =
5 | | { type: "loaded"; value: Resolved; id: string }
6 | | JazzError;
7 | export type Unloaded = { type: "unloaded"; id: string };
8 |
--------------------------------------------------------------------------------
/packages/jazz-tools/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "tsup";
2 |
3 | export default defineConfig({
4 | entry: {
5 | index: "src/index.ts",
6 | testing: "src/testing.ts",
7 | },
8 | format: ["esm"],
9 | dts: false,
10 | sourcemap: true,
11 | clean: true,
12 | minify: false,
13 | });
14 |
--------------------------------------------------------------------------------
/packages/jazz-tools/vitest.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vitest/config";
2 |
3 | export default defineConfig({
4 | test: {
5 | typecheck: {
6 | enabled: true,
7 | checker: "tsc",
8 | },
9 | },
10 | });
11 |
--------------------------------------------------------------------------------
/packages/jazz-vue/.npmignore:
--------------------------------------------------------------------------------
1 | coverage
2 | node_modules
--------------------------------------------------------------------------------
/packages/jazz-vue/README.md:
--------------------------------------------------------------------------------
1 | # `jazz-vue`
2 |
3 | Vue bindings for Jazz (see [jazz.tools](https://jazz.tools)), a framework for distributed state.
4 |
--------------------------------------------------------------------------------
/packages/jazz-vue/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./composables.js";
2 | export { JazzProvider } from "./provider.js";
3 | export * from "./auth/useDemoAuth.js";
4 | export * from "./auth/usePassphraseAuth.js";
5 | export * from "./auth/usePasskeyAuth.js";
6 | export { default as DemoAuthBasicUI } from "./auth/DemoAuthBasicUI.vue";
7 | export { default as ProgressiveImg } from "./ProgressiveImg.vue";
8 |
9 | export { createInviteLink, parseInviteLink } from "jazz-browser";
10 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | packages:
2 | - "packages/*"
3 | - "examples/*"
4 | - "starters/*"
5 | - "tests/*"
6 |
7 | catalog:
8 | "@biomejs/biome": 1.9.4
9 | typescript: 5.6.2
10 | vite: 6.0.11
11 | vitest: 3.1.1
12 |
--------------------------------------------------------------------------------
/starters/react-passkey-auth/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 | /test-results/
15 | /playwright-report/
16 |
17 | # Editor directories and files
18 | .vscode/*
19 | !.vscode/extensions.json
20 | .idea
21 | .DS_Store
22 | *.suo
23 | *.ntvs*
24 | *.njsproj
25 | *.sln
26 | *.sw?
27 |
28 | playwright-report
--------------------------------------------------------------------------------
/starters/react-passkey-auth/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/starters/react-passkey-auth/favicon.ico
--------------------------------------------------------------------------------
/starters/react-passkey-auth/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/starters/react-passkey-auth/src/apiKey.ts:
--------------------------------------------------------------------------------
1 | export const apiKey = "react-passkey-auth@garden.co";
2 |
--------------------------------------------------------------------------------
/starters/react-passkey-auth/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/starters/react-passkey-auth/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/starters/react-passkey-auth/tests/starter.spec.ts:
--------------------------------------------------------------------------------
1 | import { expect, test } from "@playwright/test";
2 |
3 | test("home page loads", async ({ page }) => {
4 | await page.goto("/");
5 | await expect(page.getByText("Welcome!")).toBeVisible();
6 |
7 | await page.getByLabel("Name").fill("Bob");
8 | await expect(page.getByText("Welcome, Bob!")).toBeVisible();
9 | });
10 |
--------------------------------------------------------------------------------
/starters/react-passkey-auth/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [],
3 | "references": [
4 | { "path": "./tsconfig.app.json" },
5 | { "path": "./tsconfig.node.json" }
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/starters/react-passkey-auth/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "env": {
4 | "APP_NAME": "react-passkey-auth"
5 | }
6 | },
7 | "ignoreCommand": "node ../../ignore-vercel-build.js"
8 | }
9 |
--------------------------------------------------------------------------------
/starters/react-passkey-auth/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vite.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | });
8 |
--------------------------------------------------------------------------------
/tests/browser-integration/src/fixtures/jazz-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/tests/browser-integration/src/fixtures/jazz-icon.png
--------------------------------------------------------------------------------
/tests/browser-integration/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "module": "ES2020",
5 | "moduleResolution": "bundler",
6 | "strict": true,
7 | "skipLibCheck": true,
8 | "declaration": true,
9 | "sourceMap": true,
10 | "esModuleInterop": true,
11 | "allowSyntheticDefaultImports": true,
12 | "outDir": "dist"
13 | },
14 | "include": ["src/**/*"],
15 | "exclude": ["node_modules", "dist"]
16 | }
17 |
--------------------------------------------------------------------------------
/tests/cloudflare-workers/worker-configuration.d.ts:
--------------------------------------------------------------------------------
1 | // Generated by Wrangler
2 | // After adding bindings to `wrangler.jsonc`, regenerate this interface via `npm run cf-typegen`
3 | interface Env {}
4 |
--------------------------------------------------------------------------------
/tests/e2e-rn-expo/assets/adaptive-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/tests/e2e-rn-expo/assets/adaptive-icon.png
--------------------------------------------------------------------------------
/tests/e2e-rn-expo/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/tests/e2e-rn-expo/assets/favicon.png
--------------------------------------------------------------------------------
/tests/e2e-rn-expo/assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/tests/e2e-rn-expo/assets/icon.png
--------------------------------------------------------------------------------
/tests/e2e-rn-expo/assets/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/garden-co/jazz/b861daca60faf972f53babc00b87fa32051cea44/tests/e2e-rn-expo/assets/splash.png
--------------------------------------------------------------------------------
/tests/e2e-rn-expo/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = function (api) {
2 | api.cache(true);
3 | return {
4 | presets: ["babel-preset-expo"],
5 | };
6 | };
7 |
--------------------------------------------------------------------------------
/tests/e2e-rn-expo/index.js:
--------------------------------------------------------------------------------
1 | import "./polyfills";
2 | import { registerRootComponent } from "expo";
3 | import App from "./src/App";
4 | registerRootComponent(App);
5 |
--------------------------------------------------------------------------------
/tests/e2e-rn-expo/src/schema.ts:
--------------------------------------------------------------------------------
1 | import { CoMap, coField } from "jazz-tools";
2 |
3 | export class CoMapWithText extends CoMap {
4 | text = coField.string;
5 | }
6 |
--------------------------------------------------------------------------------
/tests/e2e-rn-expo/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "expo/tsconfig.base",
3 | "compilerOptions": {
4 | "strict": true,
5 | "moduleResolution": "bundler"
6 | },
7 | "exclude": ["src/tests"]
8 | }
9 |
--------------------------------------------------------------------------------
/tests/e2e/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
26 | sync-db/
27 | /test-results/
28 | /playwright-report/
29 | /blob-report/
30 | /playwright/.cache/
31 |
--------------------------------------------------------------------------------
/tests/e2e/src/pages/FileStream/index.tsx:
--------------------------------------------------------------------------------
1 | import { DownloaderPeer } from "./DownloaderPeer";
2 | import { UploaderPeer } from "./UploaderPeer";
3 | import { getValueId } from "./lib/searchParams";
4 |
5 | export function FileStreamTest() {
6 | const valueId = getValueId();
7 |
8 | if (valueId) {
9 | return ;
10 | }
11 |
12 | return ;
13 | }
14 |
--------------------------------------------------------------------------------
/tests/e2e/src/pages/FileStream/lib/getDownloaderPeerUrl.ts:
--------------------------------------------------------------------------------
1 | import { Loaded } from "jazz-tools";
2 | import { UploadedFile } from "../schema";
3 |
4 | export function getDownloaderPeerUrl(value: Loaded) {
5 | const url = new URL(window.location.href);
6 | url.searchParams.set("valueId", value.id);
7 | return url.toString();
8 | }
9 |
--------------------------------------------------------------------------------
/tests/e2e/src/pages/FileStream/schema.tsx:
--------------------------------------------------------------------------------
1 | import { co, z } from "jazz-tools";
2 |
3 | export const UploadedFile = co.map({
4 | file: co.fileStream(),
5 | syncCompleted: z.boolean(),
6 | coMapDownloaded: z.boolean(),
7 | });
8 |
--------------------------------------------------------------------------------
/tests/e2e/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/tests/e2e/tests/Inbox.spec.ts:
--------------------------------------------------------------------------------
1 | import { expect, test } from "@playwright/test";
2 |
3 | test.describe("Inbox - Sync", () => {
4 | test("should pass the message between the two peers", async ({ page }) => {
5 | await page.goto("/inbox");
6 |
7 | await page.getByRole("button", { name: "Start a ping-pong" }).click();
8 |
9 | await page.getByTestId("ping-pong").waitFor();
10 |
11 | await expect(page.getByTestId("ping-pong")).toBeVisible();
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/tests/e2e/vite.config.ts:
--------------------------------------------------------------------------------
1 | import react from "@vitejs/plugin-react-swc";
2 | import { defineConfig } from "vite";
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | build: {
8 | minify: false,
9 | },
10 | });
11 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2018",
4 | "module": "preserve",
5 | "moduleResolution": "bundler",
6 | "strict": true,
7 | "importHelpers": false,
8 | "noEmitHelpers": false,
9 | "skipLibCheck": true,
10 | "outDir": "./dist",
11 | "baseUrl": "./packages"
12 | },
13 | "exclude": ["node_modules", "target"]
14 | }
15 |
--------------------------------------------------------------------------------