diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 195c1a53c..ad6b4fd45 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -@arun2k17 @corinagum @halbondmsft @pradeepananth @ryanbliss @siduppal @Stevenic +@pradeepananth @ryanbliss @siduppal @huntj88 diff --git a/.github/ISSUE_TEMPLATE/feature-request-template.md b/.github/ISSUE_TEMPLATE/feature-request-template.md index 476d75170..9410e81f6 100644 --- a/.github/ISSUE_TEMPLATE/feature-request-template.md +++ b/.github/ISSUE_TEMPLATE/feature-request-template.md @@ -8,7 +8,7 @@ assignees: "" ### Please review [FAQ and Known issues](https://github.com/microsoft/live-share-sdk/issues/8) before filing a new item! -- [ ] I have reviewed the FAQ and known issues and did not find my topic +- [ ] I have reviewed the FAQ and known issues and did not find my topic **Please note: any submissions with insufficient reproducible information will be marked as 'Waiting for customer input' and may be closed is there is no response** diff --git a/.github/ISSUE_TEMPLATE/general-bug-report-template.md b/.github/ISSUE_TEMPLATE/general-bug-report-template.md index 3cb38b3c5..ec2131aaa 100644 --- a/.github/ISSUE_TEMPLATE/general-bug-report-template.md +++ b/.github/ISSUE_TEMPLATE/general-bug-report-template.md @@ -18,7 +18,7 @@ assignees: '' ### Please review [FAQ and Known issues](https://github.com/microsoft/live-share-sdk/issues/8) before filing a new item! -- [ ] I have reviewed the FAQ and known issues and did not find my topic +- [ ] I have reviewed the FAQ and known issues and did not find my topic **Please note: any submissions with insufficient reproducible information will be marked as 'Waiting for customer input' and may be closed is there is no response** @@ -45,16 +45,16 @@ assignees: '' **Desktop(s) (please complete the following information):** -- OS: [e.g. macOS] -- Browser [e.g. chrome, safari] -- Version [e.g. 22] +- OS: [e.g. macOS] +- Browser [e.g. chrome, safari] +- Version [e.g. 22] **Smartphone (please complete the following information):** -- Device: [e.g. iPhone6] -- OS: [e.g. iOS8.1] -- Browser [e.g. stock browser, safari] -- Version [e.g. 22] +- Device: [e.g. iPhone6] +- OS: [e.g. iOS8.1] +- Browser [e.g. stock browser, safari] +- Version [e.g. 22] **Additional context** diff --git a/.github/ISSUE_TEMPLATE/javascript-bug-report-template.md b/.github/ISSUE_TEMPLATE/javascript-bug-report-template.md index 137dc6b82..4e0489528 100644 --- a/.github/ISSUE_TEMPLATE/javascript-bug-report-template.md +++ b/.github/ISSUE_TEMPLATE/javascript-bug-report-template.md @@ -8,7 +8,7 @@ assignees: "" ### Please review [FAQ and Known issues](https://github.com/microsoft/live-share-sdk/issues/8) before filing a new item! -- [ ] I have reviewed the FAQ and known issues and did not find my topic +- [ ] I have reviewed the FAQ and known issues and did not find my topic **Please note: any submissions with insufficient reproducible information will be marked as 'Waiting for customer input' and may be closed is there is no response** @@ -35,16 +35,16 @@ assignees: "" **Desktop(s) (please complete the following information):** -- OS: [e.g. macOS] -- Browser [e.g. chrome, safari] -- Version [e.g. 22] +- OS: [e.g. macOS] +- Browser [e.g. chrome, safari] +- Version [e.g. 22] **Smartphone (please complete the following information):** -- Device: [e.g. iPhone6] -- OS: [e.g. iOS8.1] -- Browser [e.g. stock browser, safari] -- Version [e.g. 22] +- Device: [e.g. iPhone6] +- OS: [e.g. iOS8.1] +- Browser [e.g. stock browser, safari] +- Version [e.g. 22] **Additional context** diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md index 1fbf1646a..1995e6db1 100644 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -1,36 +1,39 @@ ## Linked issues + > What issue(s) does this Pull Request address? Issues: # (issue number) ## Details + #### PR type: -- [ ] Bug fix -- [ ] New feature / enhancement -- [ ] Documentation -- [ ] Samples or Test coverage +- [ ] Bug fix +- [ ] New feature / enhancement +- [ ] Documentation +- [ ] Samples or Test coverage #### Change details + > Describe your changes, with screenshots and code snippets as appropriate **code snippets**: **screenshots**: +## Checklist -## Checklist -- [ ] I have checked for/fixed spelling, linting, and other errors -- [ ] I have commented my code for clarity -- [ ] I have made corresponding changes to the documentation (we use [TypeDoc](https://typedoc.org/) to document our code) -- [ ] My changes generate no new warnings -- [ ] I have added tests that validates my changes, and provides sufficient test coverage. I have tested with: - - [ ] Local testing - - [ ] E2E testing in Teams -- [ ] New and existing unit tests pass locally with my changes + +- [ ] I have checked for/fixed spelling, linting, and other errors +- [ ] I have commented my code for clarity +- [ ] I have made corresponding changes to the documentation (we use [TypeDoc](https://typedoc.org/) to document our code) +- [ ] My changes generate no new warnings +- [ ] I have added tests that validates my changes, and provides sufficient test coverage. I have tested with: + - [ ] Local testing + - [ ] E2E testing in Teams +- [ ] New and existing unit tests pass locally with my changes ### Additional information > Feel free to add other relevant information below - diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 96bb45198..bea2e8b3e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,21 +1,21 @@ version: 2 updates: - - package-ecosystem: "npm" - # Only specify the root so dependabot will update all manifests once per package - # See https://github.com/dependabot/dependabot-core/issues/5226#issuecomment-1179434437 - directory: "/" - schedule: - interval: "weekly" - day: "monday" - # Ignore the following packages because - # 1. Semver for these packages is not always followed - # 1. These packages MUST be updated all at the same time (same PR) - ignore: - - "fluid-framework", - - "@fluidframework/test-client-utils" - - "@fluidframework/test-utils" - - "@fluidframework/test-runtime-utils" - - "@fluidframework/azure-client", - - "@microsoft/teams-js" - # Updates both the package-lock and package.json, not just package-lock - versioning-strategy: increase + - package-ecosystem: "npm" + # Only specify the root so dependabot will update all manifests once per package + # See https://github.com/dependabot/dependabot-core/issues/5226#issuecomment-1179434437 + directory: "/" + schedule: + interval: "weekly" + day: "monday" + # Ignore the following packages because + # 1. Semver for these packages is not always followed + # 1. These packages MUST be updated all at the same time (same PR) + ignore: + - dependency-name: "fluid-framework" + - dependency-name: "@fluidframework/test-client-utils" + - dependency-name: "@fluidframework/test-utils" + - dependency-name: "@fluidframework/test-runtime-utils" + - dependency-name: "@fluidframework/azure-client" + - dependency-name: "@microsoft/teams-js" + # Updates both the package-lock and package.json, not just package-lock + versioning-strategy: increase diff --git a/.github/workflows/checkFormatting.sh b/.github/workflows/checkFormatting.sh new file mode 100644 index 000000000..d2cdbc949 --- /dev/null +++ b/.github/workflows/checkFormatting.sh @@ -0,0 +1,15 @@ +#!/bin/bash +cd ../.. +npm run doctor +diff=`git diff` +if [ -z "$diff" ] +then + echo "everything formatted" + exit 0 +else + echo "" # empty line + echo "" # empty line + echo "FORMATTING NEEDED" + echo "Please run 'npm run doctor'" + exit 1 +fi diff --git a/.github/workflows/codeql.yaml b/.github/workflows/codeql.yaml index fdaf3c869..4362913dc 100644 --- a/.github/workflows/codeql.yaml +++ b/.github/workflows/codeql.yaml @@ -9,67 +9,68 @@ # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # -name: 'CodeQL' +name: "CodeQL" on: - push: - branches: ['main', main*] - pull_request: - # The branches below must be a subset of the branches above - branches: ['main'] - schedule: - - cron: '0 2 * * 6' + push: + branches: [main, mainv2] + pull_request: + # The branches below must be a subset of the branches above + branches: [main, mainv2] + schedule: + - cron: "0 2 * * 6" + workflow_dispatch: jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write - strategy: - fail-fast: false - matrix: - language: ['javascript'] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Use only 'java' to analyze code written in Java, Kotlin or both - # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + strategy: + fail-fast: false + matrix: + language: ["javascript"] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Use only 'java' to analyze code written in Java, Kotlin or both + # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - steps: - - name: Checkout repository - uses: actions/checkout@v3 + steps: + - name: Checkout repository + uses: actions/checkout@v3 - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. - # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality - # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v2 + # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 - # ℹ️ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 - with: - category: '/language:${{matrix.language}}' + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/live-share-build-samples.yaml b/.github/workflows/live-share-build-samples.yaml index ea137d529..d22cb14af 100644 --- a/.github/workflows/live-share-build-samples.yaml +++ b/.github/workflows/live-share-build-samples.yaml @@ -1,36 +1,36 @@ name: Build Live Share SDK samples on: - push: - branches: [ main ] - pull_request: - branches: [ main ] + push: + branches: [main, mainv2] + pull_request: + branches: [main, mainv2] + workflow_dispatch: jobs: - build: + build: + runs-on: ubuntu-latest - runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18.x] - strategy: - matrix: - node-version: [18.x] + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - run: npm install + - run: npm install jest + working-directory: samples/javascript/02.react-video - steps: - - uses: actions/checkout@v3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - run: npm install - - run: npm install jest - working-directory: samples/javascript/02.react-video + - name: "build packages and samples" + run: npm run build - - name: "build packages and samples" - run: npm run build + # TODO: get scenario_test.sh working - # TODO: get scenario_test.sh working - - # - name: "test 02.react-video sample" - # shell: "bash" - # run: sh ../../../.github/workflows/scenario_test.sh - # working-directory: samples/javascript/02.react-video + # - name: "test 02.react-video sample" + # shell: "bash" + # run: sh ../../../.github/workflows/scenario_test.sh + # working-directory: samples/javascript/02.react-video diff --git a/.github/workflows/live-share-formatting.yaml b/.github/workflows/live-share-formatting.yaml new file mode 100644 index 000000000..3d46dee44 --- /dev/null +++ b/.github/workflows/live-share-formatting.yaml @@ -0,0 +1,28 @@ +name: Check formatting + +on: + push: + branches: [main, mainv2] + pull_request: + branches: [main, mainv2] + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18.x] + + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - run: npm install + + - name: "check formatting" + run: "bash checkFormatting.sh" + working-directory: .github/workflows diff --git a/.github/workflows/live-share-test-packages.yaml b/.github/workflows/live-share-test-packages.yaml index a95b7a569..b3feaeab0 100644 --- a/.github/workflows/live-share-test-packages.yaml +++ b/.github/workflows/live-share-test-packages.yaml @@ -1,41 +1,36 @@ name: Test Live Share SDK packages on: - push: - branches: [ main ] - pull_request: - branches: [ main ] + push: + branches: [main, mainv2] + pull_request: + branches: [main, mainv2] + workflow_dispatch: jobs: - build: - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [18.x] - - steps: - - uses: actions/checkout@v3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - run: npm install - - run: npm run build:packages - - - name: "test live-share" - run: npm run test - working-directory: packages/live-share - - - name: "test live-share-canvas" - run: npm run test - working-directory: packages/live-share-canvas - - - name: "test live-share-media" - run: npm run test - working-directory: packages/live-share-media - - - name: "test live-share-turbo" - run: npm run test - working-directory: packages/live-share-turbo + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18.x] + + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - run: npm install # install will trigger a build of all packages + + - name: "test live-share" + run: npm run test + working-directory: packages/live-share + + - name: "test live-share-canvas" + run: npm run test + working-directory: packages/live-share-canvas + + - name: "test live-share-media" + run: npm run test + working-directory: packages/live-share-media diff --git a/.github/workflows/live-share-test-usage.yaml b/.github/workflows/live-share-test-usage.yaml new file mode 100644 index 000000000..827cfdf46 --- /dev/null +++ b/.github/workflows/live-share-test-usage.yaml @@ -0,0 +1,41 @@ +name: Test Usage of Live Share SDK packages in different JS environments + +on: + push: + branches: [main, mainv2] + pull_request: + branches: [main, mainv2] + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18.x] + + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - run: npm install # install will trigger a build of all packages + + - name: "test live-share with cjs app" + run: npm run test + working-directory: internal/usage-test/cjs-test + + - name: "test live-share with esm app" + run: npm run test + working-directory: internal/usage-test/esm-test + + - uses: pnpm/action-setup@v4 + name: Install pnpm for next step + with: + version: 9 + run_install: false + - name: "test live-share with pnpm typescript esm app" + run: pnpm run test + working-directory: internal/usage-test/pnpm-test diff --git a/.gitignore b/.gitignore index 505b7ac60..5eaeeb43b 100644 --- a/.gitignore +++ b/.gitignore @@ -365,5 +365,7 @@ docs/assets/main.js # Testing files coverage/ +nyc/ .nyc_output/ -build-data.json \ No newline at end of file +build-data.json +tsconfig.tsbuildinfo diff --git a/.npmignore b/.npmignore index f2941a1b0..5e32b6ccc 100644 --- a/.npmignore +++ b/.npmignore @@ -2,4 +2,9 @@ node_modules .vscode package-lock.json tinylicious.log -src/test/ \ No newline at end of file +src/test/ +bin/test/ +nyc/ +.mocharc.cjs +.nycrc.json +tsconfig.test.json diff --git a/.sdl/CredScanSuppressions.json b/.sdl/CredScanSuppressions.json index f045498d8..0e52eb402 100644 --- a/.sdl/CredScanSuppressions.json +++ b/.sdl/CredScanSuppressions.json @@ -1,5 +1,4 @@ { - "tool": "Credential Scanner", - "suppressions": [ - ] -} \ No newline at end of file + "tool": "Credential Scanner", + "suppressions": [] +} diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index f9ba8cf65..89e22977a 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -4,6 +4,6 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://ope Resources: -- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) -- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) -- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns +- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 35682e1ce..c9a076270 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,22 +2,22 @@ ## Contributing bug fixes and features -Microsoft Teams is currently accepting contributions in the form of bug fixes and new +Microsoft Teams is currently accepting contributions in the form of bug fixes and new features. Any submission must have an issue tracking it in the issue tracker that has - been approved by the Teams Collaboration team. Your pull request should include a link to - the bug that you are fixing. If you've submitted a PR for a bug, please post a - comment in the bug to avoid duplication of effort. +been approved by the Teams Collaboration team. Your pull request should include a link to +the bug that you are fixing. If you've submitted a PR for a bug, please post a +comment in the bug to avoid duplication of effort. ## Legal -If your contribution is more than 15 lines of code, you will need to complete a Contributor +If your contribution is more than 15 lines of code, you will need to complete a Contributor License Agreement (CLA). Briefly, this agreement testifies that you are granting us permission - to use the submitted change according to the terms of the project's license, and that the work - being submitted is under appropriate copyright. +to use the submitted change according to the terms of the project's license, and that the work +being submitted is under appropriate copyright. -Please submit a Contributor License Agreement (CLA) before submitting a pull request. -You may visit https://cla.azure.com to sign digitally. Alternatively, download the +Please submit a Contributor License Agreement (CLA) before submitting a pull request. +You may visit https://cla.azure.com to sign digitally. Alternatively, download the agreement ([Microsoft Contribution License Agreement.docx](https://www.codeplex.com/Download?ProjectName=typescript&DownloadId=822190) or - [Microsoft Contribution License Agreement.pdf](https://www.codeplex.com/Download?ProjectName=typescript&DownloadId=921298)), sign, scan, - and email it back to . Be sure to include your github user name along with the agreement. Once we have received the - signed CLA, we'll review the request. \ No newline at end of file +[Microsoft Contribution License Agreement.pdf](https://www.codeplex.com/Download?ProjectName=typescript&DownloadId=921298)), sign, scan, +and email it back to . Be sure to include your github user name along with the agreement. Once we have received the +signed CLA, we'll review the request. diff --git a/MAINTENENCE.md b/MAINTENENCE.md index 7441b0a73..b5f02c56b 100644 --- a/MAINTENENCE.md +++ b/MAINTENENCE.md @@ -1,14 +1,14 @@ -# Maintanence +# Maintanence > Quick notes & guidelines on how to keep the repo neat & tidy ## Package updates -Dependabot is set up to assist with [package-lock updates](.github/dependabot.yml). +Dependabot is set up to assist with [package-lock updates](.github/dependabot.yml). -- SDK packages will be update weekly on Mondays via a PR from dependabot. -- Samples packages will be updated monthly. -- Wherever possible, security updates should be done asap. +- SDK packages will be update weekly on Mondays via a PR from dependabot. +- Samples packages will be updated monthly. +- Wherever possible, security updates should be done asap. Human action: If you notice there are PR's from dependabot, please assist with the following: @@ -23,17 +23,19 @@ Please keep an eye on incoming bugs / requests. When a new issue comes in, we sh 1. Verify we have all information required to reproduce the problem / continue with feature planning (Are all of the questions from the templates answered?) 2. Delete the 'Please review' section of the issue, especially when the issue is filed by a Live Share team member: - ![image](https://user-images.githubusercontent.com/14900841/197058064-bbc56748-09b2-47a1-8c31-6b44a2aa1bc4.png) + ![image](https://user-images.githubusercontent.com/14900841/197058064-bbc56748-09b2-47a1-8c31-6b44a2aa1bc4.png) 3. If needed, bring the newly filed topic up in scrum for discussion: - - Timeline - - Assignee - - Migrate to internal kanban as needed + +- Timeline +- Assignee +- Migrate to internal kanban as needed + 4. Remove the `new submission` tag. This is for a visible indication that the topic is acknowledged by the team. -> Note: if the issue is filed by a Live Share team-member, you can delete `new submission` immediately after submitting. + > Note: if the issue is filed by a Live Share team-member, you can delete `new submission` immediately after submitting. ## Announcements -After a new release, we should verify that a post is made to the Discussions center about the release. +After a new release, we should verify that a post is made to the Discussions center about the release. ## Other considerations diff --git a/README.md b/README.md index 89bd01b83..99d102405 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,12 @@ # Live Share SDK -The Live Share SDK builds on the [Fluid Framework](https://fluidframework.com/) to enable the creation of collaborative experiences for Microsoft Teams and Microsoft 365. This package focuses on building collaborative meeting applications for Microsoft Teams using Fluid. The SDK provides a `LiveShareClient` class for connecting to a special Fluid Container associated with each meeting. A collection of Live Share specific Distributed Data Structure (DDS) classes are also provided to simplify building applications for common meeting scenarios like shared media playback. +![Image showing the Live Share SDK used in a Teams meeting to connect two users together via a virtual white board.](assets/readme-banner.png) -To get started, we recommend first familiarizing yourself with the [Fluid Framework](https://fluidframework.com/docs/) and [Live Share overview](https://aka.ms/teamsliveshare). You can then follow our [Quick Start Guide](https://learn.microsoft.com/microsoftteams/platform/apps-in-teams-meetings/teams-live-share-quick-start) to build your first Teams Meeting App that uses Live Share. +The Live Share SDK enables building collaborative applications for Microsoft Teams. The SDK provides a `LiveShareClient` class for connecting to a collaborative session associated with each meeting. It provides a mixture of turn-key collaborative scenarios like media synchronization and inking + cursors, as well as flexible primitive API's to enable synchronizing any state in your application. + +The Live Share SDK builds on [Fluid Framework](https://fluidframework.com/) to enable the creation of collaborative experiences for Microsoft Teams and Microsoft 365. A collection of Live Share specific Distributed Data Structure (DDS) classes are also provided to simplify building applications for common meeting scenarios like shared media playback. + +To get started, you may want to first read our [Live Share docs](https://aka.ms/teamsliveshare) and [Fluid Framework docs](https://fluidframework.com/docs/). You can then follow our [Quick Start Guide](https://learn.microsoft.com/microsoftteams/platform/apps-in-teams-meetings/teams-live-share-quick-start) to build your first Teams Meeting App that uses Live Share. You can find our detailed API reference documentation at [Live Share reference docs](https://docs.microsoft.com/javascript/api/@microsoft/live-share/) and [Live Share Media reference docs](https://docs.microsoft.com/javascript/api/@microsoft/live-share-media/). @@ -10,30 +14,30 @@ You can find our detailed API reference documentation at [Live Share reference d [Live Share](/packages/live-share/README.md) has several features that make building collaborative apps easier than ever, including: -- `LiveShareClient`: Connect to a Fluid container associated with a Microsoft Teams meeting. -- `LivePresence`: Track who is using your app during a meeting and associate custom metadata for each user (e.g., camera position). -- `LiveState`: Synchronize a JSON-serializable value for maintaining consistent application state across clients. -- `LiveTimer`: Build a collaborative countdown timer. -- `LiveEvent`: Send one-time, stateless JSON-serializable values to each user in the session. -- `LiveFollowMode` (beta): Easily integrate features to present to all, follow specific users, and suspend/resume following. +- `LiveShareClient`: Connect to a Fluid container associated with a Microsoft Teams meeting. +- `LivePresence`: Track who is using your app during a meeting and associate custom metadata for each user (e.g., camera position). +- `LiveState`: Synchronize a JSON-serializable value for maintaining consistent application state across clients. +- `LiveFollowMode` (beta): Easily integrate features to present to all, follow specific users, and suspend/resume following. +- `LiveTimer`: Build a collaborative countdown timer. +- `LiveEvent`: Send one-time, stateless JSON-serializable values to each user in the session. [Live Share Canvas](/packages/live-share-canvas/README.md) is an optional extension that allows any app to add a collaborative whiteboard as an app overlay. Key classes include: -- `InkingManager`: Utilizes the HTML `` element for turn-key pen, highlighter, laser pointer, and eraser tools. -- `LiveCanvas`: Synchronizes the `InkingManager` strokes and adds remote cursors for users in the session. +- `InkingManager`: Utilizes the HTML `` element for turn-key pen, highlighter, laser pointer, and eraser tools. +- `LiveCanvas`: Synchronizes the `InkingManager` strokes and adds remote cursors for users in the session. [Live Share Media](/packages/live-share-media/README.md) is an optional extension that makes it easy to add co-watch support to any video or audio player. Key classes include: -- `LiveMediaSession`: Synchronizes player state for everyone in the session. -- `MediaPlayerSynchronizer`: Delegate interface used with `LiveMediaSession` to execute playback commands against a media player; matches the HTML5 `IMediaPlayer` interface for `