NAVAL-QDA is a desktop application for qualitative data analysis (QDA). It lets a researcher import interview transcripts, documents, and media; code that material against a hierarchical tree of nodes (codes); classify sources by case and attribute; write analytic memos; run text and coding queries; visualize patterns; and generate reports — all inside a single local Electron + React application, without any data leaving the researcher's machine unless an optional AI feature is switched on.
The project is currently in an early, pre-release stage (version 0.4.13 at the time of writing). Interfaces, database schemas, and menu wording may change between releases, so this guide should be read alongside the current in-app labels rather than as an unchanging reference.
.docx import leaving literal '/" text in place of apostrophes and quotation marks.This guide is written for students, academic researchers, UX researchers, and market researchers who need to code qualitative material — interviews, focus groups, open-ended survey responses, field notes — and who want a local-first, low-cost alternative to commercial CAQDAS (computer-assisted qualitative data analysis software) packages. No programming knowledge is required to use the application itself; the worked examples in Section 5 assume only that you can open the app and follow along step by step.
NAVAL-QDA is an Electron desktop application (Electron 43) with a React 19 + TypeScript front end (built with Vite) and a Node.js back end using better-sqlite3 (falling back to Node's built-in node:sqlite where necessary). Packaged installers are produced with electron-builder for Windows (NSIS), macOS (DMG), and Linux (AppImage/deb).
Step 1. Download or clone the project from the source repository: github.com/navalsingh9/naval-qda.
Step 2. Install dependencies and launch the development build with the project's own npm scripts, or install a packaged release for your platform if one has been built for you. Because the project is source-available (see Section 6 on licensing), redistributing modified copies is not permitted — only official releases published by the maintainer are authorized NAVAL-QDA distributions.
Step 3. On first launch, the app initializes a local SQLite database under the operating system's standard per-user application data directory. You do not need to configure a database connection yourself.
Step 4. (Optional) If you want AI-assisted source summaries and child-code suggestions, open the AI section in the sidebar and paste a Gemini API key into the settings panel, then save. You can alternatively set a GEMINI_API_KEY environment variable before launching the app, which the in-app panel will pick up automatically. Without a key configured either way, the app falls back to local placeholder summaries/suggestions so the rest of the application remains fully usable offline.
The application window is organized around a left-hand Workspace sidebar and a main panel that changes depending on which area you are working in. Project Explorer is the first item in the sidebar — it is where you browse, switch, and create projects, rather than a sub-panel reachable only through whichever project happens to be active.
A project is the top-level container for one study: its sources, node tree, cases, memos, and query results all belong to a single project.
A source is an imported document (.txt, .docx, .pdf) or media file (audio/video, once transcribed). Each source has a title and a body of text that can be searched, coded, and linked to a case.
A node is a code in NAVAL-QDA's vocabulary — a label you apply to a stretch of text to mark that it represents a theme, concept, or category of interest. Nodes are organized hierarchically (a tree), so a broad theme such as "Barriers to adoption" can contain child nodes such as "Cost" or "Lack of training." Nodes can be created, moved to a new parent, or merged into another node.
A case typically represents a unit of analysis such as a participant, site, or organization. Attributes are variables you attach to cases (for example, "Role" or "Experience level"), and each attribute can be given a value type such as text. Linking a source to a case lets you later filter or cross-tabulate coding by that case's attributes.
A memo is a free-text analytic note that can be linked to a source, a case, or a node, letting you record interpretations, decisions, or emerging ideas as you work.
Where more than one person codes the same material, each coder is tracked separately so that their coding can later be compared for agreement (see Section 5, Example 5).
Import .txt, .docx, or .pdf files as text sources, or import audio/video for transcription. On import, NAVAL-QDA extracts and normalizes the text and builds a paragraph index so that later operations (search, coding, queries) can work against consistent character offsets. Apostrophes and quotation marks in .docx files are decoded to plain text rather than left as literal '/" markup.
Select a passage of text in the Coding workspace and apply a node to it. Applied codes ("codings") are stored as start/end character offsets against the source, so overlapping and non-contiguous coding is supported. The node tree lets you create child nodes, rename a node in place, delete a node (with a confirmation step, and an explicit prompt if it has children you may want to delete along with it), move a node to a new parent, and merge one node into another (which reassigns all of that node's codings). A percent-coded figure shows how much of a given source has at least one code applied.
Create cases to represent your units of analysis, define attributes with a value type, and set attribute values per case. Linking a source to a case makes that source's coding available for case-based filtering and cross-tabulation. The classification sheet shows every case with its attribute values in one spreadsheet-style table.
Create and edit memos linked to a source, a case, or a node, and list all memos attached to a given item. Memos are a good place to record why a coding decision was made, or to draft interpretive notes as themes emerge.
Visualizations were rebuilt around a real charting library — each chart card can be dragged to resize, and clicking a bar, pie slice, or treemap cell filters the other charts on the dashboard against it.
Two optional AI-assisted actions are available: summarizing a source, and suggesting candidate child codes for a node based on a source's content. Both can be backed by Gemini or Mistral — pick a provider and add your API key from the AI section of the sidebar (Section 2.2, Step 4), or set the corresponding environment variable before launching. With no key configured, the app substitutes local placeholder output so the rest of the application remains usable without ever contacting an external service. AI suggestions are never applied automatically — review each one, then accept or reject it manually.
Formatting note: AI providers sometimes return markdown-style emphasis (e.g., **like this**) in their prose. The app strips these formatting marks before displaying a summary or suggestion, so what you see in the review panel is plain text.
All project data — sources, nodes, codings, cases, attributes, memos, and query results — is stored in a local SQLite database under the operating system's per-user application data directory. No project content is transmitted anywhere unless you explicitly enable the AI provider, and even then only the specific content being summarized or analyzed for a suggestion is sent.
The five examples below share one running scenario so that the outputs of an earlier example become the inputs to a later one, the way a real analysis would unfold. Substitute your own project, sources, and node names when you follow along in the application; the screens, fields, and calculations described are accurate to how NAVAL-QDA's Sources, Coding, Cases, Query, and Report features are implemented.
Goal — Get transcripts into a project, build a first-pass node tree, and apply codes to text — then check how much of each transcript has been coded so far.
Step 1. Create a new project named "Remote Work Adoption Study" from the Workspace sidebar.
Step 2. Open the Sources panel and import the six transcripts (P1.docx … P6.docx). NAVAL-QDA extracts the text of each .docx file and builds a paragraph index automatically.
Step 3. Open the Node tree sidebar (inside the Coding workspace) and create two parent nodes: "Barriers to adoption" and "Enablers of adoption." Under "Barriers to adoption," create child nodes "Cost of equipment" and "Lack of training." Under "Enablers of adoption," create child nodes "Manager flexibility" and "Team trust."
Step 4. Open P1 in the Coding workspace. Read the transcript and, for each passage that illustrates one of the four child nodes, select the text and apply the matching node — for example, select the sentence "My manager just told us to figure out our own hours" and apply it to "Manager flexibility."
Step 5. Repeat coding for the remaining five transcripts. As you go, use the percent-coded indicator for each source to see how much of the transcript has at least one code applied, which is a quick way to spot passages you may have skipped.
Step 6. Partway through, decide that "Lack of training" is better understood as two separate ideas. Create a new child node "Lack of onboarding materials" under "Barriers to adoption," then move some existing codings there, or merge nodes later in Example 5 once you see how they were actually used.
Illustrative outcome
| Source | Paragraphs | Codings applied | Percent coded |
|---|---|---|---|
| P1.docx | 34 | 11 | 46% |
| P2.docx | 29 | 9 | 41% |
| P3.docx | 41 | 14 | 52% |
| P4.docx | 27 | 7 | 33% |
| P5.docx | 38 | 12 | 48% |
| P6.docx | 31 | 10 | 44% |
Goal — Turn each participant into a case with attributes, link each source to its case, and review the result in the classification sheet.
Step 1. In the Cases area, create six cases: P1 through P6, one per participant.
Step 2. Create two attributes: "Role" (text: "Manager" or "Individual contributor") and "Team size" (text: "Small (<10)" or "Large (10+)").
Step 3. Set each case's attribute values based on your recruitment notes, for example P1 → Role: Manager, Team size: Large (10+).
Step 4. Link each transcript source to its matching case (P1.docx → case P1, and so on) so that later queries can filter or cross-tabulate by case attributes.
Step 5. Open the classification sheet to review all six cases and their attribute values in one table before moving on to querying.
Illustrative classification sheet
| Case | Linked source | Role | Team size |
|---|---|---|---|
| P1 | P1.docx | Manager | Large (10+) |
| P2 | P2.docx | Individual contributor | Large (10+) |
| P3 | P3.docx | Manager | Small (<10) |
| P4 | P4.docx | Individual contributor | Small (<10) |
| P5 | P5.docx | Individual contributor | Large (10+) |
| P6 | P6.docx | Manager | Small (<10) |
Goal — Use the Query workspace's text search and word frequency tools to sanity-check your emerging node tree against the raw language of the transcripts.
Step 1. Open the Query workspace and select all six sources as the search scope.
Step 2. Run a text search for the term "trust" (case-insensitive). Review each hit with its surrounding context to judge whether it reflects the "Team trust" node or something else, such as "trust the process."
Step 3. Run a word frequency query across the same six sources with a minimum word length of 4 and stopwords removed, requesting the top 10 terms.
Step 4. Compare the frequency list against your node tree from Example 1: frequent terms with no matching node are candidates for a new code; nodes with no corresponding frequent term may be too narrowly worded.
Illustrative text search result (excerpt)
| Source | Match | Context |
|---|---|---|
| P3.docx | "trust" | "…once my manager said she'd trust us to manage our own calendars, everything got easier." |
| P5.docx | "trust" | "…there was no trust at first, everyone assumed we'd slack off." |
Illustrative word frequency result (top terms)
| Rank | Term | Count |
|---|---|---|
| 1 | manager | 38 |
| 2 | training | 29 |
| 3 | flexible | 24 |
| 4 | equipment | 21 |
| 5 | trust | 19 |
| 6 | schedule | 17 |
| 7 | onboarding | 15 |
| 8 | meetings | 14 |
Goal — Retrieve every coded excerpt for a node with a coding query, then cross-tabulate node usage against case attributes with a matrix coding query.
Step 1. Run a coding query for the "Manager flexibility" node with no case filter, to review every excerpt coded to it across all six transcripts in one list.
Step 2. Re-run the same coding query filtered to cases where Role = "Individual contributor," to see only the flexibility excerpts that came from non-managers.
Step 3. Open the matrix coding query, set rows to nodes and columns to cases, and run it to get a full nodes-by-cases count matrix in one view.
Step 4. Read the matrix by row (which cases discuss a given theme most) and by column (which themes dominate a given participant's interview) to spot patterns worth writing up as a memo.
Illustrative matrix coding query (counts)
| Node \ Case | P1 (Mgr) | P2 (IC) | P3 (Mgr) | P4 (IC) | P5 (IC) | P6 (Mgr) |
|---|---|---|---|---|---|---|
| Cost of equipment | 1 | 2 | 0 | 3 | 2 | 1 |
| Lack of training | 1 | 3 | 1 | 2 | 3 | 2 |
| Manager flexibility | 3 | 1 | 4 | 1 | 1 | 3 |
| Team trust | 2 | 1 | 3 | 0 | 2 | 2 |
Goal — Use the coding comparison query to build a paragraph-level agreement table for two coders on one node, interpret the resulting agreement level, and then generate a coding report and project summary to close out the analysis.
Step 1. Have both coders (Coder A and Coder B) code P3's transcript against the "Team trust" node independently, without seeing each other's work.
Step 2. Open the coding comparison panel, choose source P3, node "Team trust," and the two coders, then run the comparison. NAVAL-QDA splits the transcript into paragraphs and, for each one, records whether Coder A coded it, Coder B coded it, both did, or neither did.
Step 3. Review the resulting contingency table.
| Category | Paragraphs |
|---|---|
| Both coders applied "Team trust" | 9 |
| Coder A only | 2 |
| Coder B only | 3 |
| Neither coder applied it | 27 |
| Total paragraphs | 41 |
Step 4. Compute observed and chance agreement from the table above to get Cohen's kappa: observed agreement = (9 + 27) / 41 ≈ 0.878. Expected chance agreement, from the row and column marginals, works out to ≈ 0.583, giving kappa ≈ (0.878 − 0.583) / (1 − 0.583) ≈ 0.71.
Step 5. Classify that value using the same agreement bands NAVAL-QDA applies internally (adapted from Landis and Koch's scale): ≤0.00 Poor, 0.01–0.20 Slight, 0.21–0.40 Fair, 0.41–0.60 Moderate, 0.61–0.80 Substantial, 0.81–1.00 Almost perfect. A kappa of 0.71 falls in the "Substantial" band, indicating the two coders are applying "Team trust" consistently enough to treat their combined coding as reliable for this node.
Step 6. Once satisfied with reliability, generate a coding report for "Team trust" to list every coded excerpt under that node across all six transcripts, and a project summary to capture the final source count, full node tree with usage counts, coder list, and classification sheet as a record of the completed analysis.
NVivo is a long-established, commercial QDA package now developed by Lumivero (formerly QSR International, which merged with Palisade and Addinsoft in October 2022 to form Lumivero). It is a mature, feature-rich product used widely across academia and industry. NAVAL-QDA is a much younger, source-available desktop tool with a narrower feature set. The comparison below is meant to help you choose the right tool for a given project, not to claim parity between a pre-release application and an established commercial product.
| Dimension | NAVAL-QDA | NVivo (Lumivero) |
|---|---|---|
| Maturity | Early / pre-release (v0.4.13); schema and UI may change | Mature, multi-decade product; current major release is NVivo 15 |
| Licensing | Source-available under CC BY-NC-ND 4.0; free to inspect, use, and share unmodified; no commercial redistribution | Proprietary, commercial; subscription or licensed seats purchased from Lumivero |
| Platform | Cross-platform desktop app (Windows, macOS, Linux) via Electron | Windows and macOS desktop applications, plus an optional cloud collaboration product |
| Data location | Local SQLite database on your machine by default; nothing leaves the device unless you opt into the AI feature | Local project files by default, with an optional cloud-hosted collaboration workspace for teams |
| Coding model | Hierarchical node tree; text-offset based codings; merge/move nodes; percent-coded tracking | Hierarchical nodes plus case/relationship nodes, in-vivo coding, auto-coding, and broader annotation tools |
| Queries | Text search, word frequency, coding query, matrix coding query, coding comparison with agreement-band interpretation | A wider range of built-in queries (e.g., text search, word frequency, coding, matrix, compound, group) plus formal Cohen's kappa coefficient reporting |
| Visualization | Word cloud, hierarchy treemap, similarity clustering | A broader charting and modeling toolkit, including crosstabs, cluster analysis, and project-map style diagrams |
| Media handling | Audio/video import with transcription support | Audio/video import, playback-synced coding, and (in recent versions) auto-transcription across more languages |
| AI features | Optional, opt-in source summarization and child-code suggestions via Gemini, configured in-app; off by default | Built-in AI-assisted coding and summarization features bundled into recent commercial releases |
| Collaboration | Single local database; no built-in multi-user merge/sync workflow at this stage | Team and enterprise tiers with project merging, user roles, and real-time cloud collaboration |
| File-format support | .txt, .docx, .pdf, plus audio/video for transcription | A wider range of formats, including spreadsheets, social-media exports, bibliographic-manager imports, and images |
| Support & training | Community-driven (issues/PRs on the repository); no vendor support contract | Vendor documentation, training courses, and paid support channels |
| Cost | Free to use under its license terms | Paid, typically an annual subscription or perpetual licence purchased per seat |
If you use NAVAL-QDA to support a thesis, dissertation, journal article, or report, cite it as software in your reference list, and note the version you used in your methods section so your analysis can be reproduced.
NAVAL-QDA. (2026). Naval-QDA (Version 0.1.2) [Computer software]. GitHub. https://github.com/navalsingh9/naval-qda
APA 7 treats software as a "work with no individual author" when the developer is credited as an organization or project name rather than a named person, which is the case here (the repository lists "NAVAL-QDA" as the package author). Adjust the year to the year of the release you actually used, and update the version number to match.
"Interview transcripts were imported, coded, and queried using NAVAL-QDA (Version 0.1.2; NAVAL-QDA, 2026), an open, local-first qualitative data analysis application. Coding was carried out by two researchers, and inter-coder agreement was assessed using NAVAL-QDA's coding comparison query (see Section 5, Example 5, of the NAVAL-QDA User Guide)."
Braun, V., & Clarke, V. (2006). Using thematic analysis in psychology. Qualitative Research in Psychology, 3(2), 77–101. https://doi.org/10.1191/1478088706qp063oa
Cohen, J. (1960). A coefficient of agreement for nominal scales. Educational and Psychological Measurement, 20(1), 37–46. https://doi.org/10.1177/001316446002000104
Landis, J. R., & Koch, G. G. (1977). The measurement of observer agreement for categorical data. Biometrics, 33(1), 159–174. https://doi.org/10.2307/2529310
Lumivero. (2026). NVivo (Version 15) [Computer software]. https://lumivero.com/products/nvivo/
NAVAL-QDA. (2026). Naval-QDA (Version 0.1.2) [Computer software]. GitHub. https://github.com/navalsingh9/naval-qda
NAVAL-QDA. (2026). SECURITY.md [Data storage and security policy]. GitHub. https://github.com/navalsingh9/naval-qda/blob/main/SECURITY.md