From J Wiki
Jump to navigation Jump to search

A Guide to the latest version of jios - a J IDE for iOS/iPadOS.

This is the new Guide page.

For the old Guide/iOS (for the J701 app – which is still available from App Store), see: Guides/iOS/J701

Important.png DISCLAIMER: This app: jios (J for iOS/iPadOS) is wholly free of charge.

There are no In-App Purchases or invitations to donate. The Developer User:Ian_Clark is wholly independent of Jsoftware Inc. Nothing on this JWiki website should be construed as an attempt by either the Developer or Jsoftware Inc to invite donations of funds towards the development of this app in violation of Apple Inc App Store guidelines.

An iPad portrait view

Showing the Welcome message in the Home scene

  • NOTE: this is the appearance when the iPad is set to Dark Mode (recommended)...


Showing 2 trigonometric plots in the Plot scene


Showing the NuVoc portal in the Info scene


Showing the NuVoc entry for Insert(/) in the Info scene


Showing how to access a "Lab" (interactive tutorial)


  • NOTE: You can now advance the lab by tapping the Return key (i.e. entering an empty line).

Alternatively, if you are using a bluetooth keyboard, enter: ⌘J

Scenes (fullscreen displays)

These are the scenes accessible by the button bar at the bottom of the screen…

  • Home scene: This shows the J session log. Type a new J sentence at the bottom or alter a line
  • Edit scene: This is where to edit and run scripts. It has multiple tabs, plus Find.
  • Info scene: This is where you can read on-line help material, e.g. NuVoc. Also view user-written html files.
  • Plot scene: This is where the Plot package displays its charts. Scroll through the latest 6. (Like Info, this is a html display.)
  • Slate scene: This is where the Viewmat package displays its images. It will also show other image formats, e.g. JPG, PNG.


The original Help pages, bundled-in with all J IDEs from J 6.02 onwards: Online help for J

The default Help for the present app is the NuVoc portal.

Place the cursor before a given J primitive in your code to see its NuVoc entry.

Platforms supported

You need an iPhone with iOS 16.2 or higher, or an iPad with iPadOS 16.2 or higher.

If you have a Mac with the M1 chip, you can download and run the app from App Store using the Mac Silicon feature. (The screenshots have been made using this edition of the app.)

File Transfers

Using the Import button

Tapping the Import Button Ios-fig6.png shows a screen like a cut-down Files app.

This lets you browse, edit and load scripts (and other text files) residing on

  • your iCloud Drive (use this to transfer scripts from your Mac or other computer)
  • on your iPad (i.e. files in the so-called Sandbox or Jail).

It also lets you copy any file to any other visible location. Typically you'll want to copy a script from iCloud Drive into your temp or user folder. Get familiar with the Files app to learn how to use this feature to greatest advantage.

The basic action is

  • locate the icon of the script you want to move/copy
  • touch and hold the icon (…a list of options appears)
  • select (say) copy (…it then invites you to navigate to the target location)
  • Some drag-and-drop of icons onto locations in the left sidebar is supported, but you'll need to experiment.

NOTE: Apple Security restricts obvious but unsafe actions like in-place editing of scripts in iCloud Drive. In this version of j901 for iOS, if you edit or load such a script, it is first copied to your temp folder and editing/loading is done on the copied file. You are then free to use Import (or better: the Files app) to copy your edited file back into your iCloud Drive, or move it into (say) your user folder.


The app can only be installed by downloading it from App Store.

The app is free-of-charge.

Locate the app in App Store (iOS or Mac Silicon) with the search term: j901

Locate the old app in App Store (iOS or Mac Silicon) with the search term: j701

System Keyboard (onscreen)

This is shown below for the iPad in landscape orientation:


You can now rock a key (…drag slightly downwards) e.g. rock m to type: Colon (:).
saves cumbersome use of the shift key.

There is now a toolbar of custom keys, to ease the pain of using the onscreen keyboard to do these actions:

  • Fetch line from history – i.e. further up the J session log
  • Move cursor left / right – has better ux than built-in manual repositioning of cursor using forefinger
  • Type quote-quote and place the cursor between them (a fast way to provide dummy y-argument, or compose a string)
  • Type underbar-underbar and place the cursor between them (a fast way to add a locator to a name)
  • Go to the Edit scene (the pen icon)
  • Go to the Info scene: (the ringed query icon) - for Help (NuVoc). First place the cursor before an unknown J primitive for context help.

Hardware Keyboard (Bluetooth)

This behaves much as it does with macOS using the attached (USA) keyboard.

To see a menu of Cmnd-keys (⌘-keys), tap the ⌘ button (top-left of screen).

Idiosyncrasies (relative to other J versions)

