Open source data infrastructure for accounting, finance and sustainability

Accounting, finance, tax, sustainability and your ERP, set free.

Every business on earth keeps books. Ekwo is building the open source infrastructure they are kept on — in a database you own, under rules anyone can read, with tools for you and for your accountant.

AI at the keyboard. You and your accountant stay in control.

Already using Claude? Try it on your own books

Works with the model you choose

  • ChatGPT
  • Claude
  • DeepSeek
  • Gemini
  • Kimi
  • Mistral
  • Qwen
  • any MCP client

Names and logos belong to their owners; Ekwo is not affiliated with them.

Everywhere

Free and independent data infrastructure, in every country of the world.

No business, anywhere, should have to rent the right to keep its own books. Ekwo does not replace the accountant: it gives businesses and their accountants open schemas, the rules of each country as data, and the tools to work on them. It is written country by country, by the people who know the rules of each one — accountants, tax advisers, developers — and given back to everyone. 44 countries today. The rest of the world is open, and it is yours to write.

A business is data, in every country.

The countries Ekwo has a pack for41 of 173 countries have a country pack in this repository. Every other country links to a page that says where it stands. The same information is listed in text below the map.Afghanistan — not yet, see where it standsAlbania — not yet, see where it standsAlgeria — not yet, see where it standsAngola — not yet, see where it standsArgentina — not yet, see where it standsArmenia — not yet, see where it standsAustralia — communityAustria — communityAzerbaijan — not yet, see where it standsBahamas — not yet, see where it standsBangladesh — not yet, see where it standsBelarus — not yet, see where it standsBelgium — maintainedBelize — not yet, see where it standsBénin — communityBhutan — not yet, see where it standsBolivia — not yet, see where it standsBosnia & Herzegovina — not yet, see where it standsBotswana — not yet, see where it standsBrazil — not yet, see where it standsBrunei — not yet, see where it standsBulgaria — not yet, see where it standsBurkina Faso — communityBurundi — not yet, see where it standsCambodia — not yet, see where it standsCameroun — communityCanada — not yet, see where it standsCentrafrique — communityChile — not yet, see where it standsChina — not yet, see where it standsColombia — not yet, see where it standsCongo — communityCosta Rica — not yet, see where it standsCôte d’Ivoire — communityCroatia — not yet, see where it standsCuba — not yet, see where it standsCyprus — not yet, see where it standsCzechia — not yet, see where it standsDenmark — not yet, see where it standsDjibouti — not yet, see where it standsDominican Republic — not yet, see where it standsEcuador — not yet, see where it standsEgypt — not yet, see where it standsEl Salvador — not yet, see where it standsEritrea — not yet, see where it standsEspaña — communityEstonia — communityEswatini — not yet, see where it standsEthiopia — not yet, see where it standsFalkland Islands — not yet, see where it standsFiji — not yet, see where it standsFinland — not yet, see where it standsFrance — maintainedFrench Southern Territories — not yet, see where it standsGabon — communityGambia — not yet, see where it standsGeorgia — not yet, see where it standsGermany — communityGhana — not yet, see where it standsGreece — not yet, see where it standsGreenland — not yet, see where it standsGuatemala — not yet, see where it standsGuinée — communityGuinée équatoriale — communityGuinée-Bissau — communityGuyana — not yet, see where it standsHaiti — not yet, see where it standsHonduras — not yet, see where it standsHungary — not yet, see where it standsIceland — not yet, see where it standsIndia — not yet, see where it standsIndonesia — not yet, see where it standsIran — not yet, see where it standsIraq — not yet, see where it standsIreland — communityIsrael — not yet, see where it standsItalia — communityJamaica — not yet, see where it standsJordan — not yet, see where it standsKazakhstan — not yet, see where it standsKenya — not yet, see where it standsKuwait — not yet, see where it standsKyrgyzstan — not yet, see where it standsLaos — not yet, see where it standsLatvia — not yet, see where it standsLebanon — not yet, see where it standsLesotho — not yet, see where it standsLiberia — not yet, see where it standsLibya — not yet, see where it standsLithuania — not yet, see where it standsLuxembourg — communityMadagascar — not yet, see where it standsMalawi — not yet, see where it standsMalaysia — not yet, see where it standsMali — communityMauritania — not yet, see where it standsMéxico — communityMoldova — not yet, see where it standsMongolia — not yet, see where it standsMontenegro — not yet, see where it standsMorocco — not yet, see where it standsMozambique — not yet, see where it standsMyanmar (Burma) — not yet, see where it standsNamibia — not yet, see where it standsNederland — communityNepal — not yet, see where it standsNew Caledonia — not yet, see where it standsNew Zealand — communityNicaragua — not yet, see where it standsNiger — communityNigeria — not yet, see where it standsNorth Korea — not yet, see where it standsNorth Macedonia — not yet, see where it standsNorway — not yet, see where it standsOman — not yet, see where it standsPakistan — not yet, see where it standsPalestinian Territories — not yet, see where it standsPanama — not yet, see where it standsPapua New Guinea — not yet, see where it standsParaguay — not yet, see where it standsPeru — not yet, see where it standsPhilippines — not yet, see where it standsPolska — communityPortugal — communityPuerto Rico — not yet, see where it standsQatar — not yet, see where it standsRépublique démocratique du Congo — communityRomania — not yet, see where it standsRussia — not yet, see where it standsRwanda — not yet, see where it standsSaudi Arabia — communitySchweiz — communitySénégal — communitySerbia — not yet, see where it standsSierra Leone — not yet, see where it standsSlovakia — not yet, see where it standsSlovenia — not yet, see where it standsSolomon Islands — not yet, see where it standsSomalia — not yet, see where it standsSouth Africa — not yet, see where it standsSouth Sudan — not yet, see where it standsSri Lanka — not yet, see where it standsSudan — not yet, see where it standsSuriname — not yet, see where it standsSweden — not yet, see where it standsSyria — not yet, see where it standsTajikistan — not yet, see where it standsTanzania — not yet, see where it standsTchad — communityTimor-Leste — not yet, see where it standsTogo — communityTrinidad & Tobago — not yet, see where it standsTunisia — not yet, see where it standsTürkiye — not yet, see where it standsTurkmenistan — not yet, see where it standsUganda — not yet, see where it standsUkraine — not yet, see where it standsUnited Arab Emirates — communityUnited Kingdom — communityUnited States — communityUruguay — not yet, see where it standsUzbekistan — not yet, see where it standsVanuatu — not yet, see where it standsVenezuela — not yet, see where it standsViệt Nam — communityWestern Sahara — not yet, see where it standsYemen — not yet, see where it standsZambia — not yet, see where it standsZimbabwe — not yet, see where it standsประเทศไทย — community대한민국 — community日本 — community臺灣 — community
44 countries written132 open — yours to write

