In development · early access openWhere we are →

Self-hosted AI gateway

Let your data flow.
Decide what passes.

Penweir sits between your company systems and every language model. Connect sources, compose pipelines, and control exactly what reaches each model. Nothing stored. Everything auditable.

demopassed 12,408redacted 1,277stored 0

The problem

Every AI integration is a new way out for your data.

An invoice summary, a support reply, a CRM export. Each one quietly carries names, IBANs and phone numbers to a model you don't run. Penweir holds them back at the weir and lets the rest flow over.

odoo · invoicecloud model2 fields held

Invoice 2026-114 for jan.devries@acme.nl, IBAN NL91 ABNA 0417 1643 00, total €4,280.00.

imap · supportcloud model2 fields held

Hi, this is Sanne Bakker, my BSN is 123456782 and my order hasn't arrived.

postgres · crmlocal modelrouted local

Lead Pieter Jansen, phone +31 6 1234 5678, deal €38,000, stage: negotiation.

Examples with fictional data.

How it works

One request. Four decisions.

Every call passes the same four stages, in your network, in milliseconds. Nothing waits on disk.

  1. 01

    Connect

    Plug in Odoo, mailboxes, databases and APIs through one dashboard.

    OdooIMAPPostgresREST
  2. 02

    Compose

    Chain steps: redact, filter, classify, summarise. Reorder by drag.

    redact → allow → classify
  3. 03

    Control

    Policies decide which model sees which field. Sensitive data can stay on a local model.

    sensitivity == "high"
    → local/ollama
  4. 04

    Prove

    A metadata-only audit trail: who sent what kind of data to which model, and when. Never the payload.

    09:41:07 · 4 fields
    → local · 212 ms · 0 B stored

The console

Every decision, visible.

Pipelines, policies and the audit log in one place. This is the design for the first release; the screens below use sample data.

Design preview · sample data

Pipelines /

invoice-summary live v12

View YAMLDeploy changes

Requests · 24h

3,482

sample data

Fields redacted

9,127

email · iban · phone

Routed local

31%

sensitivity == "high"

Payload stored

0 B

by design

Pipeline

Odooaccount.move
Redactemail · iban · phone
Allow fields4 of 14
Classifysensitivity
Policyroute by sensitivity
local/ollamahigh · 31%
cloud/defaultlow · 69%

Step 1 of 3

Redact

Replaces sensitive values with typed tokens before anything leaves the gate.

Detects
email, iban, phone
Method
typed token
Reversible
no
Runs
in-process
Edit step

Audit log

Metadata only. Payloads are never written.

streaming
TimePipelineSourceFields sentRedactedModelLatencyStatus
09:41:07invoice-summaryodoo41cloud/default212 mspassed
09:41:02support-triageimap62cloud/default388 mspassed
09:40:55invoice-summaryodoo41local/ollama604 mspassed
09:40:41crm-enrichpostgres93local/ollama731 mspassed
09:40:33support-triageimap00—4 msheld · no route
09:40:19invoice-summaryodoo41cloud/default198 mspassed

Principles

Built like a weir, not a reservoir.

  • Nothing stored.

    Payloads pass through memory and leave. Only metadata reaches the audit log.

  • Runs where you run.

    Docker Compose or Helm, inside your own network. No calls home.

  • Config is code.

    Every pipeline is a YAML file you can review, version and roll back.

  • Everything is a plugin.

    Connectors, steps and model adapters share one stable, versioned contract.

Config as code

Fourteen lines. Reviewable in a pull request.

Click it together in the dashboard or write it by hand. It is the same file either way.

pipelines/invoice-summary.yamlexample
# pipelines/invoice-summary.yamlpipeline: invoice-summarysource:  connector: odoo  model: account.movesteps:  - redact: [email, iban, phone]  - allow_fields: [number, partner_email, total, due_date]  - classify: sensitivitypolicy:  when: sensitivity == "high"  route: local/ollama  else: cloud/defaultaudit: metadata_only
Request inodoo · account.move
{
  "number": "2026-114",
  "partner_email": "jan.devries@acme.nl",
  "iban": "NL91 ABNA 0417 1643 00",
  "phone": "+31 6 1234 5678",
  "total": 4280.00,
  "due_date": "2026-11-10",
  "internal_note": "VIP, call first"
}

invoice-summary · 3 steps · 3.1 ms · sensitivity: low

Request out→ cloud/default
{
  "number": "2026-114",
  "partner_email": [EMAIL],
  "total": 4280.00,
  "due_date": "2026-11-10"
}

