Tula

Tula is a Mac, iPad, and iPhone client for ERPNext. It reads the server's API directly and draws every screen with native controls; there is no web view anywhere in the app. The name is Sanskrit for a balance scale.

ERPNext's own web interface, Desk, is not built screen by screen. It is a generic renderer: each document type describes its own fields, layout, and list columns, and each report describes its own columns. Tula reads the same metadata and renders it the same way, so custom fields, custom document types, and reports added on the server appear in the app without an update.

A sales invoice in Tula on macOS

Tula is in development and is not on the App Store yet. The list below is what works now, not what is planned.

Read-only until you unlock it

Tula opens read-only. The part of the app that reads can only send GET requests, and only to a fixed list of Frappe's read APIs; it has no way to build any other kind of request.

Writing goes through a separate client that exists only while the lock in the toolbar is open. The lock is off at launch, closes again whenever the connection settings change, and is not offered in demo mode. Even with it open, the only writes possible are an enumerated list of the Frappe methods Desk itself calls, described under Editing below. For defense in depth, connect with an API key belonging to an ERPNext user who has read and report permissions only; then the server refuses a write even with the lock open.

Financial statements

Profit and Loss, Balance Sheet, Cash Flow, Trial Balance, and the General Ledger sit at the top of the sidebar, and on ⌘1 through ⌘5 on the Mac.

The cash flow statement by quarter, with the filter inspector open

Every other report

ERPNext ships hundreds of reports, and all of them run through the same renderer as the statements.

Lists, documents, and trees

Workspaces and search

The sidebar lists the server's own workspaces, so a module installed on the server appears there with no change to the app. A workspace shows its shortcuts, links, number cards, and dashboard charts.

⌘K or ⌘F opens the search bar, which mirrors Desk's: document types to go to, reports, and full-text document results, driven with ↑, ↓, and Return. ⌘[ and ⌘] go back and forward, and the Go menu keeps a history.

Editing

With the lock open, Tula does what Desk does, through the same server methods:

Taxes, pricing rules, and totals are the server's to compute. Tula does only the arithmetic that is safe to do locally, such as an amount from quantity and rate, and shows the server's figures once the document saves. Nothing is written offline.

Amending a cancelled sales invoice, with the save bar above the form

Staying current

Demo mode

Tula starts in demo mode, on bundled sample books and with no network access, so it can be explored before it is pointed at a server. To connect, turn demo mode off in Settings and enter the server's address with an API key and secret, which ERPNext issues under User → Settings → API Access.

How it is built

Requirements

macOS 14.4 or later, or iOS and iPadOS 17.4 or later. Tula needs an ERPNext server to connect to, over HTTPS (plain HTTP is allowed on the local network, for development servers), and an API key and secret for a user on it.

Support

Tula is free and open source under the Apache 2.0 licence. Please discuss and register issues on GitHub.