Getting started with AT1000
The AT1000 ecosystem is designed to make it easy to create test projects, either by running them directly on the device or by driving the device from your computer.
This page is a quick, minimal "hello world" for getting a brand new AT1000 up and running a simple test sequence. Start by unboxing your AT1000, power it up, and connect it to your computer with a USB cable or to your network with an Ethernet cable. Then follow one of the two paths below to create your first project.
Standalone projects live and run on the AT1000 itself, inside an isolated container. You can start them from the device's front panel and deploy or duplicate them across many devices — no computer needed at run time. This is the best fit when your test only involves the AT1000's own IOs.
Remote projects run on your computer and drive the device over the network. This is the better fit when the AT1000 is one part of a larger setup — alongside other instruments, your own toolchain, or CI.
The SDK API is identical in both modes, and the same code is portable between them (AT1000.isStandalone() / AT1000.findLocalDevice()), so you can start with one path and move to the other later. See Find and connect to AT1000 for details.
Creating a project in standalone mode​
Standalone projects are created and managed with the AT1000-Interface desktop utility.
-
Launch AT1000-Interface and wait for the device to be detected, then select it in the device selector (top-left). Once connected, open the Projects page — it lists the projects stored on the device.

-
Click Create standalone project, enter a project name (the screenshot uses
my-first-project), and pick a template — Node.js or Python — then click Create. The Import archive tab instead restores a project from a previously exported image archive.
-
You now have a container on the device pre-loaded with a demo test sequence: it waits for a knob press, checks a digital test point (GPIO 5), and reports the result on the device's screen and speaker.
-
Run it with the Run action on the project row, or straight from the device's front panel — scroll the project menu with the rotary knob and press to start. Mark a project as default (the star action) to auto-start it at boot.
-
To edit it, use the Run in development mode action: it starts the project with SSH enabled and opens its
/workspacefolder in VS Code. This requires VS Code with the Remote-SSH extension installed on your computer.
Standalone projects require up-to-date device firmware — the interface only offers this flow when the connected device supports it.
Creating a new project in remote mode​
In remote mode the project is an ordinary Node.js or Python project on your computer.
Using a project scaffolder (recommended)​
- For NodeJS
- For Python
npm create @ikalogic/at1000
cd my-project
npm run start
The interactive prompts ask for the project name (default at1000-project) and whether to install dependencies. npm run start compiles and runs the test sequence.
uvx create-ikalogic-at1000 my-project
cd my-project
uv run main.py
This uses uv to scaffold and run the project.
The generated project contains a ready-to-run demo (src/index.ts / main.py) — knob press → GPIO 5 check → result on the device's screen and speaker — and the same project also runs unmodified as a standalone project on the device.
Setting up a project manually​
- For NodeJS
- For Python
mkdir my_test_project
cd my_test_project
npm init -y
npm install @ikalogic/at1000
Set "type": "module" in the generated package.json — the example below uses ES-module imports and top-level await.
mkdir my_test_project
cd my_test_project
python -m venv my_test_env
source my_test_env/bin/activate # On Windows use `my_test_env\Scripts\activate`
pip install ikalogic-at1000
Then create the "read back" hello-world below and run it.
- For NodeJS
- For Python
Create test.js and run it with node test.js:
import { AT1000 } from '@ikalogic/at1000';
// Discover AT1000 devices on the network and open the first one
const devices = await AT1000.findDevices();
console.log(`Found ${devices.length} AT1000 device(s).`);
const tester = await AT1000.open(devices[0]); // takes exclusive access
await tester.reset(); // reset the device to a known state
// Configure D0 as a digital output, then read back what we write
const d0 = tester.gpio.digital(0);
await d0.configure_output({ voh: 3.3, vol: 0, vih: 2.0, vil: 0.8, value: true });
await d0.write(false);
console.log('D0 value (we expect `false`):', await d0.read());
await d0.write(true);
console.log('D0 value (now we expect `true`):', await d0.read());
Create test.py and run it with python test.py:
from ikalogic_at1000 import AT1000
# Discover AT1000 devices on the network and open the first one
devices = AT1000.find_devices(0.5) # timeout in seconds
print(f"Found {len(devices)} AT1000 device(s).")
tester = AT1000.open(devices[0]) # takes exclusive access
tester.reset() # reset the device to a known state
# Configure D0 as a digital output, then read back what we write
d0 = tester.gpio.digital(0)
d0.configure_output(voh=3.3, vol=0, vih=2.0, vil=0.8, value=True)
d0.write(False)
print("D0 value (we expect `False`):", d0.read())
d0.write(True)
print("D0 value (now we expect `True`):", d0.read())
If everything goes as expected, running the script prints:
Found 1 AT1000 device(s).
D0 value (we expect `false`): false
D0 value (now we expect `true`): true
Next steps​
Continue with Find and connect to AT1000 for discovery, opening, and access control, then the per-resource sections (IO, COM, power, relays, HMI).