Meetnix
Meetnix 1.0 — the record layer is shipped

Meetings that leave a record.
Not a guess.

Meetnix is open-source video conferencing you run yourself. Every participant is captured to their own track and tied to the account they signed in with — so who said what is a fact that came from your identity provider, never a confidence score from a diarisation model. The audio and video never leave your network.

docker run -p 8443:8443 ghcr.io/meetnix/meetnix or one NixOS module

AGPL-3.0 · unlimited users in the free build · no vendor in the room

call.acme.com/r/product-sync
Product sync 4 joined · 00:12:41 RECORDING
Alex Rivera
Sam Okonkwo
Priya Raman
Jonas Lindqvist
NixOS module Docker Compose Helm chart OIDC & SAML S3-compatible storage Air-gapped

01 — The difference

Everyone else records a mixdown, then tries to take it apart.

It is the same pipeline in every product: composite the call into one file, then run a model over it to work out how many people there were and which of them was talking. It works most of the time. Most of the time is a strange standard for the record of what was decided.

The usual pipeline

Mix it down, then guess it back

one mixdown
Speaker 1?
Speaker 2?
  1. Mix every participant into one audio track
  2. Run diarisation to find the speaker turns
  3. Cluster the turns into voices
  4. Guess which voice is which person

Speaker 1, Speaker 2, and a confidence score you never see. Similar voices, a cross-talking pair or somebody joining late is where it fails — and it fails quietly, which is the part that matters.

Meetnix

Never mix it down in the first place

Alex Rivera
Sam Okonkwo
Priya Raman
  1. Subscribe to every participant separately
  2. Write one file per track — no compositing, no re-encode
  3. Take the identity from the token your IdP already signed
  4. Record it in the manifest beside the media

Alex Rivera — because that is who authenticated, not who a model thinks it heard. There is no step that can be wrong, because there is no step that is guessing.

The consequence worth stating out loud: transcription is per-speaker by construction. The transcriber is handed one person's audio at a time, so it never has to be told there was more than one — and the accuracy floor for a room of eight is the same as for a room of two.

02 — The artefact

One directory per meeting, and it explains itself.

Copy it to a different machine and it still makes sense. There is no database that has to come with it and no index to rebuild — the manifest is the source of truth, and it is a file.

  • Media as it arrived. Opus and VP8/AV1 land in a container without a re-encode, so the archive is bit-for-bit what the browsers sent.
  • A manifest that names accounts. Principal, display name and email, per track, taken from the signed token — not from anything the client claimed.
  • A transcript keyed to people. Per-speaker lines with timings, exportable as JSON, WebVTT, SRT or Markdown minutes.
  • Signed, so tampering shows. Every manifest carries a hash of each track and is signed by the instance key, which is what makes it worth producing in a dispute.
Everything in the platform
recordings/product-sync/20260814T101500Z/ on your disk
# Alex, on a laptop and a phone — two devices,
# one principal in the manifest.
alex-rivera-mic.ogg            12.4 MB
alex-rivera-cam.mkv            84.1 MB
alex-rivera-phone-mic.ogg       4.2 MB

# Sam.
sam-okonkwo-mic.ogg            11.8 MB
sam-okonkwo-cam.mkv            79.3 MB
sam-okonkwo-screen.mkv         31.0 MB

manifest.json                  who is who
transcript.json                per speaker
summary.md                     optional
manifest.json the product
{
  "room": "product-sync",
  "started_at": "2026-08-14T10:15:00Z",
  "ended_at": "2026-08-14T10:47:22Z",
  "signature": "ed25519:9f3c…a71e",
  "participants": [
    {
      "principal": "8f2c1a4e",
      "name": "Alex Rivera",
      "email": "alex@acme.com",
      "authenticated_by": "sso.acme.com",
      "tracks": [
        { "file": "alex-rivera-mic.ogg",
          "kind": "audio", "sha256": "4d1b…" },
        …
      ]
    },
    …
  ]
}

Written beside the media when the meeting ends. The name came from the sign-in, so nothing downstream has to work it out — and the signature means nothing downstream can quietly change it either.

04 — The platform

A complete meeting product, not a recording experiment.

The per-track substrate is what makes Meetnix different. Everything here is what makes it usable as the only conferencing tool your company runs.

