Jitsi

jitsi.org
Jitsi

Encrypted, free and open source video calling app, which does not require creating an account/ providing any personal details. Available as a web app, and native app for Windows, MacOS, Linux, Android and iOS. You can use the public Jitsi instance, self-host your own, or use a community hosted instance.

Open Source

Jitsi Privacy Policy

Privacy Policy Summary

  • There is a date of the last update of the agreements
  • This service collects your IP address, which can be used to view your approximate location
  • The service provides a complaint mechanism for the handling of personal data
  • Your personal data is used for limited purposes
  • The service can delete your account without prior notice and without a reason
  • You maintain ownership of your data
  • Prohibits the posting of pornographic content
  • The service provider makes no warranty regarding uninterrupted, timely, secure or error-free service
  • This service throttles your use
  • This service does not condone any ideas contained in its user-generated contents
  • This service prohibits users sending chain letters, junk mail, spam or any unsolicited messages
  • They may stop providing the service at any time
  • You waive your right to a class action.
  • You have the right to leave this service at any time
  • Users agree not to use the service for illegal purposes
  • This service prohibits users from attempting to gain unauthorized access to other computer systems
  • If you offer suggestions to the service, they may use that without your approval or compensation, but they do not become the owner
  • Failure to enforce any provision of the Terms of Service does not constitute a waiver of such provision
  • Any liability on behalf of the service is only limited to USD $10
  • This service does not guarantee that it or the products obtained through it meet the users' expectations or requirements
  • Invalidity of any portion of the Terms of Service does not entail invalidity of its remainder
  • The service provides information about how they intend to use your personal data
  • The service provides details about what kinds of personal information they collect
  • The court of law governing the terms is in New York, USA.
  • The court of law governing the terms is in a jurisdiction that is less friendly to user privacy protection.
  • Your personal data is not sold
  • The service is provided 'as is' and to be used at the users' sole risk
  • This service is only available to users over a certain age
  • Business Users are solely responsible for claims made against the service and agree to indemnify and hold harmless the service.
  • The service may change its terms at any time, but the user will receive notification of the changes.
  • Third parties are involved in operating the service
  • The copyright license that users grant this service is limited to the parties that make up the service's broader platform.
  • The service allows you to use pseudonyms
  • This service assumes no liability for any losses or damages resulting from any matter relating to the service
  • User logs are deleted after a finite period of time

Score

B

Documents

Domains Covered by Policy

  • jitsi.org
  • meet.jit.si

About the Data

This data is kindly provided by tosdr.org. Read full report at: #2201

Jitsi Source Code

Author

jitsi

Description

Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application.

#debian#deep-video#jitsi#jitsi-meet#scalable-video-conferences#sfu#video#video-communication#video-conferencing#webrtc

Homepage

https://jitsi.org/meet

License

Apache-2.0

Created

16 Dec 13

Last Updated

12 Jul 26

Latest version

vtesting1.2.3

Primary Language

TypeScript

Size

370,717 KB

Stars

29,582

Forks

7,951

Watchers

29,582

Language Usage

Language Usage

Star History

Star History

Top Contributors

Recent Commits

  • Edgars Voroboks (10 Jul 26)

    fix(lang): Update Latvian language translation

  • Дамян Минков (10 Jul 26)

    fix(participants-pane): close context menus on outside click (#17604) * fix(participants-pane): close context menus on outside click Enable FocusOn-based outside-click handling for participant context menus in both the main room participants pane and breakout room participant list. - Add onClickOutside prop to ContextMenu, separate from onDrawerClose, so the FocusOn path and the Drawer onClose path use distinct callbacks and neither interferes with the other. - Fix the stale closure in removeFocus (wrong dep was [onMouseLeave]; now correctly [onClickOutside, onDrawerClose]). - Pass scrollLock={false} and noIsolation={true} to FocusOn so enabling the trap does not lock pane scroll or aria-hide the rest of the participants pane. - Enable activateFocusTrap and onClickOutside in ParticipantContextMenu, FakeParticipantContextMenu, and RoomParticipantContextMenu for the non-thumbnail (participants pane) case. - onClickOutside always uses force=true to bypass the isMouseOverMenu guard in lowerMenu, ensuring a click outside always dismisses the menu. The overflow-drawer path (mobile/narrow) is handled by Drawer's existing backdrop onClose and required no changes. * fix(participants-pane): extract onClickOutside into useCallback Avoids inline arrow function in JSX prop (react/jsx-no-bind).

  • damencho (10 Jul 26)

    fix(reactions,polls,subtitles): handle unexpected field types in endpoint messages - reactions: new Set(data.reactions) throws when reactions is not iterable (e.g. a number); guard with Array.isArray, fall back to empty array - polls: answers.slice() throws when answers is not an array; same guard - subtitles: destructuring json.participant throws when null; use nullish coalescing; json.transcript[0] throws when transcript is null/empty; bail early

  • Shivam Saini (10 Jul 26)

    fix(welcome): disable animated meeting name once user input is present * fix(welcome): disable animated meeting name once user input is present * fix(welcome): fix lint errors in AbstractWelcomePage --------- Co-authored-by: damencho <[email protected]>

  • Дамян Минков (10 Jul 26)

    refactor(flip): simplify occupant lookup to live scan (#17603) * refactor(flip): simplify occupant lookup to live scan * fix(flip): fix lint errors in mod_muc_flip_spec

  • Mihaela Dumitru (10 Jul 26)

    fix(recording): show transcription toggle when feature available (#17602) * fix(recording): show transcription toggle when feature available * fix(recording): allow transcription-only start when local recording available - Allow deselecting the local recording toggle so a participant can start transcription without a simultaneous local recording. - Move componentDidMount pre-selection logic inline to avoid the new toggle-off path that the same handler uses when the user deliberately deselects. * fix(recording): skip local recording pre-select when session already active When the dialog opens to manage an active transcription-only session, componentDidMount was incorrectly setting shouldRecordAudioAndVideo to true, making the audio/video toggle appear ON. Skip the pre-selection entirely when servicesRunning is true so the dialog reflects the actual running state. --------- Co-authored-by: damencho <[email protected]>

  • damencho (09 Jul 26)

    fix(breakout-rooms): prevent double-track-add crash when switching rooms with tab audio During a breakout room switch, replaceLocalTrack already calls conference.replaceTrack(null, track) which invokes _setupNewTrack and pushes the mic track into rtc.localTracks. The TRACK_ADDED middleware then detects a stale desktopAudioTrack in features/screen-share state and calls conference.replaceTrack(null, track) a second time, pushing the same track into rtc.localTracks again. When the JVB session offer subsequently arrives and setOfferAnswerCycle calls TPC.addTrack for each local track, the duplicate rtcId causes it to throw "is already in TPC", which surfaces as OFFER_ANSWER_FAILED and disconnects the client. Fix by mirroring the guard already present in _addLocalTracksToConference: skip the replaceTrack(null, track) call when the track is already in the conference's local track list. Fixes: #17599

  • damencho (08 Jul 26)

    fix: Make sure we deliver videoConferenceLeft. Browsers (especially Chrome) don't reliably deliver postMessage sent from beforeunload because the page is already unloading. The videoConferenceLeft event races against the browser tearing down the iframe. Fire notifyConferenceLeft inside reloadNow() — before navigation starts — while the postis channel is fully alive, then call APP.API.dispose() so the beforeunload handler doesn't double-fire it.

  • Aaron van Meerten (09 Jul 26)

    feat(prosody): test for escaped CRLF in rayo headers (#17583) * feat(prosody): test for escaped CRLF in rayo headers * test(prosody): add JS integration tests for rayo dial header CRLF handling Replace the standalone Lua unit test with an integration test that runs against a real Prosody instance in Docker. The new spec in mod_rayo_dial_header_crlf_spec.js uses the JS XMPP client to send actual rayo dial IQs and asserts on what mod_filter_iq_rayo forwards to the MUC component. - Add sendRayoIqAndWait() to xmpp_client.js for IQs that need a response - Extend mod_test_observer to capture raw_xml (tostring of the stanza) so tests can inspect the serialized bytes, not only parsed attribute values - Add sanitize_header_value() to mod_filter_iq_rayo and apply it to all non-XML-sourced header values before inserting them into stanza attributes - Cover two paths where values arriving via XML attributes (normalised to spaces by expat) and values arriving from the JWT token context (must be sanitised at the application layer) --------- Co-authored-by: damencho <[email protected]>

  • damencho (09 Jul 26)

    feat(conference): log page visibility, BFCache freeze/restore events Registers visibilitychange, pagehide, and pageshow listeners on CONFERENCE_JOIN_IN_PROGRESS and removes them on CONFERENCE_LEFT, KICKED_OUT, and CONFERENCE_FAILED. Logs are emitted for all browsers, not only those supporting the Wake Lock API. The pagehide/pageshow persisted flag distinguishes BFCache freeze/restore from normal navigation.

  • Jaya Allamsetty (08 Jul 26)

    docs(audio-translation): document duckedVolume in config.js

  • Jaya Allamsetty (08 Jul 26)

    fix(audio-translation): fall back to default ducked volume for invalid config

  • Jaya Allamsetty (01 Jul 26)

    feat(config): whitelist audioTranslation for config overrides Allow config.audioTranslation (e.g. audioTranslation.enabled) to be set via configOverwrite / URL hash so the feature can be toggled per-room for testing and controlled rollout.

  • Jaya Allamsetty (08 Jul 26)

    fix(audio-translation): make original-audio ducking work on iOS iOS/WebKit ignores programmatic HTMLMediaElement.volume (audio level is under the user's hardware control), so lowering it to duck a speaker's original while its translation plays had no effect. On iOS, mute the original instead (element.muted is honoured there); other platforms keep the fractional-volume duck. Also make the ducked volume configurable via config.audioTranslation.duckedVolume, defaulting to 0.15.

  • Abhay Madan (09 Jul 26)

    fix(multi-screen): gate the whiteboard second screen on isWhiteboardOpen (#17598) - closing the whiteboard only flips isOpen; the collaboration details persist until RESET_WHITEBOARD (conference leave), so gating on them alone kept a closed whiteboard rendered on the second screen - isWhiteboardEnabled does not cover this either: when config.whiteboard.enabled is explicitly true it never consults the collaboration details - fall back to the existing inactive hint instead

  • Abhay Madan (09 Jul 26)

    feat(multi-screen): whiteboard as a second-screen source (#17581) * feat(multi-screen): stage and tile layouts for the second screen - Add a role: 'tile' source variant (additive extension to ISecondScreenSource) for a responsive grid of every participant - SecondScreenStage features one participant (or shared screen) with a filmstrip; clicking a tile re-pins through setSecondScreen, keeping the external API the single control plane - SecondScreenGallery lays out everyone in a grid measured via the popup's own ResizeObserver (reflows on page-zoom) - Extract a shared SecondScreenTile (gallery cell + filmstrip) and a hooks.web.ts participant-list/dominant-speaker hook; getGalleryGridDimensions is a pure helper - Style the layouts with tss-react makeStyles so they inject through each window's per-window Emotion cache (dev and prod), and render all video via the realm-safe SecondScreenVideo clone leaf * feat(multi-screen): whiteboard as a second-screen source - Add a role: 'whiteboard' source that renders the shared whiteboard on a second screen - SecondScreenWhiteboard renders an iframe to the standalone whiteboard page (static/whiteboard.html), pointed at the meeting's collaboration room, so it runs the whiteboard in its own browsing context and stays live-synced - Falls back to a hint when the whiteboard is not open in the meeting - Demonstrates non-video content the portal makes possible and a <video> second screen cannot host * fix(multi-screen): close second screens when the main window unloads - add a one-time pagehide listener that runs closeAllSecondScreens - prevents second-screen popups from being orphaned when the main window is closed, reloaded, or navigated away; CONFERENCE_LEFT/FAILED only fire when leaving the meeting from within the app, not on a direct window close * fix(multi-screen): address whiteboard second-screen review - gate SecondScreenWhiteboard on isWhiteboardEnabled, not just collab details - build the whiteboard URL from base/connection locationURL via getURLWithoutParams instead of window.location.href, so a #config.x= fragment no longer breaks the whiteboard.html path derivation - skip bfcache (event.persisted) in the pagehide teardown so a Back-restored page keeps its second screens - sandbox the whiteboard iframe (no top-nav/forms) mirroring the native WebView

  • Jaya Allamsetty (08 Jul 26)

    chore(deps) lib-jitsi-meet@latest https://github.com/jitsi/lib-jitsi-meet/compare/v2168.0.0+99b97735...v2172.0.0+cf3a8710

  • Hugo Lavernhe (08 Jul 26)

    Expose connection stats via external API

  • Calin-Teodor (07 Jul 26)

    fix(android): ignore benign missing-viewState mount race (RN #57181)

  • Calin-Teodor (07 Jul 26)

    fix(reactions): remove emoji after animation finishes to avoid native node race

  • Jaya Allamsetty (07 Jul 26)

    fix(config) Adds the audioTranslation option.

  • dependabot[bot] (24 Jun 26)

    chore(deps-dev): bump @babel/core from 7.25.9 to 7.29.6 Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.25.9 to 7.29.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.29.6/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-version: 7.29.6 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <[email protected]>

  • bgrozev (07 Jul 26)

    feat(audio-translation): live audio translation prosody support (#17537) * feat(prosody): add audio_translation component for live translation New mod_audio_translation_component collects per-receiver translation subscriptions sent as <senderId, language> deltas, validates and limits them, and exposes the aggregated <senderId, set<language>> map to jicofo only via RoomMetadata (room._data.audioTranslationRequests, injected on the admin path of mod_room_metadata_component). Adds the live-translation and live-translation-subscribe permission flags and integration tests for the new component. * feat(audio-translation): advertise disco identity and finalize naming Register the component on the main virtual host via jitsi-add-identity so clients can discover it (handled by mod_features_identity). Use the hyphenated <audio-translation> stanza element and matching 'audio-translation' disco identity type, and the 'audiotranslation' component host. Tests: load features_identity on the main host and add a disco identity test. * fix(audio-translation): default max_subscriptions to unlimited The per-receiver subscription cap is now off unless audio_translation_max_subscriptions is explicitly set. * fix(audio-translation): clear the request map when the room flag is disabled Disabling audioTranslation now clears the aggregate map published to jicofo so translation stops, and re-enabling republishes the retained subscriptions. The published map honours the enable flag, and a jitsi-metadata-updated hook republishes when the flag is toggled. * feat(audio-translation): neutral default-open hooks for external gating (#17570) Add two generic, default-open prosody extension points so an external module can gate live translation and inject jicofo-only connect metadata without any gating, token, or entitlement logic entering this code (open by default): - mod_audio_translation_component: fire 'jitsi-audio-translation-allow-publish' in publish(); a handler returning false suppresses the request map (no handler / non-false = allowed), following the jitsi-metadata-allow-moderation convention. - mod_room_metadata_component: fire 'jitsi-room-metadata-admin-extra' inside the admin branch of send_metadata so a module can inject jicofo-only metadata fields (delivered only to jicofo, never broadcast to clients). Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> * chore: re-trigger mergeability recompute No-op empty commit to nudge GitHub into recomputing PR #17537 mergeability, which was stuck at CONFLICTING even though master is fully merged into translation (git merge-tree confirms a clean, conflict-free merge). Safe to drop. * feat(audio-translation): log when subscriptions/requests are suppressed (#17575) The two "feature not active" paths were silent no-ops, so a subscription that never takes effect left no trace. Add a warn on each (matching the warn-on-reject pattern in mod_room_metadata_component); these shouldn't happen in normal operation since the client hides the control, so they're worth surfacing: - on_message: a subscription arriving while translation is disabled for the room. - publish(): transitioning to suppressing a non-empty request set — either disabled for the room, or an external handler vetoed publishing. Deduped via last_published, so it logs on the transition, not on every update. The request set is now computed unconditionally to tell "nothing requested" apart from "requests suppressed"; the published value is unchanged. Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> * fix(audio-translation): add missing JSDoc and wrap long line in spec --------- Co-authored-by: Jonathan Lennox <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>

  • damencho (07 Jul 26)

    test(helpers): gate prejoin button click on APP.store for all participants The APP.store guard that prevents clicking the prejoin Join button before conference.init has mounted its React handlers was only applied for iFrame API participants. On slow remote grids where driver.url() returns before the page fully loads, regular participants hit the same race: the prejoin screen DOM element exists but the click handler is not yet attached, so the click is silently lost and waitForMucJoinedOrError times out 30s later. Apply the APP.store waitUntil unconditionally for all participants.

  • DEEPAK KUMAR (03 Jul 26)

    fix(participants-pane): manage focus when participants pane opens and closes

  • Jonathan Lennox (06 Jul 26)

    feat(audio-translation): hide the feature when unavailable for the room (#17574) Let a deployment hide audio translation for a room via a new server-controlled audioTranslationAvailable RoomMetadata flag (e.g. when the translation backend is not provisioned for it), so the client doesn't offer a control that would silently do nothing. - isAudioTranslationAvailable(): treat metadata.audioTranslationAvailable === false as unavailable (absent / any-other-value = available, open by default), applied even for those who could otherwise manage it. - IConferenceMetadata: type the new optional flag. - mod_room_metadata_component: block clients from setting audioTranslationAvailable (server-controlled key). Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>

  • Дамян Минков (06 Jul 26)

    feat(prosody): reject MUC nick changes in resource validate (#17586) An occupant's MUC resource is its stable per-session identity and must not change after join. Hook muc-occupant-pre-change and reject any presence that targets a different resource than the occupant's current one. Display-name changes travel in the presence <nick/> child and keep the same resource, so they are unaffected. Adds tests covering rejection of a resource change and acceptance of a same-resource presence update.

  • Calin-Teodor (06 Jul 26)

    fix(chat): render native GIFs via GiphyMediaView Fixes iOS animated-GIF decode crashes in chat (Crashlytics) by rendering through the Giphy native SDK instead of RN <Image>, bypassing RCTAnimatedImage/ImageIO

  • Stephan Paternotte (06 Jul 26)

    lang: Update Dutch translations Dutch language file brought up to date re. audio transcription

  • damencho (03 Jul 26)

    test(recording): retry startRecording when jicofo is not ready yet A startRecording iframe-API command sent right after videoConferenceJoined can reach jicofo while the conference is still being set up; jicofo then rejects the jibri start IQ with policy-violation (type=wait) and the recording silently never starts (the client surfaces it only as an unhandled promise rejection). Waiting for the JVB session before sending the command is not an option: jicofo does not allocate a session for a lone participant at all — it only does so when a second endpoint (e.g. jibri) is on its way — so such a gate deadlocks. The error type means 'retry later', so model exactly that: send the command, wait up to 5s for a live FILE session to appear in the recording state, and re-send if it does not (3 attempts).

Jitsi Security

5.6/10

Repo Security Summary

Updated 29 Jun 26

  • Maintained 10/10
  • Dangerous-Workflow 10/10
  • Security-Policy 10/10
  • Code-Review 10/10
  • CII-Best-Practices 0/10
  • Token-Permissions 0/10
  • Binary-Artifacts 6/10
  • License 10/10
  • Branch-Protection N/A
  • Packaging 10/10
  • Signed-Releases 0/10
  • Pinned-Dependencies 3/10
  • Fuzzing 0/10
  • SAST 0/10

Security Advisories (5)

Jitsi Website

Website

Free Video Conferencing Software for Web & Mobile | Jitsi

Learn more about Jitsi, a free open-source video conferencing software for web & mobile. Make a call, launch on your own servers, integrate into your app, and more.

Redirects

Does not redirect

Security Checks

All 65 security checks passed

Server Details

  • IP Address 172.64.154.22
  • Location San Francisco, California, United States of America, NA
  • ISP CloudFlare Inc.
  • ASN AS13335

Associated Countries

  • US US
  • CA CA
  • FR FR

Safety Score

Website marked as safe

100%

Blacklist Check

jitsi.org was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

Jitsi Reviews

More Secure Conference Calls

  • Jami

    Jami

    jami.net

    A free and open source, distributed video, calling and screenshare platform with a focus on security. Jami is completely peer-to-peer, and has full end-to-end encryption with perfect forward secrecy for all communications, complying with the X.509 standard. Supported natively on Windows, macOS, iOS, GNU/Linux, Android and Android TV. Video quality is quite good, but very dependent on network speeds, some of the apps are lacking in features.

About the Data: Jitsi

API

You can access Jitsi's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/jitsi

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share Jitsi

Help your friends compare Secure Conference Calls, and pick privacy-respecting software and services.
Share Jitsi and Awesome Privacy with your network!

View Secure Conference Calls (2)