Ultimate POS vs Odoo 18 Community: Which One Is Best for Main Street Retail?

  • Odoo measured here
  • Ultimate POS not deployed
  • 536 MiB, not 4 GB
  • 6 September 2026
  • 11 min read

Published 6 September 2026. A note on what is measured here and what is not, because it changes how you should read the numbers: we deployed Odoo 18 Community on our own server and measured it. We have not deployed Ultimate POS — it is a paid product we do not own a licence for, and we are not going to invent benchmarks for software we have never run. Where a figure is ours, it says so. Where it comes from the vendor’s own specification, it says that too.

1. The Verdict, Before the Detail

If you run a store and sell things across a counter, Ultimate POS is the better fit. It is a standalone PHP and MySQL application that does one job. It installs on ordinary shared-grade hosting, it does not carry an ERP behind it, and a single-location shop or a small chain under roughly half a million dollars of annual turnover will never touch the ceiling of what it does.

If your business has a factory floor, several warehouses that move stock between them, or an accounting department that wants the ledger in the same system as the till, Odoo 18 is the better fit. The point of sale is one module inside an ERP; that is its weakness at a counter and its entire advantage everywhere else.

Both are self-hosted, both remove the monthly per-register subscription, and both run comfortably on a cheap VPS. The choice is not about cost or performance. It is about whether you need an ERP.

2. What You Are Buying, and What You Own Afterwards

Ultimate POSOdoo 18 Community
Licence modelOne-time purchase on a marketplace, per installationLGPLv3, free, no purchase
Recurring costNone for the licence; paid updates after the support windowNone
Source codeYours, readable, but not redistributableYours, readable, redistributable under the licence
If the author stops maintaining itYou keep a working copy; nobody publishes patchesA foundation and a large community continue
Vendor lock-inNone technically; your data is in MySQLNone technically; your data is in PostgreSQL
Warning

we are not quoting a purchase price. Marketplace prices change, regular and extended licences differ in what they permit, and we have not bought this one. Check the listing yourself, and read which licence tier you actually need — the cheaper tier usually forbids charging your own customers for access to the installation, which matters if you intend to run it for several shops.

The difference that outlasts the price is the fourth row. A marketplace product depends on one author continuing to publish updates; when that stops, your installation keeps working but stops receiving security patches. An LGPLv3 project with an ecosystem behind it does not have that single point of failure. Neither situation is an emergency — but one of them has a clock on it.

3. What They Consume — With the Honest Asterisk

This is the section where most comparisons quote a vendor’s “minimum requirements” page as if it were a measurement. Here is what we actually measured, and what we did not.

Odoo 18 Community — measured by usResult
Odoo + PostgreSQL, single process237 MiB (129 + 108)
Odoo + PostgreSQL, 3 workers536 MiB (423 + 113)
Installing the POS modules77 s, 67 modules
Database after install58 MB, 509 tables
Docker image on disk2.96 GB

Odoo 18 with a working point of sale used 536 MiB of RAM, not four gigabytes. That figure is widely repeated and it is wrong for this workload — it comes from sizing guidance for multi-user ERP deployments with dozens of modules, not a till with three worker processes. We ran it, on a 2 vCPU VPS that was already serving five other websites, and wrote down what the process actually used.

For Ultimate POS we have no equivalent number, because we have not run it. What we can say is architectural and verifiable: it is a PHP application on MySQL, served by PHP-FPM, which means its memory profile is the profile of a PHP-FPM pool. On this same server we measured our own PHP-FPM pool, serving a WordPress site, at 54 MiB resident across its workers, and a minimal Laravel route at 190.8 requests per second per core. A PHP point of sale sits somewhere in that territory — comfortably under Odoo, on the order of one to two hundred megabytes rather than five hundred.

Measured

treat the previous paragraph as an informed estimate, not a benchmark. We are telling you the shape of the answer from measurements of comparable software on identical hardware, because the alternative is either silence or a number we made up. The honest summary is that both fit on a $9 VPS and neither is the reason to choose.

Which leads to the point that matters more than either number: on a modern VPS, resource footprint is not a deciding factor between these two. A 2 GB server runs either one with room left over. If someone tells you to pick the PHP application because Odoo is heavy, ask them what they measured.

4. Receipt Printing: Two Genuinely Different Designs

This is where the two products stop being interchangeable, and it is worth understanding before you buy a printer.

The browser print dialogue

A PHP point of sale typically renders the receipt as an HTML page and hands it to the browser’s print function. The printer is whatever the operating system on the till machine has installed. Nothing on your server talks to the printer at all.

  • It works with any printer the computer can already print to, including a USB printer with a normal driver. No network configuration, no printer IP.
  • It is the same setup a cashier already understands. If it prints in Word, it prints here.
  • It costs a click. Unless the browser is configured for silent printing, someone confirms a dialogue on every sale — which at forty transactions an hour is forty interruptions.
  • Layout is at the mercy of the browser. Margins, scaling and page breaks are CSS problems, and thermal roll widths are unforgiving.

The direct socket

Odoo’s ePOS support sends ESC/POS commands to a network printer over its own IP address. No browser dialogue, no operating system driver, no print queue — the application opens a socket and writes bytes the printer understands.

  • Nothing to click. The receipt appears as the sale completes.
  • Any till on the network can print to it, because the printer is a network device rather than a peripheral attached to one computer.
  • It restricts you to ESC/POS network printers. A USB-only printer will not work this way; you need an Ethernet model, which is the reason the Epson TM-T88 family shows up in every Odoo retail specification.
  • Encoding becomes your problem. ESC/POS printers hold a code page rather than Unicode. Accented product names print as wrong glyphs until the code page matches your language — the single most common receipt fault, and it looks like a software bug when it is a printer setting.

The practical rule: if you already own a USB receipt printer and one till, the browser route is less work. If you have two or more registers, or you want the receipt to appear without a human confirming a dialogue forty times an hour, the socket route is worth the Ethernet printer.

5. What Happens When the Internet Drops

Every retail comparison claims “offline mode” and almost none explain what is actually offline. There are three different things hiding under that phrase, and only one of them matters at 5pm on a Saturday.

What breaksWhat you lose
Your internet connection to the outside worldCard processing, and nothing else — if the server is in the shop
The network between the till and the serverEverything, unless the till caches sales locally
The server itselfEverything, in both designs

Odoo’s point of sale keeps a local copy of the product catalogue in the browser and queues completed orders when the connection to the server drops, syncing them when it returns. That covers the second row: the shop keeps ringing sales through a network hiccup. A PHP point of sale that renders each page server-side does not, by design — every screen is a request, and no request means no screen.

Warning

neither design survives the server dying, and hosting your point of sale on a VPS in another country means an internet outage at the shop is a server outage for the till. If continuity through a broadband failure matters to you, the server belongs in the building — a small machine in the back office, backed up off-site. That is an architecture decision, not a product choice, and it applies equally to both of these.

6. Barcode Scanning, and Why Latency Is Not a Product Feature

A USB barcode scanner in keyboard-wedge mode types the digits and sends Enter. It is not integrated with anything; the operating system sees a keyboard. Both products receive the scan identically, and neither has a “scanner driver” to be faster or slower at.

What determines whether scanning feels instant is the round trip after the Enter — the product lookup. Which means the answer is not in the software comparison at all:

  • Where the server is. A lookup against a machine in the back office is a millisecond. The same lookup against a VPS three thousand kilometres away is thirty to eighty, before the application does any work.
  • Whether the catalogue is cached at the till. Odoo’s POS loads products into the browser at session start, so a scan resolves without touching the network. A server-rendered page cannot do that.
  • Whether the barcode column is indexed. On a catalogue of thirty thousand items this is the difference between instant and a visible pause, in either product, and it is a database question.

We have not measured scan-to-line latency for either product, so we are not going to publish a table of milliseconds. The three bullets above are what actually move that number, and any of them will dominate the difference between the two applications.

7. Where Each One Stops Being the Right Answer