Per-track capture

One file per participant per source — microphone, camera, screen. Never composited, never re-encoded, up to 50 people in a room.

Transcription and live captions

Speech-to-text on hardware you nominate, per speaker by construction. Captions are live in the call; the full transcript lands with the recording.

Cross-meeting search

Full-text and semantic search over every meeting you are allowed to see, filtered by speaker. Answers cite the track and the timestamp.

Your identity provider

OIDC and SAML, SCIM provisioning, groups mapped to rooms. No second user directory, no meeting passwords, no guest link that works forever.

Retention and legal hold

Policies per room or per team — prune video early, keep audio and the manifest as long as the policy says, and freeze anything under hold.

Access audit log

Who opened which recording, when, from where. Append-only, exportable to your SIEM, and covering search results as well as downloads.

Sealed rooms

End-to-end encrypted meetings where the server can route but not read. Recording is impossible in a sealed room, which is the honest version of that promise.

Dial-in and dial-out

SIP bridging for people on a phone. A dialled-in caller gets their own track and their own transcript line, like everyone else.

Live translation

Real-time captions in another language, running on your own machine. Per-speaker input is what makes it usable rather than a demo.

Also in the box: calendar integration, waiting rooms and host controls, chat and reactions, breakout rooms, raise-hand, background blur that runs in the browser, clip export, and a public roadmap you can argue with — see what is shipped and what is next.

05 — Run it

One config block, your identity provider, done.

Meetnix ships the media server, the sign-in bridge, the recorder, the archive and the TLS front door as one unit. Point it at the OIDC provider you already run — there is no separate user database to populate and no meeting passwords to distribute.

  • Every secret is a path you hand in. Nothing sensitive is ever read from an image, a repository or the Nix store.
  • One UDP port. All media is multiplexed onto a single public port, with an ICE/TCP fallback for networks that block it.
  • Branding is an option, not a fork. Your name on the tab, the sign-in card and the mail, in the free build.
Installation guide
configuration.nix
services.meetnix = {
  enable = true;

  domain      = "call.acme.com";
  useACMEHost = "call.acme.com";

  operators = [ "alex@acme.com" ];

  oidc.issuer =
    "https://sso.acme.com/realms/staff";

  recording.retention = {
    video      = "30d";
    audio      = "2y";
    transcript = "forever";
  };

  # Paths you hand in. Nothing secret is
  # ever read from the Nix store.
  oidc.clientSecretFile = "/run/secrets/oidc";
  sessionKeyFile        = "/run/secrets/session";
};

Evaluated on every build of this site, so it cannot drift from something that works.

compose.yaml
services:
  meetnix:
    image: ghcr.io/meetnix/meetnix:1.0
    ports: ["443:8443", "21851:21851/udp"]
    environment:
      MEETNIX_DOMAIN: call.acme.com
      MEETNIX_OIDC_ISSUER: https://sso.acme.com
    secrets: [oidc_client_secret, session_key]
    volumes:
      - ./recordings:/var/lib/meetnix

  # optional, and usually a different machine
  transcriber:
    image: ghcr.io/meetnix/transcriber:1.0
    deploy: { resources: { reservations: {
      devices: [{ capabilities: [gpu] }] } } }

docker compose up gets you a working instance with a self-signed certificate in about a minute.

values.yaml
domain: call.acme.com

oidc:
  issuer: https://sso.acme.com/realms/staff
  existingSecret: meetnix-oidc

sfu:
  replicas: 3
  region: eu-central

storage:
  class: s3
  endpoint: https://minio.acme.internal
  bucket: meetnix-recordings

metrics:
  serviceMonitor: true

helm install meetnix meetnix/meetnix -f values.yaml — the SFU scales horizontally; the portal is stateless.

Meetnix Cloud
# We run it. You still own the recordings:
# point it at a bucket in your own account and
# the media is written there, not to us.

region:  eu-central | us-east | ap-southeast
storage: your S3 bucket
sso:     your OIDC or SAML provider
sla:     99.9%

# Same binaries as the free build, same
# manifest format, same export. Leaving is
# a `docker compose up` away — which is the
# only reason to trust a hosted service.