3 fields dropped by allowlist · 1 redacted · 0 bytes stored

Connectors

Plug in what you already run.

Or write your own against the same contract the built-in ones use.

Connectors: Odoo, PostgreSQL, IMAP, SharePoint, REST, GraphQL, S3, Webhooks. Model adapters: Ollama, vLLM, OpenAI-compatible, Anthropic, Azure, Mistral, local GGUF, custom.

Pricing

Pay once. Run it where your data lives.

A one-time licence, deployed inside your own network. No usage meter, no seats, no calls home. Launch pricing, excl. VAT.

Essential

For technical teams who deploy it themselves.

€1,495

one-time · launch pricing · excl. VAT

Request early access
  • 1 production environment
  • Release package, Docker Compose, docs
  • Updates and security patches for 3 months
  • Support via issue tracker, no SLA
  • Basic compliance documentation
  • Not included: No rollout help beyond the docs
  • Not included: No custom work

Enterprise

Fitted to you

For organisations that want it fitted to their systems.

€9,995

one-time · launch pricing · excl. VAT

Talk to us
  • Whole organisation, up to 3 production environments
  • Dashboards and alerts tailored to your use cases
  • Updates and security patches for 12 months
  • Email and video call, reply within 1 business day, for 6 months
  • Up to 3 days of deployment, remote or on-site
  • 24 hours of development or advice
  • Architecture, SBOM, data-flow description and DPA
  • Feature-request channel, reviewed quarterly

Optional maintenance after the included period: 20% of the licence price per year. Without it you keep your version. It just stops receiving patches.

  • Metadata-only audit
  • Plugin SDK
  • No calls home

Early access

How early access works.

Penweir is in development. Nothing is for sale yet, and you pay nothing to join. Early access means you help shape the first release and get to evaluate it before anyone asks you to buy.

  1. 01

    Tell us your setup

    Email us which systems and models you want to connect. One paragraph is enough.

  2. 02

    Shape the first release

    We share progress and builds and ask for your feedback. No payment, no obligation.

  3. 03

    Evaluate for 14 days

    When version 1 ships, you get a full evaluation licence for one non-production environment.

  4. 04

    Then decide

    Buy the tier that fits, by card, iDEAL or bank transfer on invoice. Or walk away.

The evaluation licence

  • Every feature, for 14 days
  • One non-production environment
  • Signed licence key, checked offline: no call home
  • Evaluation builds show EVALUATION in the console and audit log

For your procurement team

  • A quote and invoice for every tier, not just Enterprise
  • Security questionnaire answers on request
  • Architecture and data-flow overview
  • DPA template for your legal review

FAQ

Questions, answered.

Something else? hello@penweir.com

Can I buy Penweir today?

Not yet. Penweir is in development. You can request early access now: you help shape the first release, and when it ships you get a 14-day evaluation licence before you decide to buy.

Where does Penweir run?

Inside your own network. Penweir will ship as a release package with Docker Compose; Business and Enterprise also include a Helm chart for Kubernetes. It needs no outbound connection to us: no licence server, no telemetry, no calls home.

Does Penweir store our data?

No. Payloads pass through memory and are gone once the response returns. The audit log records metadata only: which pipeline ran, from which source, how many fields were sent or redacted, which model answered and how long it took. Never the content itself.

Can redaction miss something?

Yes. No detector catches every name or number, and we won't pretend otherwise. That is why Penweir is designed around an allowlist: only fields you name leave your network, everything else is dropped before any detector runs. Steps that fail hold the request instead of passing it, and sensitive requests can be routed to a model you run yourself.

Which models are supported?

Anything with an adapter. Ollama, vLLM and local GGUF models on your own hardware; OpenAI-compatible endpoints, Anthropic, Azure and Mistral in the cloud. Policies decide per request which model sees which fields, and adapters are plugins, so you can add your own.

Can we write our own plugins?

Yes. Connectors, pipeline steps and model adapters all implement the same versioned plugin contract the built-in ones use. Write one, deploy it next to Penweir and reference it from your pipeline YAML.

What happens after the support period?

You keep running the version you have, for as long as you like. Updates and security patches stop unless you take optional maintenance: 20% of the licence price per year.

Do you sign a data processing agreement?

Penweir runs inside your network and we never receive your data, so in most setups there is nothing for us to process. Enterprise includes a DPA and a data-flow description for your security and legal review. On other tiers, ask us and we will walk your team through it.

Flow, on your terms

Hold the line.

A one-time licence, deployed inside your own network. Your data never needs to leave to be useful.