Choose the PHP point of sale when

  • You sell finished goods over a counter and you buy them in finished.
  • One to five registers, one or a few locations.
  • You want the whole thing on modest hosting with a familiar LAMP stack, and whoever maintains it knows PHP and MySQL rather than Python and PostgreSQL.
  • Your accounting happens in separate software and you are content for it to stay there.

Choose Odoo when

  • You manufacture or assemble anything, so a sale has to decrement components rather than a finished item.
  • Stock moves between warehouses and someone needs to see it in transit.
  • You want purchasing, invoicing and the ledger in the same database as the sales.
  • You need the till to keep working through a network interruption without a second machine.
  • You expect to add modules over years and would rather not integrate five separate products.

The trap in this decision is buying the ERP for a shop that will never use it. Sixty-seven modules loaded to ring up a sandwich is not free — it is more surface to update, more to learn, and more that can break in a way your local IT person has not seen before. Conversely, outgrowing a standalone point of sale means a migration, and migrations of live inventory are the expensive kind.

If you are between the two, the question that resolves it fastest is: does anything you sell get made or assembled from parts you also track? If yes, Odoo. If no, you almost certainly do not need it.

8. What Both of Them Cost You That Neither Advertises

Removing the subscription does not remove the work; it moves it. Whichever you pick, someone owns these:

  • Updates. Security patches do not install themselves, and a point of sale handles payment flows.
  • Backups that have been restored. An untested backup is a belief, not a safeguard. Restore one and compare a hash.
  • Certificate renewal. Automated, until the day the automation breaks quietly and the till shows a browser warning during opening hours.
  • Someone to call. This is the row hosted vendors are actually selling, and it is a fair thing to pay for.

Budget an hour a month or buy that hour from someone. A self-hosted till maintained by nobody is worse than a subscription, and we would rather say so than sell you a deployment you will resent in a year.

9. Frequently Asked Questions

Does Odoo 18 really need 4 GB of RAM for a point of sale?

No. We measured 536 MiB with three worker processes and PostgreSQL included, after installing the point-of-sale, stock and sales modules on a 2 vCPU server. The four-gigabyte figure comes from sizing guidance for multi-user ERP deployments, not a till. A 2 GB VPS runs it with room left over.

Is Ultimate POS lighter than Odoo?

Almost certainly, though we have not measured it — it is a PHP and MySQL application and we do not own a licence. On identical hardware our PHP-FPM pool used 54 MiB against Odoo’s 536 MiB with workers. Both fit comfortably on a small VPS, so footprint should not decide this for you.

Which one keeps working if the internet goes down?

Odoo’s point of sale caches the catalogue in the browser and queues orders through a network interruption. A server-rendered PHP application cannot, since every screen is a request. Neither survives the server itself failing, which is the argument for hosting it in the shop rather than in a distant data centre.

Can I print receipts without clicking a dialogue every sale?

With Odoo’s ePOS direct socket printing, yes — it writes ESC/POS commands to a network printer’s IP and the receipt appears as the sale completes. Browser-based printing needs either a confirmation click or a browser configured for silent printing, which is forty interruptions across a busy hour.

When is a full ERP the wrong choice for a store?

When nothing you sell is made or assembled from parts you also track. Sixty-seven modules loaded to ring up a sandwich means more to update, more to learn and more that can break unfamiliarly. If your stock arrives finished and leaves finished, a standalone point of sale is the smaller, more maintainable answer.

10. The Short Version

  • Counter retail, finished goods, under a few registers: the standalone PHP point of sale.
  • Manufacturing, multi-warehouse, or ledger in the same database: Odoo.
  • Odoo used 536 MiB with three workers on our server, not 4 GB. Footprint decides nothing here.
  • Direct socket printing needs an Ethernet printer and removes a click from every sale.
  • Neither removes maintenance. Budget the hour or buy it.

For the full deployment we measured, see our complete Odoo 18 Docker deployment guide, which includes the compose file, the nginx configuration and the worker setting that decides whether the WebSocket port exists at all. If you would rather have it delivered than built, our turnkey retail deployment service covers exactly this stack on your own hardware.