The main differences from (say) jqt are:

  • An ultra-simple shell provides access to system utilities with minimal typing. See Dot-commands
  • stdlib is augmented by iosutils, a collection of verbs adapted to the iOS environment
  • The folder structure has been flattened to assist newcomers to J find their way about
  • The Foreign conjunction: 2!:9 offers rich facilities to access the UI (user interface) of the app. See: Foreign (2!:9)
  • A restricted version of ~addons comes with the app. Apple privacy and security requirements forbid the use of the J Package Manager pacman. Instead, individual addons (or the whole ~addons folder) must be manually imported from iCloud Drive, or some other container, using either the Files app or the built-in import facility (known to iOS developers as Document Picker).
  • the Plot and Viewmat packages have been adapted to iOS and absorbed into the system, now residing in the folder j/system.

Foreign (2!:9)

This feature offers rich facilities to access the UI (user interface) of the app.


   'baby' 2!:9 ''    NB. show the classic dancing baby GIF
   'beep' 2!:9 ''    NB. built-in "klunk" sound
   'beep' ui 1030    NB. "hunt" sound, with cover verb: ui for 2!:9
   'getclip'ui''     NB. return the contents of the (system) general pasteboard
   'goto' ui 'Edit'  NB. show the script editor
   'goto' ui 'Info'  NB. show jwiki portal

Use ui in preference to 2!:9. ui converts a numeric y-argument into a string, which 2!:9 requires.

Important.png 2!:9 and its cover verb: ui are now deprecated for all but app system use. Use instead the corresponding watched nouns (see below).

Watched Nouns

The new _i_ locale contains system-created watched nouns.

Assigning a suitable value to a watched noun changes some aspect of the app's UI (User Interface). Watched nouns are mostly self-explanatory. (Watch this page for explanations of those which are not.)

There are two kinds of watched noun:

  • standing-order -- have uppercase names, e.g. NO_BEEPS_i_
  • single-shot -- have lowercase names, e.g. beep_i_

A Standing-order watched noun is used for controlling UI status. When reassigned, it keeps its new value until reassigned again.

   NO_BEEPS_i_ =: 1

silences system sounds produced by (say) tapping returnKey. This status persists until reassigned

   NO_BEEPS_i_ =: 0       NB. the default value

A Single-shot watched noun is used to trigger a given action. Then the watched noun reverts to its default value

   $beep_i_               NB. the default value
   beep_i_ =: 1002        NB. "bling" sound
   $beep_i_               NB. reverts immediately to the default value

Where they exist, use corresponding watched nouns instead of 2!:9 or ui

   NO_BEEPS_i_ =: 1       NB. replaces...
   'NO_BEEPS' ui 1        NB. now deprecated

   beep_i_ =: 1002        NB. replaces...
   'beep' ui 1002         NB. now deprecated

To see a list of the watched nouns, use the factory verb: showi

   showi 0                NB. single-shot only
   showi 1                NB. standing-order only
   showi''                NB. the default: standing-order

The list shown is not a list of names but a list of assignment sentences (showing the current values). Simply overtype the value and tap returnKey.


No valid J sentence begins with dot (.). The dot-command feature relies on this fact to provide a simple shell-style command-line interpreter. The app detects a leading dot in your input line and applies an elementary command syntax to the line.

Enter a single dot to view the command repertoire as a ghost menu (a purple text-list that disappears after you tap returnKey). Then place cursor on a chosen line of the menu, [edit it] and tap ReturnKey.

  • Most dot-commands are single-char (following the dot).
  • Some dot-commands (e.g. .d) call factory J-verbs residing in the z-locale. (You may call these factory verbs directly if desired.)
  • Other dot-commands (e.g. .f) bypass the J engine to parameterize the iOS User Interface directly.
  • Use // (not: NB.) to begin a trailing comment after a dot-command. (Ghost menus do this.)


.          // show selection of useful dot-commands
.B         // toggle beeps
.b         // toggle heartbeat
.b ?       // show more heartbeat options
.d                            // show sub-directories of main directory: j/
.d user                       // show contents of user directory: j/user
.d j/addons/graphics/viewmat  // show contents of explicit (folder) path


  • A dot-command is not logged as it stands.
  • If the dot-command expands to a J system phrase, the equivalent J phrase is logged in yellow text.
  • If the dot-command acts on the UI directly, you may see a confirmation in purple text.
  • Dot-commands work only in the Home scene session log, not inside explicit definitions or scripts. (This is deliberate, for security reasons.)

Updates / app and JAL

Periodic app updates will be provided subject to App Store review. These will incorporate both app features and factory scripts

The latest versions of iOS-relevant JAL addons will be shipped this way.

Meanwhile, for users with access to a macOS version of the J IDE, follow these steps:

  • (on Mac): download the latest version of selected addons using the Package Manager (pacman)
  • (on Mac): copy the relevant folder (e.g. /Applications/j903/addons/math/calculus) to your iCloud Drive,
  • Move from your iCloud Drive to your iPhone or iPad ...
  • (on iOS): use Files app (see above) to move the folder into j/addons/math/calculus


To add a comment, please use the Discussion page. (See tabs, top-left of this page.)