Managed, in the region you pick, with your storage. See pricing.

06 — Architecture

Five processes, one machine, no egress.

The recorder is not a bot that joins your call. It is a subscribe-only process the server starts because the room started, which is why the recording indicator cannot lie.

Your infrastructure

Edge

nginx TLS on :443. The only thing bound to a public address besides one UDP port.
:21851/udp All media, multiplexed. ICE/TCP fallback for networks that block UDP.

Services

meetnix The portal: OIDC bridge, token minting, browser app, archive, search index.
livekit The SFU. Signalling on loopback; it never sees an identity it was not handed.
meetnix-recorder One process per active room. Subscribe-only, spawned on room start, reaped on room end.

Storage and workers

recordings/ A local disk or an S3-compatible bucket you name. Content-addressed, retention-managed.
transcriber Speech-to-text on a GPU you nominate. Usually a different machine; often several deployments share one.
index The search index. Rebuildable from disk, so it stays a cache rather than a second source of truth.

Optional, off by default, and the only thing that can leave

summary model If you switch summaries on, the text of a transcript goes to the provider you configure — never the audio, never the video, and nothing at all if you leave it off. Point it at a model on your own hardware and this box moves back inside the line.

07 — Compared

The difference is where the decision was made.

Not a feature checklist. These are architectural properties, and they are hard to change afterwards — a competitor who wants the first row has to rebuild their recorder and re-record a history they no longer have.

Property Meetnix Hosted conferencing Note-taker bots
How a speaker is identified Signed IdP token Diarisation, then a label Diarisation, then a guess
What is written to disk One file per track A composited mixdown A composited mixdown
Where the media lives Your disk or your bucket The vendor's A second vendor's
Who can read the transcript Whoever your IdP says Their access model, plus staff Anyone the invitee shares with
Search across meetings by speaker Exact Approximate, if offered Approximate
Consent signal Derived from the server's grant A flag the client sets A participant named "Notetaker"
Read the source All of it, AGPL-3.0 No No
Cost shape Your hardware, then zero Per seat, per month, forever Per seat, on top

Compared against the default configuration of the mainstream products as of August 2026. Where a vendor offers a stronger option behind an enterprise plan, the row describes what most teams actually get.

08 — Who buys this

The teams that were never allowed to use the default.

Not "privacy-conscious" — that is a preference, and preferences do not have budgets. This is for teams whose counsel has already said no, and who currently take notes by hand because the tool that would help them is the tool they are not permitted to use.

Every one of them wants the same three properties: the recording stays on infrastructure they control, access is gated by the identity provider they already run, and the record says who spoke well enough to be relied on later. The third one is the hard part, and it is the one everybody else solves with a model.
LegalPrivilege does not survive a third-party processor nobody vetted.
HealthcareA patient discussion in someone else's bucket is a reportable event.
Financial servicesRecords that must be retained, produced, and attributable to a person.
Government & defenceWhere the answer to a hosted recorder is simply no.
Anyone under NDADiligence calls, M&A, incident response, board meetings.
AI companiesWhose entire roadmap is discussed out loud on those calls.
Works councilsA Betriebsvereinbarung is easier to write about a system nobody else can read.

09 — Open source

The whole product is the free build.

Meetnix is AGPL-3.0. Self-hosting is the supported path, not a downgrade from one — every recording, transcription, search and retention feature on this page is in the build you can run today for nothing, with no user cap and no watermark.

Community

Run it yourself, on your hardware, for as many people as it fits.

$0forever

  • Unlimited users and meetings
  • Per-track recording, transcription, search
  • OIDC sign-in and your own branding
  • Community support
Deploy it

Cloud

We run the servers. You still own the recordings — they land in your bucket.

$14/ user / month

  • Everything in Enterprise, managed
  • EU, US or APAC region, pinned
  • Bring your own storage bucket
  • 99.9% uptime SLA
Pricing detail

Free Enterprise licences for registered non-profits, accredited educational institutions and open-source projects — write to hello@meetnix.ai and say which one you are.

Start here

Put the recorder inside the building.

An hour to a working instance on hardware you already own. No sales call in front of it, and no bill at the end of it.

Evaluating for a regulated team? We will do the works-council and DPIA paperwork with you — start here.