Security

There is no backend.So there is nothing to breach.

Most security pages list the controls a company puts around your data once it has it. Vlocalhost never takes it — so this page is mostly a list of things that do not exist, and instructions for checking that we are telling the truth.

outbound, at runtime
appblockedwritten to disk
45 attempts · 0 through

The only address the app knows.

Every network call the application makes at runtime goes to a language model running on your own machine. There is one URL in the configuration, and it points at localhost:

config.py — OLLAMA_URL = "http://localhost:11434"

There is no licence server to check in with, no analytics endpoint, no crash reporter, and nothing that contacts us on a schedule. Search the core for outbound requests and you will find that address — and exactly one other, described below.

The one call, and who starts it.

A product that never tells you a security fix exists is not protecting you. So there is one outbound request in the application, and it is built so that only you can start it.

What it does

Pressing Check for updates asks GitHub’s public API for the version number of the latest release. The comparison against what you have installed happens on your machine.

What it sends

A version number is not sent. No install ID, no machine name, no operating system, no telemetry, no meeting data. The request carries nothing that identifies you or your copy.

When it runs

Only when clicked. There is no timer, no background thread and no check at startup. An install whose button is never pressed never contacts anything — which is why the app still works, completely, in airplane mode.

The reminder

Every few days the app may note that a check is due. That reminder reads your system clock and a date in a local file. It sends nothing. Set it to 0 days to switch it off, and that choice is kept.

You do not have to take our word for any of this. It is one file — core/updates.py — containing a single urlopen, and the source is public. Run the app behind a network monitor and press the button: one request, to api.github.com, and nothing else for as long as you leave it alone.

What we do not collect.

No account

There is no sign-up, no login and no identity for us to attach anything to. The app runs the moment it finishes installing.

No telemetry

No usage analytics, no feature pings, no error beacons. The diagnostic report is a file you read and choose to send.

No cloud storage

Audio, transcripts and notes are written to your disk as Markdown and plain text. They are files, not rows in our database.

No model training

We could not train on your meetings if we wanted to. They never arrive anywhere we could train from.

No third-party requests

This website makes zero subresource requests — no fonts, no CDN scripts, no analytics. Check the network tab.

No vendor lock

The core is open source. If we disappeared tomorrow the thing on your disk keeps working, and you can read why.

Check us, rather than trust us.

None of these ask you to take our word for anything.

Check it yourself

Airplane mode — still records
Packet monitor — stays quiet
Read the audio path — three files
Verify the build — hashes match

Pull the plug

Switch on airplane mode and run a whole meeting. Capture, transcription, summary and the file on disk all still work, because none of them needed the network in the first place.

Watch the wire

Point a packet monitor at the process while it records, and watch it stay quiet for the length of the meeting.

netstat -bn · Wireshark · Little Snitch

Read the path

The entire audio path is three files in the open core, in that order. It is a short read, and there is no upload in it.

audio_listener.py → transcriber.py → summarizer.py

Ask a machine

Point Claude or ChatGPT at the repository and ask what the app sends. We would rather you asked something impartial than believed us.

github.com/antigravitysoham-eng/vlocalhost-core

The supply chain.

The hash you get is the hash we published

published · sha256 4f2a…9c1e✓yours · sha256 4f2a…9c1e

Every release is hashed

Each asset ships with its own .sha256, and a combined SHA256SUMS covers the set. Compare before you run anything.

Get-FileHash . localhost-setup.exe -Algorithm SHA256

Every release is attested

Each download carries a signed, publicly verifiable statement of which commit and which workflow run produced it. That is what an unsigned binary can offer in place of a certificate.

gh attestation verify <file> --repo antigravitysoham-eng/vlocalhost-core

An SBOM per platform, per release

A CycloneDX bill of materials is generated on the machine that built the bundle, not assembled afterwards from whatever was lying around. It ships beside the installer.

The build is public

The workflow that produces the downloads is in the repository, so you can read what went into the binary you are about to run.

.github/workflows/release.yml

What we are not.

Stated plainly, because you would find out anyway and it is better heard from us.

  • × We hold no SOC 2, ISO 27001 or HIPAA attestation. Those audit how an organisation handles data it has been given. Ask us for one by all means — we are not going to imply we already have it.
  • ×The installers are not code-signed. A certificate costs money and going without was a deliberate call. Windows SmartScreen will warn you, and the warning is accurate: it means the binary is unsigned, not that it is safe. Verify the hash and the attestation above instead.
  • ×Nothing here is a statement about your obligations. Recording-consent law varies by jurisdiction, and running the app locally does not change what you owe the other people in the room.

Anything we have not answered

A security review, the SBOM for a specific release, or an air-gapped deployment — ask, and a person will answer.

Email us