Get started

Set up Ekwo for Luxembourg

Two ways in, and both end the same way: the rules of Luxembourg installed in a database you own.

Run it yourself

Free, for ever. One command on your own Supabase project applies the schema, installs the Luxembourg pack and creates your first company. Nothing is gated.

npx ekwo-os init --country LU

It asks for the rest as it goes: the connection to your project, the chart of accounts where there is a choice, your organisation and your first administrator.

Read the installation guide

Get started with us

Leave an address and we get back to you to set it up together — on your own project, or on the hosted edition, operated for you.

Country

LuxembourgAnother country?

You are

This form collects your address and what else you choose to fill in: your company, your country, who you are and your message. Controller: Ekwo (Karuna Co OÜ). Used only to reply to you (Art. 6(1)(b) GDPR), through our site host acting as processor, kept 24 months at most, never sold. To access, correct or erase, ask from your Ekwo Cloud account. You may complain to your data protection authority.

Step by step

The same path as text: every command with Luxembourg already on it, and the codes a first invoice is written with. An AI assistant helping you reads the same text as Markdown, at /countries/lu/set-up.md.

Ekwo OS is open source software for keeping double-entry books in a database you own. This page is generated from the Luxembourg pack, version 1.9.0; every code on it is read from the pack.

The Luxembourg pack is community: contributed, and reviewed by nobody.

Ekwo is software, not an accountant and not tax advice: a pack is a reading of the rules at the date of its version, and it can be wrong for your situation. Have a qualified professional in Luxembourg check your set-up and your first declarations. See what Ekwo is, and what it is not.

1. What you need

  • A Supabase project of your own. The free plan is enough to start; Ekwo does not create it, pay for it or have access to it.
  • From its dashboard: the connection string (Connect → Session pooler), the Project URL and the service_role key (Project Settings → API). The key is used once, to create your first administrator, and is written nowhere. The anon (publishable) key, on the same page, is what you sign in with afterwards.
  • Node 20 or later on your machine. Nothing else: no Supabase CLI, no Docker, no clone.

2. Install

One command. It asks for the rest as it goes.

npx ekwo-os init --country LU
  • One chart of accounts: PCN — plan comptable normalisé, 1026 accounts.
  • The books can be kept in fr, de, en; the installer asks. Without a terminal, pass --language <code>.
  • The Déclaration périodique de TVA (eCDF) is filed on one of these cadences: month, quarter. Pass --vat-period <cadence> to set yours.
  • A financial year follows the calendar unless you pass --fiscal-year-start YYYY-MM-DD.

The same, with no question asked — every value your own:

npx ekwo-os init \
  --country LU \
  --language fr \
  --vat-period <month|quarter> \
  --db-url "postgresql://postgres.<ref>:<password>@<pooler host>:5432/postgres" \
  --supabase-url "https://<ref>.supabase.co" \
  --service-role-key "$SUPABASE_SERVICE_ROLE_KEY" \
  --org "Your Organisation" --company "Your Company" \
  --admin-email "you@example.com" \
  --yes

3. Before you go live

Four settings of your project no installer can reach: turn off self sign-up, keep two administrators, keep the service_role key off every other machine, and read the disclaimer. init prints them; the installation guide explains each.

4. A first invoice

Sign in as the administrator you just created, pick the company, and write a draft. --dry-run shows the entry the database would write, and writes nothing; post books it.

ekwo login --supabase-url https://<ref>.supabase.co --anon-key <publishable key> --email you@example.com
ekwo use "Your Company"
ekwo contact add "First Customer" --country LU --ref customer-1
ekwo doc new --contact "First Customer" --ref invoice-1 --line "name=Consulting,price=1000.00,account=7061,tax=LU-S-17"
ekwo post invoice-1 --dry-run
ekwo post invoice-1

A line names its account and its tax by code, never by rate. 7061 is the account the pack names for sales; the chart may carry a closer one for what you sell — services, a reduced rate — and list_accounts lists them.

What the invoice says about your company — its address, its VAT number — comes from the company’s profile, which the MCP tool update_company_profile fills; ekwo init sets only the name.

The domestic sale taxes the pack carries today. Which one a sale carries is a question about that sale, for you or your accountant: the list is the pack’s, not advice.

Tax code Name Rate
LU-S-17 Vente 17 % — taux normal 17 %
LU-S-14 Vente 14 % — taux intermédiaire 14 %
LU-S-08 Vente 8 % — taux réduit 8 %
LU-S-03 Vente 3 % — taux super-réduit 3 %

5. With an AI assistant

The MCP server lets an assistant keep the books as you, under your own row level security, and never with the service_role key. Configuring it, and what an assistant must and must not do.

What the Luxembourg pack carries

  • Charts of accounts: PCN — plan comptable normalisé (1026).
  • 35 taxes, at 0 %, 3 %, 7 %, 8 %, 13 %, 14 %, 16 %, 17 %.
  • The Déclaration périodique de TVA (eCDF) (LU-VAT-PERIODIC), 162 boxes, filed month, quarter.
  • Electronic invoices as peppol-bis-3.
  • Financial statements: Bilan abrégé (eCDF), Compte de profits et pertes abrégé (eCDF).

What it does not do

  • No library of this repository writes the file of the LU-VAT-PERIODIC yet: the return is computed and frozen here, and typed on the administration’s portal.
  • No library of this repository reads a mt940 bank statement yet.
  • Nothing is sent to an administration, a Peppol network or a bank by the open source software: transmission is yours, or an operator’s you appoint.
  • What the pack leaves out on purpose is in its README.