Invoice 2026-114 for jan.devries@acme.nl, IBAN NL91 ABNA 0417 1643 00, total €4,280.00.
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.
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.
Hi, this is Sanne Bakker, my BSN is 123456782 and my order hasn't arrived.
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.
01
Connect
Plug in Odoo, mailboxes, databases and APIs through one dashboard.
OdooIMAPPostgresREST02
Compose
Chain steps: redact, filter, classify, summarise. Reorder by drag.
redact → allow → classify03
Control
Policies decide which model sees which field. Sensitive data can stay on a local model.
sensitivity == "high"
→ local/ollama04
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.
Pipelines /
invoice-summary live v12
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
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
Audit log
Metadata only. Payloads are never written.
| Time | Pipeline | Source | Fields sent | Redacted | Model | Latency | Status |
|---|---|---|---|---|---|---|---|
| 09:41:07 | invoice-summary | odoo | 4 | 1 | cloud/default | 212 ms | passed |
| 09:41:02 | support-triage | imap | 6 | 2 | cloud/default | 388 ms | passed |
| 09:40:55 | invoice-summary | odoo | 4 | 1 | local/ollama | 604 ms | passed |
| 09:40:41 | crm-enrich | postgres | 9 | 3 | local/ollama | 731 ms | passed |
| 09:40:33 | support-triage | imap | 0 | 0 | — | 4 ms | held · no route |
| 09:40:19 | invoice-summary | odoo | 4 | 1 | cloud/default | 198 ms | passed |
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.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
{
"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
{
"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
Business
RecommendedFor companies running Penweir in production.
€3,995
one-time · launch pricing · excl. VAT
Request early access- 1 production + 1 staging environment
- Everything in Essential, plus a Helm chart
- Ready-made Grafana and Prometheus dashboards
- Updates and security patches for 12 months
- Email support, reply within 2 business days, for 3 months
- 4 hours of remote onboarding
- Architecture overview for your security review
Enterprise
Fitted to youFor 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.
- 01
Tell us your setup
Email us which systems and models you want to connect. One paragraph is enough.
- 02
Shape the first release
We share progress and builds and ask for your feedback. No payment, no obligation.
- 03
Evaluate for 14 days
When version 1 ships, you get a full evaluation licence for one non-production environment.
- 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
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.