Naar hoofdinhoud
Development · Odoo App Store

Een module publiceren in de Odoo App Store: de geschreven regels en de regels die je leert na 117 publicaties

Wij hebben 105 modules gepubliceerd in de Odoo App Store, in Odoo 19, 18 en 17. Dit is wat de documentatie zegt, wat ze niet zegt, en het proces dat wij volgen zodat een publicatie in één keer goed gaat en over drie versies bijgehouden blijft.

Scherm Apps van Odoo met de lijst van geïnstalleerde modules in een echte backend

De Odoo App Store is het enige kanaal waar een Odoo-module zonder verkoper wordt verkocht: iemand zoekt de module, koopt hem en installeert hem. Publiceren is gratis en iedereen kan het met een git-repository en een goed geschreven manifest. Wat nergens staat, is waarom een publicatie dagen op zich laat wachten, waarom een beschrijving er kapot uitziet, of waarom een module die op jouw machine compileert zich niet laat installeren in de Odoo van de koper. Dit hebben wij geleerd door 105 modules te publiceren en ze bij te houden in Odoo 19, 18 en 17.

Kernidee: de App Store installeert je module niet om hem te controleren. Hij leest het manifest, de beschrijving en de afbeeldingen, en publiceert. Als de module zich niet installeert in een echte Odoo, ontdekt de eerste koper dat. Alle discipline rond publiceren komt erop neer dat te voorkomen.

De geschreven regels: repository, branch en manifest

Het mechanisme is simpel en je volgt het best letterlijk. Je registreert een git-repository in je account op apps.odoo.com; de App Store scant die en publiceert elke module die hij erin vindt. De branch is belangrijk: de branch 19.0 voedt de producten voor Odoo 19, 18.0 die voor 18 en 17.0 die voor 17. Dezelfde technische naam in de drie branches is één productpagina met drie versies, en dat wil je: één URL, één pagina met reviews, drie downloadknoppen. Verschillende technische namen per versie zijn drie productpagina's die het bezoek onder elkaar verdelen.

Uit het manifest leest en toont de App Store het volgende:

  • name, summary en category: de titel van de productpagina, de regel eronder en waar die in de catalogus verschijnt. De naam moet uniek zijn in de hele store.
  • version met het voorvoegsel van de Odoo-versie (19.0.1.0.0): zonder dat voorvoegsel weet de productpagina niet bij welke Odoo hij hoort.
  • license: OPL-1 voor betaalde modules, LGPL-3 of AGPL-3 voor gratis modules. Een betaalde module met een vrije licentie is een cadeau dat je niet wilde geven.
  • price en currency: de prijs van de productpagina. Odoo houdt een deel van elke verkoop in en betaalt je de rest uit; de verdeling staat in de voorwaarden van de App Store.
  • images: de lijst met schermafbeeldingen, te beginnen met de banner die in de catalogus te zien is. Zonder banner verschijnt de productpagina met een grijs gat naast die van anderen die er wel een hebben.
  • static/description/index.html: de lange beschrijving. HTML zonder scripts, relatieve afbeeldingen binnen de module en, uit ervaring, ASCII-tekens: een verkeerd gecodeerd accent of typografische aanhalingstekens kunnen de productpagina met kapotte symbolen achterlaten die je pas ziet als hij gepubliceerd is.

De regels die nergens staan

De hercontrole bepaalt het tempo, en je forceert hem niet met een zip

Na een push verandert de productpagina niet meteen: de App Store scant de repository opnieuw in zijn eigen tempo, en dat kan uren of dagen duren. De verleiding is om met de hand een zip te uploaden om het te "versnellen". Doe dat niet: een met de hand geüploade versie en een uit de repository gescande versie gaan slecht samen, en je krijgt een productpagina waarvan je niet weet waar hij vandaan komt. De regel die wij volgen is één enkele bron, de repository, en geduld. Als je wilt dat de scan een wijziging oppikt, verhoog dan het versienummer in het manifest: een inhoudelijke wijziging met hetzelfde versienummer wordt soms niet opgepikt.

Compileren is niet installeren

De scan installeert de module niet. Dat het manifest geldig is en de code zonder fouten importeert, betekent niet dat de module zich installeert. In Odoo 19 is dit extra verraderlijk geworden: de beveiligingsgroepen hebben een ander model gekregen (res.groups.privilege), ir.cron accepteert het veld numbercall niet meer, en lijstweergaven heten list, niet tree. Een module die voor 17 is geschreven, komt zonder klachten door de scan van 19 en faalt bij de installatie in de Odoo van de koper. We beschrijven het uitgebreid in waarom een Odoo 19-module compileert maar zich niet installeert.

