commcare nova

Reuse one list across every app in your Project

Keep the lists your apps share, facilities, districts, products, in data tables, and offer their values as answer choices.

Most apps lean on a list that isn't case data and isn't part of any one form: the facilities you work in, the districts they sit in, the products you hand out. Project data is where those lists live, as data tables you fill in once.

A data table belongs to the Project, not to the app you happen to have open. Every app in the Project reads the same tables and the same rows, so correcting a facility's name corrects it in all of them at once.

Ask Nova to make a shared table

When you describe a new app in chat, tell Nova when a list should be reusable or maintained in one place. Nova also proposes a data table when the same set of values serves more than one question, case-list value, or other app surface. A one-off list can stay directly on its question.

The table is part of the reviewed app design: its name, columns, value types, rows, and every place that will use it are checked together. Nothing changes in Project data while Nova is drafting or revising that design. Once the reviewed design is accepted, Nova creates the approved table before it starts building the app and keeps the table's stable identity for every reference.

Nova can reuse a table that already exists. Because changing one affects every app in the Project, Nova does not alter an existing table merely because its name looks suitable. It describes the Project-wide change and asks for your approval first. If construction later stops, an accepted table remains in Project data and the same build resumes against that table instead of creating a duplicate.

You can also ask Nova in chat, or an agent connected through MCP, to create, read, edit, reorder, replace, or remove Project data. The same access rules and app-reference checks used by the builder apply to those changes.

Open Project data

Project data sits in the builder's left sidebar, below the app structure. Open it from the expanded sidebar, from the icon rail when the sidebar is collapsed, or, on a phone, from the same panel the app structure opens in.

The workspace has its own address, so you can send a teammate a link that lands them straight on a table.

What a table is made of

A table has columns and rows. Each column carries three things:

  • A name people see. This is the heading you read while you work, and you can change it whenever a better word comes along.
  • A name used in exports. It's also the heading Nova looks for in a CSV, so changing it means every CSV you import from then on has to carry the new heading. Changing it needs admin access, and the table itself has one of these names too. The table's export tag appears on both the table list and the table itself, so you can verify the contract before sharing a CSV or integration.
  • A type of value: Text, Whole number, Decimal number, Date, Time, or Date and time.

Find and edit a row

Rows appear 50 at a time, with a search box that matches text in every column. Searching is how you find a row; paging through until it turns up is not.

Select a row and it opens in the properties panel on the right, where each value gets the control its column's type calls for, a date picker for a date, a clock field for a time. Nova preserves text exactly, including leading or trailing spaces and an intentionally empty piece of text. It also keeps that distinct from a value that was never present.

The row's properties include Move up and Move down. A column's properties use Move left and Move right. Save or discard an open value edit before moving that row or column. Reordering changes where it appears without changing its identity or any app reference.

Times and dates stay human-readable while you edit. Nova keeps the timezone and fractional seconds required by storage behind the clock control, so opening and saving a row does not change the moment, its precision, or its offset. If a column changes type and a date picker cannot display the old text, Nova shows that retained text beside the picker so you can copy it until you deliberately choose a replacement.

An unsaved row stays with the table if you close Properties, press Escape, open another row or column, or leave and come back. Nova marks retained drafts in the table and lists every draft or unresolved save/delete decision under Row work to review on the Data tables screen. The work stays in that builder tab until you save it or explicitly discard it.

If a teammate removes the row first, the same draft can be saved as a new row. If anyone removes the whole table, even while you are looking at another one , Nova keeps a read-only local row copy from the last version you could see. You can copy it before choosing Discard local copy. Recreating a table with the same name does not attach that old work to the new table. If your edit access changes, the retained text remains readable and copyable, and the discard action still removes only your local copy.

How much a table can hold

A table holds up to 5,000 rows and 8 MB of values, and a single CSV import can be up to 8 MB. Go past any of those and Nova tells you what it measured, the size or the row count it actually found, against the limit, rather than only that something was too big.

Replace every row from a CSV

You can replace a table's rows all at once by importing a CSV. Its headings have to match the table's export names exactly: one heading per column, none missing and none extra.

The import replaces every row in the table. It doesn't merge with what is already there, and it doesn't add to the end.

If a teammate changes the table after Nova checks your file, Replace pauses. Review the same file against the latest columns and row count, then confirm again. Nova never retries a whole-table replacement on its own.

When two people edit at once

If a teammate saves the same row while you have it open, Nova doesn't overwrite either version. It shows what is already saved and lets you reconcile your row against the table's current columns. New columns appear, values must fit any new column types, and values from removed columns stay visible until you copy what you need and acknowledge that those columns no longer exist. If their change was to a different row, your save goes through as usual.

If they delete the row, your draft remains available. You can save it as a new row, and Nova opens that new row for you. A failed save leaves the draft and the decision on screen.

Offer a table's values as answer choices

A single-select or multi-select question can take its choices from a data table instead of from a list you type out. Choose the table, the column whose value gets saved, and the column people read on screen.

Choose Add row rule when the question should offer only matching rows. For example, compare the table's District column with the district selected on an earlier question, so the next question offers only facilities in that district. The condition editor knows it is checking one row of this table: it offers that table's columns, fixed values, worker information, and eligible earlier form answers. It does not offer case data, Search answers, later questions, or an answer from a child or sibling repeating section.

When the earlier answer changes in Preview, the available choices update immediately. A selected value that the new row rule no longer offers is cleared, so the form cannot submit an answer hidden by its current filter.

Switching between a table and a typed-in list replaces the question's complete choice source. Nova opens the new source for editing and saves the switch only after that source is complete; cancelling leaves the current source unchanged.

Changes that other apps can block

Deleting a table, removing a column, and changing a column's type each need admin access, and Nova refuses them while any app in the Project still uses that table or column. An app sitting in the trash counts.

Before it makes the change, Nova names the apps that would break. Point those apps at something else first, then come back and make the change.

If Nova cannot check those references, the change stays disabled and offers Try again. A failed check never claims that no apps use the table. If Nova knows an app still uses the table but cannot load that app's name, the change stays blocked and offers Check references again.

If the table changes while that confirmation is open, Nova refreshes the table and checks its app references again before you can confirm the change.

What happens to a table when you publish

A table travels with the app it is read by, whichever way the app leaves Nova:

  • A downloadable app carries its tables inside the file, so a device that installed it has them offline.
  • Publishing to CommCare HQ puts them on the project space before the app goes, and replaces their rows with the rows in Nova every time you publish. Anything edited on CommCare HQ is overwritten, so keep the values here.
  • The CommCare HQ app file comes as a zip with a lookup-tables.xlsx beside it, for uploading on the project's Lookup Tables page.

Two things worth knowing before you rename an export tag. CommCare HQ finds a table by that tag, so renaming makes a new table there and leaves the old one where it is, and a tag longer than 31 characters is one CommCare HQ has no way to address, so Nova asks you to shorten it before publishing.

If the project space already has a table with the same tag and Nova did not make it, publishing stops and asks you which of them are yours rather than writing over somebody else's data. Publishing has the details.

Who can do what

  • Read the tables: anyone who can open the app.
  • Edit values, add rows, add columns, reorder rows or columns, and import a CSV: edit access.
  • Delete a table, remove a column, change a column's type, and change the name a table or column uses in exports, admin access.