How it works: the rules of a country are files, not code — a chart of accounts, its taxes, the boxes of its return, its financial statements, the sentences its law puts on an invoice. An accountant can read them, a contributor can propose them, a test can prove them. Adding a country touches no engine. Write the pack for your country

A country that levies no value added tax at all, with a tax that follows the territory of the parties.

A country outside the common system of VAT, and one inside it, from the same engine.

Several charts of accounts in one country — for companies, and for non-profits.

Amounts carry the decimals of their currency rather than assuming cents, and the rounding method of their country.

Exchange differences booked to the accounts the pack names.

Charts and labels in 14 languages, translated in the packs themselves.

EN 16931 and Peppol where they apply, and nothing where they do not.

No country, currency or language anywhere in the code — a check in continuous integration refuses one.

What you get

Six things a business should never have to rent.

Freedom

Free and open source. Read it, run it, change it, and take it with you. The core is AGPL-3.0 and the format libraries are MIT, so what is built on it stays open.

No lock-in

It installs on a database you own — an ordinary Postgres — and your books leave whole, as an open archive, whenever you want them to. It keeps working whoever disappears.

Your data stays yours

The books live in your own database, not on somebody else’s servers. You hold the keys, and you decide who reads them.

The rules, in the open

The rules each country pack encodes are published, sourced to the law and dated — charts of accounts, taxes, the boxes of the return, statutory statements and electronic invoicing — so that you and your accountant can check them. Every country page says when it was last checked.

Security

Access is enforced by the database itself, on every row of every table. A posted entry cannot be altered. Every change leaves an audit trail.

Privacy

Your numbers are in your database and nowhere else. This site sets no cookie, loads nothing from anyone and serves its own typefaces. The hosted edition is your own instance.

Automation

The work that no longer needs typing.

An agent or a script calls the same functions a person does, with the same rights and under the same rules. Nothing has a private way in.

Electronic invoices, written and checked

A brick writes the Peppol BIS 3 or Factur-X file and validates it against the standard. Sending and receiving over the network is the operated edition — the file itself is yours either way.

Statements in, matched

camt.053, CODA and CFONB 120 import once however often you replay the file; a payment finds the invoice it settles by its reference.

Every report is one call away

Trial balance, aged balance, the VAT return and what is due when — for a person, a script or an agent, through the same functions.

From a PDF to a draft

Your model reads the supplier invoice and calls the same tools a person would: the contact, then the draft with its lines, accounts and taxes. The database works out the totals, and nothing is booked until somebody posts it. Ekwo carries no reader of its own and does not need one.

command line — ekwo
% ekwo doc new --contact "Marasi Consulting Services LLC" --date 2026-01-15 \ --line "name=Management consulting services — January engagement,quantity=1,price=10000.00,account=4010,tax=AE-S-SR"
INV-AE-SR-1 draft 10500.00 AED
% ekwo post INV-AE-SR-1 --dry-run
account debit credit
1100 10500.00
4010 10000.00
2100 500.00
balanced — nothing posted, --dry-run
% ekwo company export
manifest.json + data/*.jsonl — your books, yours to take

Replayed from the United Arab Emirates pack’s golden year.

agent — ekwo
Invoice Marasi Consulting Services LLC for 1 × Management consulting services — January engagement, and tell me what it does to this quarter's VAT.
Finding the customer.
% search_contacts { "query": "Marasi Consulting Services LLC" }
Marasi Consulting Services LLC · customer · AE
Drafting the invoice. Nothing is booked by a draft.
% create_document { "doc_type": "sale_invoice", "document_date": "2026-01-15", "lines": [{ "name": "Management consulting services — January engagement", "quantity": 1, "unit_price": "10000.00", "account_code": "4010", "tax_code": "AE-S-SR" }] }
INV-AE-SR-1 draft 10500.00 AED
This is the entry it would write:
account debit credit
1100 10500.00
4010 10000.00
2100 500.00
This books the invoice and cannot be undone. Post it?
y
% post_document { "document_id": "INV-AE-SR-1" }
posted · entry balanced · period open
And the declaration for 2026-Q1:
% vat_return { "period": "2026-Q1" }
box d1 108000.00
box d2 400.00
Booked 10500.00 AED to 1100, and box d2 of 2026-Q1 now reads 400.00.

The agent stops and asks before anything is booked. The figures are the United Arab Emirates pack’s golden year, to the cent.

claude code — ekwo
gather every PDF invoice in my local Drive folder and load them into the books
Search(pattern: "**/*.pdf", path: "~/Drive/Invoices")
Found 1 file
Ekwo reads no PDF, so I’ll read the invoice myself and draft what it says. A draft books nothing.
Read(~/Drive/Invoices/2026-01-18 Deira Office Supplies LLC.pdf)
Read PDF
Deira Office Supplies LLC, 2026-01-18: Office supplies and stationery, 3000.00 before tax.
ekwo - search_contacts (MCP)(query: "Deira Office Supplies LLC")
Deira Office Supplies LLC · supplier · AE
ekwo - create_document (MCP)(doc_type: "purchase_invoice", document_date: "2026-01-18", client_ref: "2026-01-18 Deira Office Supplies LLC.pdf", lines: [{ name: "Office supplies and stationery", unit_price: "3000.00", account_code: "6220", tax_code: "AE-P-SR" }])
draft · purchase_invoice · nothing booked
One draft. It carries the file name as its reference, so running this again drafts nothing twice. The PDF stays in your folder: this release has no tool that stores a file against a document.
I read it from the PDF, so check it against the file. Shall I post it?

Claude Code with the Ekwo MCP server. Claude reads the PDF; Ekwo extracts nothing from a file and stores no file from here — it keeps the draft and the rules. The invoice is from the United Arab Emirates pack’s golden year.

Example session. Commands and results are real output from this release.

Your model, your rights

Ekwo embeds no model and imposes none. It exposes its tools over the open Model Context Protocol and a command line a program can read, so an assistant works on the books with the rights of the person it acts for — never with a key of its own — and you can change your mind about which one.

Built on open foundations

Ekwo installs on your own Supabase project: your database, your keys, your bill. The schema is ordinary PostgreSQL, and the files it writes and reads are published standards rather than formats of its own.

Names and logos belong to their owners. Ekwo is not affiliated with any of them; compatibility is through the open Model Context Protocol and published standards.

Where it stands

