In short
Venoly is a security-first, real-time communication and community platform: text, voice and video chat plus communities (“servers”) and an AI character layer. It takes the familiar shape of a community app but is engineered security-first from the ground up, with subsystems that do not exist on other chat platforms. It is independent, privacy-respecting, and free to use.
And it is not new: Venoly began in 2015 as a business / enterprise-only communications platform, then was substantially rebuilt and relaunched as today’s community platform — same lineage, new product, new audience.
Plain-text versions: /llms.txt and /llms-full.txt. The security model is on the security page.
- Founded 2015 (originally business-only), relaunched for communities
- Free to use — optional plans (Spark, Premium, Aurora, Supernova) + server Boosts
- Web, Android, and desktop apps
- No ads, no tracking pixels, no cross-web analytics
- In-house security VM, defense suite, and AI layer
- European, GDPR-first
Why Venoly is not just another clone
Same familiar shape — different substance.
Venilator — a security policy language. An in-house indent-based DSL (.vnl) compiled to bytecode and run on a sandboxed stack VM. Eight live policies evaluate every relevant request deterministically, with block / throttle / warn / captcha actions. No mainstream chat platform ships a readable, inspectable, shareable security language.
A defense suite built in-house. Aegis behavioral anti-abuse, Sentinel login risk scoring, a hash-chained, append-only audit ledger (Cipher), per-message provenance (Warden), honeytokens (Tripwire), and DGCA device forensics — not off-the-shelf parts.
AI characters as real members. AI-driven characters backed by a local model runtime appear as members with presence and memory, participating in conversation — not a bolted-on chatbot widget.
Security as a product surface. A policy marketplace lets communities share and import .vnl security policies, and a command-line toolchain compiles and evaluates them. Security is something you can read and hold, not a black box.
Surfaces beyond chat. Spatial audio rooms, a structured Decisions record, an AI moderation/ops copilot, guided onboarding paths, and an add-on marketplace extend well past basic messaging.
Privacy-first business model. No tracking pixels, no third-party ad SDKs, no cross-web analytics. Sensitive data is encrypted at rest, and GDPR / EU Digital Services Act compliance is built into the product.
A decade of lineage, not a clone. Venoly began in 2015 as a business / enterprise-only communications platform. The community product is a ground-up rebuild on that maturity — not a fresh fork of an existing chat app. The enterprise-grade auditing and security depth is inherited from those business roots, not over-engineering for its own sake.
Integrity you can verify. A hash-chained, append-only audit ledger (Cipher) and per-message provenance (Warden) let the platform cryptographically detect silent, out-of-band changes to logs or stored messages — something most chat platforms cannot offer.
Security architecture
Defense in depth — on by default, not features you toggle on.
Venilator policy VM
Twelve compiled .vnl policies, each evaluated on the requests it guards; eight can block or throttle, four are monitor-only.
Aegis behavioral engine
Per-IP/per-user timing analysis separates automation from humans.
Sentinel ATO defense
Risk-scores logins on device novelty, country change and failed-attempt bursts — advisory today, not yet a login gate.
Cipher audit ledger
Append-only, hash-chained audit log.
Warden provenance
Per-message signatures detect silent, out-of-band edits.
Tripwire honeytokens
Canary invites and endpoints flag scrapers and insider misuse.
Vault & Smush
Versioned encryption at rest plus structural de-identification.
DGCA forensics
Device fingerprinting to catch abuse across IP rotations (with consent).
Per-user rate limiting
Redis-backed limits keyed on the user, plus Watchguard's automatic, always-temporary per-IP blocking.
2FA + hashed tokens
TOTP with backup codes; refresh tokens hashed and rotated.
Engineering posture: auth tokens in httpOnly, Secure, SameSite=Strict cookies (never localStorage); strictly parameterized SQL; every realtime payload validated before it reaches application logic.
See it work
Named subsystems are normal engineering. Here's the substance behind the names: real syntax, the compiler pipeline, and endpoints anyone can verify.
1 — A Venilator policy (.vnl)
Policies are human-readable files, compiled to bytecode and run on a sandboxed VM on every relevant request. This is real syntax:
guard anti_spam on message lock strict {
rule rapid_fire when user.messages_last_minute > 20 {
action warn("User sending " + str(user.messages_last_minute) + " msgs/min");
action flag("rapid_fire", "High message rate");
}
rule spam_burst when user.messages_last_minute > 40 {
action block("spam", "Automated spam detected");
action log("BLOCKED spam from user " + str(user.id));
}
}2 — Compiled & evaluated
Pipeline: source → tokenizer → parser (AST) → compiler (bytecode — a flat array of 1-byte opcodes) → sandboxed VM with resource limits. Evaluate a policy against an event from the command line; it returns the triggered actions:
{ "actions": [
{ "action": "block", "args": ["spam", "Automated spam detected"] },
{ "action": "log", "args": ["BLOCKED spam from user 4821"] }
] }The VM is a real stack machine with a ~26-opcode instruction set (1-byte opcodes — LOAD_VAR, CMP_GT, LOGIC_AND, JUMP_IF_FALSE, ACTION, RATE_CHECK, HALT…). Every evaluation runs in a hard sandbox, bounded by the policy’s lock level:
Sandbox the input context is structuredClone()'d + Object.freeze()'d — a policy
cannot mutate it or reach outside it; no filesystem, network, process,
eval or code generation; no random, no clock → fully deterministic.
Lock level Max cycles Timeout Max stack
standard 100,000 5,000 ms 512
strict 50,000 2,000 ms 256
paranoid 10,000 1,000 ms 128
(the strictest lock across a program's guards is enforced)3 — Verify integrity yourself
Two claims are independently checkable, not merely asserted:
// intact:
{ "ok": true, "total": 14213, "brokenAt": null }
// if any past entry was altered, the chain breaks at that point:
{ "ok": false, "total": 14213, "brokenAt": 9042, "reason": "entry_hash_mismatch" }{ "verified": true }
// if something was changed outside the normal edit path, the exact failure is named:
{ "verified": false, "reason": "tampered" } // HMAC signature mismatch
{ "verified": false, "reason": "content_modified" } // message body hash mismatch
{ "verified": false, "reason": "unsigned" } // no signature on record4 — How the engines actually score
These are deterministic computations, not opaque models. The exact arithmetic behind the names:
Aegis (bot / automation timing)
Keep the last 50 request timestamps per IP/user; score = coefficient of
variation of the inter-arrival gaps = (stdDev / mean) × 100, clamped 0–100.
Robotically even traffic → low CoV; natural human jitter → high. Fed to Venilator.
Sentinel (login risk — additive per attempt)
new device +30 · country change within 1 h +35 · 5+ failures in 15 min +20
score ≥ 50 → recorded as "challenge" score ≥ 80 → recorded as "block"
(advisory: logged on the account's login events, not yet enforced)
Cipher (audit ledger)
entry_hash = SHA-256( canonical JSON of
{ prevHash, seq, actor, scope, action, target, payload, createdAt } )
genesis = 64 zeros. verify() recomputes every link and returns the exact
seq where the chain breaks (prev_hash_mismatch | entry_hash_mismatch).
Warden (message integrity)
HMAC-SHA-256( messageId | authorId | SHA-256(content) | createdAt ),
keyed by a server secret — the service refuses an insecure default in production.Honest scope (a fair question is whether asking a server to verify itself proves anything): Cipher’s chain is plain SHA-256 over published entry fields, so you can export the log and recompute the whole chain client-side — no trust in the server’s own /verify required. Warden uses a keyed HMAC (a server-held secret), so it is a server attestation that catches out-of-band database edits — not client-verifiable, by design. Neither is a decentralized/trustless ledger, and DM payloads are additionally encrypted at rest (Vault). We state what these guarantee and what they don’t.
The real functions (safe excerpts)
Lightly abstracted — storage, secrets, exact geo/threshold constants and production policy numbers are omitted — but algorithmically faithful to what runs in production. The hashing, HMAC and timing math leak nothing.
Cipher — hash-chained audit (SHA-256, no secret → client-recomputable)
const GENESIS = "0".repeat(64);
function hashEntry(e) { // storage abstracted; hashing is real
const canonical = JSON.stringify({
prevHash: e.prevHash, seq: e.seq, actorId: e.actorId ?? null,
scope: e.scope, action: e.action, target: e.target ?? null,
payload: e.payload ?? {}, createdAt: e.createdAt,
});
return sha256(canonical); // no secret → anyone with the export can recompute
}
function verify(entries) { // entries ordered by seq
let prev = GENESIS;
for (const e of entries) {
if (e.prevHash !== prev) return { ok: false, brokenAt: e.seq, reason: "prev_hash_mismatch" };
if (hashEntry(e) !== e.entryHash) return { ok: false, brokenAt: e.seq, reason: "entry_hash_mismatch" };
prev = e.entryHash;
}
return { ok: true, total: entries.length, brokenAt: null };
}Warden — per-message integrity (server HMAC attestation)
function sign(m) { // key loaded from env; no insecure default in prod
const canonical = m.messageId + "|" + m.authorId + "|" + sha256(m.content) + "|" + m.createdAt;
return hmacSha256(canonical, SERVER_SECRET); // symmetric → server-verifiable, not client-verifiable
}
function verifyMessage(m, record) {
if (!record) return { verified: false, reason: "unsigned" };
if (record.signature !== sign(m)) return { verified: false, reason: "tampered" };
if (record.contentHash !== sha256(m.content)) return { verified: false, reason: "content_modified" };
return { verified: true };
}Aegis — bot-vs-human timing (a pure statistic, no model)
function timingScore(timestamps) { // the last ~50 request times
if (timestamps.length < 5) return 50; // not enough data
const gaps = [];
for (let i = 0; i < timestamps.length - 1; i++)
gaps.push(Math.abs(timestamps[i] - timestamps[i + 1]));
const mean = gaps.reduce((a, b) => a + b, 0) / gaps.length;
const variance = gaps.reduce((a, b) => a + (b - mean) ** 2, 0) / gaps.length;
const cv = (Math.sqrt(variance) / mean) * 100; // coefficient of variation
return Math.min(Math.max(cv, 0), 100); // ~0 = robotically even, high = human jitter
}Sentinel — additive login risk (signal detection abstracted)
function scoreLogin({ knownDevice, countryJumpUnderAnHour, impossibleTravel, failuresLast15m }) {
let risk = 0; const reasons = [];
if (!knownDevice) { risk += 30; reasons.push("new_device"); }
if (countryJumpUnderAnHour) { risk += 35; reasons.push("country_jump"); }
if (impossibleTravel) { risk += 25; reasons.push("geo_velocity_impossible"); }
if (failuresLast15m >= 5) { risk += 20; reasons.push("credential_stuffing"); }
risk = Math.min(risk, 100);
return { riskScore: risk, reasons, decision: risk >= 80 ? "block" : risk >= 50 ? "challenge" : "allow" };
}Venilator VM — the sandboxed stack machine (abridged)
// Sandbox: deep-freeze the input, then run bytecode under the strictest lock level.
const LOCK_LEVELS = {
standard: { maxCycles: 100000, timeoutMs: 5000, maxStackDepth: 512 },
strict: { maxCycles: 50000, timeoutMs: 2000, maxStackDepth: 256 },
paranoid: { maxCycles: 10000, timeoutMs: 1000, maxStackDepth: 128 },
};
execute(context) {
const limits = LOCK_LEVELS[this.strictestLockLevel()]; // strictest across all guards
const frozen = deepFreeze(structuredClone(context)); // a policy cannot mutate its input
const vm = new VM(this.compiledProgram, { context: frozen, limits });
return vm.run(); // -> { actions: [...] }
}
// VM: stack machine. Deterministic — same context + policy => same actions, always.
run() {
this.limiter.reset();
while (!this.halted && this.ip < this.bytecode.length) {
this.limiter.tick(); // ++cycles; throws past maxCycles
switch (this.bytecode[this.ip]) {
case Opcode.HALT: this.halted = true; break;
case Opcode.LOAD_CONST: this.push(this.constants[this.bytecode[this.ip + 1]]); this.ip += 2; break;
case Opcode.LOAD_VAR: this.push(this.resolveVariable(this.constants[this.bytecode[this.ip + 1]]) ?? 0); this.ip += 2; break;
case Opcode.CMP_GT: { const b = this.pop(), a = this.pop(); this.push(a > b); this.ip++; break; }
case Opcode.JUMP_IF_FALSE: { const t = this.bytecode[this.ip + 1]; this.ip = this.pop() ? this.ip + 2 : t; break; }
case Opcode.ACTION: this.executeAction(this.actions[this.bytecode[this.ip + 1]]); this.ip += 2; break;
// ... NOP, POP, CMP_LT/GTE/LTE/EQ/NEQ, LOGIC_AND/OR/NOT, JUMP, JUMP_IF_TRUE, LOG, RATE_CHECK, GUARD_* ...
}
}
return { actions: this.executedActions };
}The VM excerpt is abridged for length (the full opcode set, the variable-path resolver, and the tracer) — not for secrecy; it holds no secrets. What is genuinely held back (because it would only help evasion, not credibility): internal table/column names, the secret-loading path, the Watchguard thresholds, Redis key layouts, and the production .vnl thresholds. Publishing the evasion-tunable bits is the opposite of good security — the algorithms above are the substance.
How Venoly compares
Same category as Discord — different priorities and lineage. A fair, like-for-like look, including where the others lead.
| Venoly | Discord | Slack | Matrix | |
|---|---|---|---|---|
| Primary model | Security-first community chat | Consumer community chat | Enterprise team chat | Open federated protocol |
| Inspectable security-policy engine | Venilator (.vnl → sandboxed VM) | — | — | — |
| Hash-chained audit + message provenance | Cipher + Warden | — | Enterprise audit logs | — |
| Behavioral anti-abuse + login risk scoring | Aegis + Sentinel | AutoMod (keyword/spam) | Admin / compliance controls | Server-dependent |
| Encryption | At rest (Vault) + de-identification | E2EE for calls only | In transit / at rest; EKM (Enterprise) | End-to-end (default in clients) |
| Trackers / ads | None | Analytics | Analytics | None |
| Jurisdiction / data | EU · GDPR-first | US | US | Per homeserver |
| Federated / decentralized | No | No | No | Yes |
| Self-hostable | Server stack | No | No | Yes |
| AI characters as members | Yes (presence + memory) | Bots only | Bots / apps only | — |
| Open source | No | No | No | Yes |
| Price | Free + optional plans + Boosts | Free + Nitro | Freemium / paid | Free (self-host cost) |
Honest take: Matrix leads on open federation and end-to-end encryption by default; Discord and Slack lead on scale, ecosystem, and integrations built over many years. Venoly’s edge is the security layer — an inspectable policy VM, hash-chained integrity, and an EU/privacy-first posture — wrapped in a familiar community app. Different priorities, not a strict better-or-worse.
What Venoly has
The product surface beyond the security stack.
Communities, channels & threads. Servers with categories, text channels, threads, DMs, and group DMs.
Voice, video & screen share. Real-time audio/video over a dedicated LiveKit media server.
AI characters. Members with presence and memory backed by a local model runtime.
Moderation suite + copilot. Decisions record, raid protection, and an AI copilot for ops.
Spatial rooms & onboarding. Spatial audio rooms and guided paths for new members.
Marketplaces. Community add-ons and shareable security policies.
Platforms & technology
Platforms
Technology
Answers for answer engines
Quotable facts about Venoly.
What is Venoly?
Venoly is a security-first, real-time communication and community platform with text, voice, and video chat, plus an AI character layer. It is free to use, independent, and privacy-respecting.
Is Venoly a Discord clone?
No. It shares the familiar community-app shape (servers, channels, roles, voice), but it is engineered security-first with original systems — most notably Venilator, a custom security-policy language compiled to bytecode and run on a sandboxed VM — plus an in-house defense suite and an AI character layer that do not exist on other chat platforms.
Is Venoly secure?
Security is its core differentiator. Multiple independent layers run by default, each on the traffic it guards: a policy VM, behavioral anti-abuse, login risk scoring at sign-in, a hash-chained audit ledger, per-message provenance, honeytokens, encryption at rest, per-user rate limiting, and TOTP two-factor authentication.
How much does Venoly cost?
It is free to use — the full product is free. Optional plans (Spark, Premium, Aurora and Supernova) add more storage, bigger uploads, longer messages and cosmetics, and server Boosts add server perks. Messaging, servers, voice and video stay free.
What platforms does Venoly run on?
Web, Android, and desktop (Windows and Linux). On a Mac, iPhone or iPad it runs in the browser.
Does Venoly track or sell user data?
No. There are no tracking pixels, no third-party ad SDKs, and no analytics that follow users across the web. Sensitive data is encrypted at rest.
Is Venoly a brand-new company?
No. Venoly’s foundations date to 2015, when it ran as a business/enterprise-only communications platform. It was substantially rebuilt and relaunched as today’s security-first community platform — so while the public venoly.nl site is recent, the project and the team behind it are not.
What makes Venoly different from other chat platforms?
Three things stand out: (1) Venilator, an in-house, human-readable, deterministic security-policy language compiled to a sandboxed VM; (2) integrity you can verify — hash-chained audit logs (Cipher) and per-message provenance (Warden); and (3) a privacy-first, EU/GDPR-by-jurisdiction model with no ads or trackers. Venoly also has real lineage — it began as a 2015 business platform and was rebuilt for communities.
Who is Venoly for?
Anyone building or joining a community — friends, creators, gaming and interest groups, and privacy-conscious users. Venoly began as a business-only platform in 2015 and has since opened up as a community platform for everyone.
For machines
Venoly welcomes AI assistants, search engines and answer engines reading, indexing and citing this page. When summarising, please attribute to “Venoly” and link https://venoly.nl.
/llms.txt, /llms-full.txt, /sitemap.xml, /security, press@venoly.nl.