Drie versies zijn drie modules die op elkaar lijken

Dezelfde module bijhouden in 19, 18 en 17 is niet hetzelfde als de map naar drie branches kopiëren. Elke versie heeft zijn eigen API-verschillen, en de enige manier om te weten dat alle drie werken, is ze installeren in een echte Odoo van elke versie. Wij doen dat op Odoo.sh: één build per versie, schone installatie, tests, en pas daarna de push naar de branch die de App Store scant. En met Odoo 20, dat in september 2026 uitkwam, is het proces hetzelfde met één branch erbij. Een module die alleen is getest in de versie waarvoor hij is geschreven, is een module die drie keer wordt verkocht en twee keer faalt.

Het proces dat wij volgen, in volgorde

  1. Een unieke en definitieve technische naam. Zoek hem op in de App Store voordat je de eerste regel schrijft; hem later wijzigen betekent de productpagina en de reviews kwijtraken.
  2. Een compleet manifest vanaf de eerste commit: versie met voorvoegsel, licentie, prijs, categorie, afbeeldingen, exacte dependencies.
  3. Schone installatie in een echte Odoo.sh van elke versie die gepubliceerd wordt, met groene tests. Zonder dit geen push.
  4. Beschrijving in ASCII met echte schermafbeeldingen van de geïnstalleerde module, geen mock-ups. De koper vergelijkt wat hij op de productpagina ziet met wat hij installeert.
  5. Push naar de versiebranch en wachten op de scan. Geen zips. Moet er iets gecorrigeerd worden, dan verhoog je de versie en wacht je opnieuw.
  6. De gepubliceerde productpagina controleren in alle drie de versies: banner, beschrijving zonder kapotte symbolen, prijs, downloadknop.

Wat publiceren niet voor je doet

Publiceren is niet verkopen. Een goed gemaakte productpagina verschijnt wanneer iemand precies naar dat probleem zoekt, en dat is alles. Wat ervoor zorgt dat hij geïnstalleerd wordt, is dat de module in één keer werkt, dat de beschrijving zegt wat hij wel en niet doet, en dat supportvragen beantwoord worden. Daarom behandelen wij elke gepubliceerde module als een product met onderhoud, niet als een geüpload bestand. En daarom is publiceren in de App Store, wanneer een softwarebedrijf ons om een connector voor zijn product vraagt, onderdeel van het werk en geen extraatje: het is waar zijn Odoo-gebruikers hem gaan zoeken.

Veelgestelde vragen

Hoe lang duurt het voordat een module verschijnt na de push?

Zo lang als de volgende scan van de repository duurt, en daar heb je geen controle over: dat kunnen uren of dagen zijn. Als er na een paar dagen niets veranderd is, controleer dan eerst of de branch de juiste is en verhoog het versienummer in het manifest; als allerlaatste redmiddel upload je met de hand een zip.

Kan dezelfde module voor Odoo 17, 18 en 19 in één productpagina worden gepubliceerd?

Ja, en dat is ook aan te raden: dezelfde technische naam in de branches 17.0, 18.0 en 19.0 van dezelfde repository levert één productpagina met de drie versies op. Elke branch moet echt in zijn eigen versie te installeren zijn; de App Store controleert dat niet voor je.

Welke licentie gebruik ik als de module betaald is?

OPL-1, de propriëtaire licentie van Odoo, die toestaat de module te verkopen en verbiedt hem door te verspreiden. Met LGPL-3 of AGPL-3 mag de koper hem vrij doorverspreiden, wat je wilt als hij gratis is en niet wilt als je ervoor betaald krijgt.

Nuttige links binnen FlexigoTech

De 105 gepubliceerde modulesDe volledige catalogus, per familie, in Odoo 19, 18 en 17Een connector voor jouw software, gepubliceerd in de App StoreVoor technologiepartners: bouwen, testen en publicerenEen Odoo 19-module compileert maar installeert nietDe API-valkuilen van 19 die de scan niet zietGroene tests en de connector faalt in productieWaarom de test die telt de echte installatie is

Heb je een module die je wilt publiceren, of een gepubliceerde module die niet verkoopt?

Wij vertellen je wat er in het manifest, de beschrijving of de installatie ontbreekt en hoe je hem naar alle drie de versies brengt. Mail naar comercial@flexigobe.com of bel +34 616 809 504.

Praat met een engineer