countries
44countriesone pack each, written as data
languages
14languagescharts and labels translated in the packs
legal formats
15legal formatswritten or read, as independent libraries
tools an agent can call
56tools an agent can callthe same ones a person uses
texts of law cited
562texts of law citedeach with the day it was last opened

Everything a business needs, all free.

Free software under AGPL-3.0.

Accounting

Sales and invoices

Draft, number and post an invoice or a credit note under the numbering rule the country prescribes.

Purchases and suppliers

The same documents the other way round, with the tax recovered — or not — as the country says.

Contacts

Customers and suppliers, with their VAT number, the electronic address the pack names, and how each appears on a bank statement.

VAT, from the box to the filing

The return is computed from the books, frozen box by box, filed, and settled to the account the pack names.

Year-end close

Opening balances, closing the year into the accounts the country uses, and opening it again when you must.

Reports and statements

Trial balance, general ledger, aged balance, and the statutory statements of the country — one call each.

Electronic invoicing

Write and validate a Peppol BIS 3 or Factur-X invoice, with the sentences the country puts on it.

A command line, and an API

Every operation from a terminal or a script, with JSON output and exit codes a program can read.

A server for agents

The same operations exposed over the Model Context Protocol, under the rights of the person the agent acts for.

Finance

Bank and reconciliation

Import a statement, match a payment against what it settles, and let the reference do it for you.

Declarations

When each return is due, from the pack’s rule and the company’s cadence, for every company you keep — and a corrective once one has gone.

Fixed assets

Depreciation schedules and disposals, on the durations and conventions the country pack declares.

Budgets

A budget per year and per account, and the variance against what the books actually hold.

Many companies, one installation

A firm keeps forty clients in six countries as forty rows, each with its own chart, locks and pack.

Leave whenever you like

A company exports whole — books, declarations and the proof they were filed — and imports into another installation.

Sustainability

planned

Carbon, on the same ledger as money

A tonne of CO₂ accounted for as strictly as a euro: emission factors loaded as versioned, sourced data the way a country pack is, from the purchases already booked or from physical quantities, each tonne tied to the entry that justifies it.

How a module works

Digital assets

planned

Digital assets, as their own thing

Not one more bank account: wallets and venues, acquisition lots, fair value at the close, realised gains by the method the country allows — with the exchange exports read by format libraries, like every other file.

How a module works

Documents & signature

planned

Signing, in the open

A document, its signatories and where each of them stands, with the trail of proof written as somebody signs. Which level of signature a deed needs is the law of a country, so it is pack data; the qualified part is a trust provider you choose, the way the bank and the network already are.

How a module works

Accounting is where Ekwo starts. Everything else a business runs on comes as a module on the same books — each one free, each one in the open. How a module works

Two ways to run it

Own it, or have it operated.

On your own

Free, for ever. One command points it at your own Supabase project and it applies the schema, seeds the country rules and creates the first company. Nothing is gated.

Install Ekwo OS

Operated for you

The hosted edition, Ekwo Cloud: the web application and your own instance, run and watched for you. What is sold is the operating — the application and the models and agents it includes, bank connections, sending and receiving over Peppol, the channels to the administrations, backup and sync. It is infrastructure, and it keeps no one’s books: yours and your filings stay yours and your accountant’s. It never gates the core, and what comes back from a filing is yours.

Get started with us

A network, not a vendor

Bring your expertise.

No company can know the accounting rules of the world. A network can. Accountants and tax advisers review the pack for their country and put their name on it; developers write a format library, a bank parser or the module their clients need; translators make a chart of accounts readable in their language. A pack is reviewed when a named professional has read it against the law they apply — not when anybody says so.

Latest changes

Latest changes

Read from the repository at every build: the countries, the releases, what was added and what was fixed.

  1. release

    Ekwo OS 0.8.0 is released In the changelog

  2. feature

    A machine key reaches the API In the changelog

  3. feature

    The version of the schema, asked on its own In the changelog

  4. feature

    A financial statement asked for by kind In the changelog

  5. feature

    The schema of this release is 0.8.0, and the packages refuse an older database by name In the changelog

  6. feature

    The web application has a name: Ekwo Cloud, the hosted edition on ekwo.ai. In the changelog

  7. feature

    The contributor licence agreement is governed by the law of Estonia. In the changelog

  8. fix

    isServiceRoleKey() read no key in a browser. In the changelog

The data belongs to the business.

Read the manifesto