Skip to content

tuanle96/ordo

Ordo — Mobile-first client for Odoo Community Edition

License: AGPL-3.0 Odoo versions iOS Backend

The Odoo Community mobile experience, reimagined.

Native iOS. Schema-driven UI. One clean API across Odoo 17, 18, and 19.

HighlightsArchitectureQuick startRoadmap


Highlights

  • Native iOS, built for touch-first Odoo workflows
  • Schema-driven forms and lists, powered by real Odoo metadata
  • One normalized backend contract across Odoo 17, 18, and 19
  • Already shipped: auth, browse, detail, create/edit/delete, actions, chatter, offline-resilient cache, dynamic browse discovery from backend menu trees, and inline preview/export for loaded media/documents

Ordo is production-minded, but still evolving. Full offline sync, many2one stage-style status interactions, multi-company switching, and richer remote attachment handling are still follow-up work.

Current boundaries

  • Browse grouping is already shipped, but it is client-side grouping over flat list payloads, not backend aggregates.
  • Attachment preview/export is already shipped for bytes already loaded in record detail, but there is no backend download/proxy path for large files yet.
  • Read-only relation drilldown is already shipped for many2one rows and many2many chip grids when current payloads include usable comodel + relation IDs.
  • Statusbar tap-to-change is shipped only for a narrow action-backed two-state selection flow; many2one stage bars such as CRM stages remain read-only.
  • Offline behavior currently means cache + queued update/delete/action replay/management, not queued create replay or a full background sync/conflict engine.

Architecture

iOS App (SwiftUI)
    ↓ HTTPS / JWT
NestJS Middleware
    ↓ JSON-RPC
Odoo 17 / 18 / 19

Stack

  • iOS: SwiftUI, @Observable, async/await, Keychain, file cache
  • Backend: NestJS 11, TypeScript 5, Redis, class-validator
  • Testing: Jest, Supertest, Xcode / xcodebuild

Quick start

Requirements

  • Node.js 22 LTS
  • npm 10+
  • Xcode 15+
  • Docker (optional, for local Odoo validation)

Install

git clone https://github.com/tuanle96/ordo.git
cd ordo/backend
npm install
cp .env.example .env

Set the required values in .env:

JWT_ACCESS_SECRET=your-access-secret
JWT_REFRESH_SECRET=your-refresh-secret
JWT_ACCESS_EXPIRES_IN_SECONDS=900
JWT_REFRESH_EXPIRES_IN_SECONDS=604800
REDIS_URL=redis://127.0.0.1:6379
ODOO_REQUEST_TIMEOUT_MS=15000
ODOO_SESSION_TTL_SECONDS=1800

Run

Option A — Docker Compose (recommended):

cd ..  # from repo root
docker compose up --build

This starts both the backend and Redis automatically.

Option B — Local Node.js:

# Start Redis first (or use an existing instance)
npm run start:dev

API base URL:

http://localhost:38424/api/v1/mobile

Run the iOS app from ios/Ordo.xcodeproj, or build with:

xcodebuild -project ios/Ordo.xcodeproj \
  -scheme Ordo \
  -destination 'generic/platform=iOS Simulator' \
  build

Optional local Odoo stack:

cd odoo-instances
docker compose up -d --build

Roadmap

Next major areas:

  • wider iOS observation migration
  • barcode + inventory workflows
  • richer attachment/media flows
  • deeper offline sync
  • notifications, realtime, biometrics, multi-server support

For full details:

Contributing

PRs are welcome. Keep changes focused, run relevant validation, and use Conventional Commits. If you are onboarding support for a new Odoo app/module, start with docs/add-odoo-community-module-support.md.

License

Licensed under AGPL-3.0. If you modify and deploy Ordo as a network service, you must release the corresponding source code under AGPL-3.0.


Built with ❤️ for the Odoo Community

About

Ordo - Mobile-first client for Odoo Community Edition

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors