Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>NIPO ODIN LanguageNew to Visual Studio Code? Get it now.
NIPO ODIN Language

NIPO ODIN Language

arodroz

|
110 installs
| (4) | Free
| Sponsor
Language support for NIPO ODIN scripting language — syntax highlighting, diagnostics, completions, a survey debugger, and client-ready Word questionnaire export
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

NIPO ODIN Language

Everything you need to write, check, debug and hand off NIPO ODIN questionnaires in Visual Studio Code: language support that understands your script, a survey debugger you can step through as a respondent, and a one-click Word questionnaire for client sign-off.

Editing an ODIN questionnaire in VS Code: syntax colouring, code lenses, inlay hints and the document outline

  • Understands your script. Completions, hover documentation, go to definition, references, rename, outline and call hierarchy, with questions, variables, lists and subroutines resolved by a real ODIN parser.
  • Catches mistakes as you type. Syntax errors, undefined questions, overlapping data fields, unreachable code, with one-click fixes where there is a safe one.
  • Shows the whole survey. Question flow, field position map, call graph, language comparison and a data dictionary, all updating live.
  • Runs it. Press F5 to take the survey as a respondent, with breakpoints, variables, coverage and replayable scenarios.
  • Hands it off. Export a client-ready Word questionnaire, in every language the script declares.

No account, licence or external runtime: the language server and debugger ship inside the extension.

Free, and maintained by one person. If it saves you hours, ☕ buy me a coffee, or support it as a team.

Writing ODIN

Syntax and semantic colouring

Commands, question numbers, field specs, strings, operators and comments are coloured as you type. Semantic colouring then tells question references, your variables, system variables, lists and subroutines apart, so a misspelled name stands out.

Syntax colouring of an ODIN script

Completions

Type * for commands or ? for functions to get completions with a one-line description. Your own questions, variables, lists and subroutines are offered too, and parameter hints appear inside function calls such as ?DATETIMEADD(dt, interval).

Completion list after typing *US

Hover documentation

Hover any command, function or system variable for its reference entry, syntax included. Hover your own symbols for their type, where they are declared and how often they are used.

Hover documentation for *USELIST

Inlay hints and code lenses

Inline hints show where a *GOTO lands (-> Q90), which line a *GOSUB calls (-> line 19) and how many choices a *USELIST brings in ((5 choices)). Code lenses above questions, lists and subroutines count their references; click one to list them.

Inlay hints and reference-count code lenses

Catching mistakes

Diagnostics

Problems appear in the editor and the Problems panel while you type:

  • Syntax errors with ODIN-specific messages, such as a malformed command, a missing bracket or an option in the wrong place.
  • Undefined references: *GOTO 99 when there is no question 99, unknown variables and subroutines, duplicate declarations.
  • Field positions: two questions writing the same data position, use of the system-reserved positions 1–60, positions beyond the Nfield maximum.
  • Unreachable code after an unconditional *END, *GOTO or *RETURN is dimmed, and questions whose *IF can never be true are flagged.

Field overlap and undefined question warnings in the Problems panel

Quick fixes

When two questions share data positions, the lightbulb offers to move the field to the first free position. The suggestion accounts for every other question in the script, so the fix never creates a new overlap.

Quick fix moving an overlapping field to the next free position

Navigating a script

Feature Shortcut
Go to Definition F12 Jump to where a question, variable, list or subroutine is declared
Find All References Shift+F12 Every use of a symbol, lists included
Rename Symbol F2 Rename a symbol at its declaration and every use
Outline Explorer → Outline, Ctrl+Shift+O Questions, variables, lists, subroutines and blocks
Workspace Symbols Ctrl+T Find any question, variable, list or subroutine by name
Call Hierarchy Shift+Alt+H Who calls a subroutine, and what it calls
Document Links Ctrl+Click Follow *GOTO targets and *GOSUB names

Find All References on a list

Call hierarchy of a subroutine

Code folding, sticky scroll and smart selection (Shift+Alt+→) all follow ODIN's structure: subroutines, questions, *IF / *ENDIF, *REPEAT, matrices, segments and sets.

Seeing the whole survey

Five panels, all from the Command Palette under ODIN:, and all refreshing as you edit. Click a question in any of them to jump to it in the script.

Question Flow (ODIN: Show Question Flow): every question in interview order with its type, plus routing, conditional and unreachable questions marked.

Question Flow panel

Field Position Map (ODIN: Show Field Position Map): every data position the script writes, coloured per question, with overlaps in red and a summary table.

Field Position Map panel

Call Graph (ODIN: Show Call Graph): the subroutine call tree with reference counts.

Call Graph panel

Language Comparison (ODIN: Show Language Comparison): each *LANGUAGE overlay side by side, with missing translations counted.

Language Comparison panel

Data Dictionary (ODIN: Export Data Dictionary): a searchable table of every question, variable, list and subroutine, exportable to Excel (one sheet per symbol kind).

Data Dictionary panel

Survey Debugger

Press F5 on an open .odin file. The script runs as a respondent would see it: each question appears in a side panel that follows your editor theme, you answer it, and routing is evaluated exactly as written. The usual debug controls work: Continue (F5), Step Over (F10), Step Into a *GOSUB (F11), Step Out (Shift+F11), breakpoints and the Variables, Watch and Call Stack views.

Debugging a survey: the current question in the editor and the answer panel beside it

Matrices render as a grid, one row per statement:

A matrix question in the debugger

What you can do

  • Inspect state. The Variables view lists every variable the script has written, in your casing. Hover a question or variable in the source while paused to see its value.
  • Conditional breakpoints. Add a condition such as Q1 = 1 & _REPEAT = 3 to a breakpoint and it only pauses when that holds.
  • Watch expressions. Q5 IN [1,2,3] or LANGUAGE = "FR" are evaluated at every pause.
  • Save and replay scenarios. ODIN: Save Scenario records every answer so far to <script>.scenarios/<name>.json. ODIN: Run Scenario replays it after you change the script; if the script no longer matches the recording, the debugger stops at the first unknown question and lets you take over. Commit scenarios next to the script and they become regression tests.
  • Preview languages. For multi-language scripts, pick the language at launch or switch with ODIN: Change Preview Language. *SWILANG answers switch it too, so *IF [LANGUAGE = "FR"] routing is exercised.
  • Reproducible randomisation. Pin a seed in launch.json for *RANDOM / *ROT orders, or re-shuffle mid-session with ODIN: Reseed Session.
  • Coverage. Visited lines are marked in the gutter, and the Coverage tab counts questions visited and *IF branches taken.

Coverage tab during a debug session

At *END the panel shows a summary of the session, with buttons to save it as a scenario, restart or close.

End-of-session summary

Configuring launch.json

F5 works without any configuration. To keep settings, add an ODIN: Launch configuration under Run and Debug:

{
  "type": "odin",
  "request": "launch",
  "name": "Debug ODIN Script",
  "program": "${file}",
  "stopAtEntry": true
}
Field Type Purpose
seed integer Seed for *RANDOM / *ROT ordering (default 42)
language string Preview language, e.g. "FR"; empty uses the primary content
externals array Values for variables the script uses but doesn't declare (sample fields, quota flags): {name, kind: "code" \| "numeric" \| "open", value}
scenario object A saved scenario to replay
trace "compact" | "verbose" Debug Console detail; verbose adds assignments, shuffle orders and *GOSUB / *REPEAT scopes

If the script references variables it never declares (such as _AGE or QUOTA_FULL) and externals doesn't cover them, the debugger asks for values in a form before the first question.

Limits

The debugger evaluates the questionnaire's logic, not the fieldwork system around it: quotas, sample management, *DOFILE and *EXTERN are skipped with a note in the Debug Console. Some string functions inside *IF conditions (?STRLENGTH, ?STRINDEX) are not evaluated yet and count as false.

Client Questionnaire (Word)

Turn the script into a Word document a client can read and approve before fieldwork. Run ODIN: Export Client Questionnaire (Word), choose the language, and pick where to save. ODIN: Export Client Questionnaire — All Languages writes one document per *LANGUAGE in one go.

Export finished notification

Cover page and first questions of the exported Word document

The document has a cover page, sections taken from your ** SECTION comments, every question with its answer list, routing written as plain English ("Asked if Q5 = Yes"), randomisation and other instructions as notes, matrices as grids, and a footer with project, version and page numbers. *DUMMY questions are left out.

Fill in the cover page with directives in the first 50 lines of the script:

** @word.doc.title: Coffee Habits 2026
** @word.doc.client: Acme Brands
** @word.doc.project: 2604-COFFEE
** @word.doc.version: v0.4 DRAFT
** @word.doc.date: 28 April 2026
** @word.doc.prepared_by: Anteras Research
** @word.doc.confidentiality: Confidential

Anything missing falls back to the file name, today's date and DRAFT.

What's New after updates

When an update adds features (a new minor or major version), a What's New page opens once with that release's highlights, plus links to this page and the full changelog. Bug-fix releases never open it. Turn it off with the odin.whatsNew.showOnUpdate setting, or the link on the page itself; ODIN: Show What's New brings it back any time.

The What's New page

Commands

Command
ODIN: Show Question Flow Question Flow panel
ODIN: Show Field Position Map Field Position Map panel
ODIN: Show Call Graph Call Graph panel
ODIN: Show Language Comparison Language Comparison panel
ODIN: Export Data Dictionary Data Dictionary panel
ODIN: Run Full Diagnostics Re-check the open script now
ODIN: Export Client Questionnaire (Word) Word document for one language
ODIN: Export Client Questionnaire — All Languages One Word document per language
ODIN: Save Scenario / ODIN: Run Scenario Record and replay debug sessions
ODIN: Change Preview Language / ODIN: Reseed Session During a debug session
ODIN: Show What's New Release highlights
ODIN: Get Started The getting-started walkthrough
ODIN: Report Issue or Send Feedback Pre-filled bug report, wrong-diagnostic report or idea
ODIN: Support ODIN (Buy Me a Coffee) Support the project

Getting started

  1. Install the extension. The Get started with NIPO ODIN walkthrough opens to show you around; ODIN: Get Started reopens it.
  2. Open a folder with your .odin scripts. UTF-8 and UTF-16 files (as Nfield exports them) both work.
  3. Start editing, or press F5 to run the script.

Requires Visual Studio Code 1.85 or later on Windows, macOS (Intel or Apple silicon) or Linux (x64 or Arm64).

Known limitations

  • Analysis is per file: references into other files (for example *MERGE targets) are not resolved.

Feedback and bug reports

Found a bug, or a diagnostic that's wrong? Run ODIN: Report Issue or Send Feedback, or click the lightbulb on any ODIN diagnostic and choose Report this diagnostic as wrong. Either one opens a pre-filled report with your extension and VS Code versions. The script isn't attached: the only code included is the flagged line, and only after you've seen it and agreed.

  • Open an issue (public; please don't paste client scripts)
  • Ask a question
  • For anything confidential, email arodriguez@anteras.org

Support the project

This extension is free, with no account, licence or telemetry, and it's built and maintained by one person. That includes the parser, the language server, the survey debugger and the Word export, checked against more than 1,500 real Nfield scripts so the diagnostics match what Nfield accepts.

If it saves you time, a coffee keeps it going. If your team uses it every day, a monthly membership helps even more: it pays for the next Nfield change, grammar gap and feature.

For agencies: the Team membership lists your company in this section if you'd like, and your bug reports and wrong-diagnostic reports are looked at first. Buy Me a Coffee emails a receipt for every payment.

Buy Me a Coffee

On a work machine? Scan to support from your phone:

QR code for buymeacoffee.com/arodroz

How the extension asks. Word export and preview results carry a ☕ Support ODIN button beside their own actions, and the debugger's end-of-session screen and the What's New page show the same button with the QR code. Now and then, after a milestone such as your 5th Word export or the 25th problem ODIN flagged that you then fixed, it asks once in a message. It asks at most once every 60 days, and Don't ask again turns off both the asks and the buttons in messages for good. Everything it counts stays on your machine.


Copyright © 2026 Antonio Rodriguez (arodriguez@anteras.org). All rights reserved. See LICENSE for terms.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft