├── .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 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /examples/chat-vue/src/components/BubbleBody.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /examples/chat-vue/src/components/ChatBody.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /examples/chat-vue/src/components/EmptyChatMessage.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /examples/chat-vue/src/components/TopBar.vue: -------------------------------------------------------------------------------- 1 | 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
      {children}
    ; 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 | 13 | 14 | 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 | --------------------------------------------------------------------------------