Under construction.This site is being rebuilt for the next release of Arkitekt. Pages may be incomplete or change without notice. Please check back soon!
Take the K pill

Bioimage analysis,
a bit more fun.

Arkitekt is a real-time middleman between you and your tools. It turns scattered scripts and messy multi-folder data sinkholes into a single, analysis tracking datahub that orchestrates your workflows and lets you share your data with your team securely.

You bring your apps and robots, Arkitekt ties them together.

LIVE

Watch how a request flows through the platform.

Step 1 / 9
PICK A STORY
Action · issued to the server Data · stored back on the server
First things first

Arkitekt is a reactive platform for live, stateful workflows. It is not a replacement for the tools we admire.

We are NOT A PARALLELIZATION LIBRARY
Dask

We love and use Dask heavily. It is brilliant at scaling array, dataframe & task-graph compute across a cluster.

Arkitekt is not a pure parallelization library.

We are a concurrency platform: long-lived, stateful actor apps that broker data and compute. They are not ephemeral task graphs you submit and forget.

How we run Dask
We are NOT A STATELESS PIPELINE
Nextflow

We love Nextflow: for running stateless batch pipelines on a cluster.

Arkitekt is not just a stateless executor.

Smart microscopy is rarely stateless. A model is loaded once and results steer the next acquisition. Our apps stay alive and keep their state across a live feedback loop.

Arkitekt vs Nextflow
We are NOT ROBOTICS MIDDLEWARE
ROS

We love ROS. It rules at real-time robotic control and swarm orchestration

Arkitekt does not orchestrate robotic swarms.

That layer is out of scope. But the moment your robot exposes a high-level action, wrap it as an Arkitekt app and we become your friend.

Wrap it as an app
Let us dump some features on you, like every weird marketing site. If you care more about what Arkitekt stands for check out Why we exists?
(ASYNC) API

Register idiomatic Python code

Every action is just a function, sync or async. Use standard python calls like task.progress() to report how far along you are, and yield results as they are produced.

@app.action
async def process(stack: Image, task: Task) -> Image:
    """Segment every plane and stream the masks."""
    for i, plane in enumerate(stack):
        await task.aprogress(i * 10)
        yield segment(plane)
process(stack)
running
progress(0)0%
yield from_array_like0 images
Show me where you are at

Observability baked in

Declare any @app.state class and any agent can read it (but only you mutate it). Every change is published to the platform automatically. Dashboards and other apps watch your that change. Did we say we keep track of it for replay and provenance too? We do.

@app.state
class RobotState:
    pose: str = "idle"
    picks: int = 0

@app.action
def pick(robot: RobotState) -> int:
    robot.picks += 1  # published automatically (in the background and thread safe)
    return robot.picks
Loading scene…
RobotState
published
poseidle
picks0
battery96%

Want to see Arkitekt in action?

Look at these examples. Maybe they can illustrate things better than words.

Showcase

Audited by default.

Every action, input and output is recorded at task assignment. You get a complete, queryable provenance trail of who ran what, on which data, and when.

process()#a3f19c2s ago
upload()#9c0d4e6s ago
train()#1b7e8814s ago
Cryptographic signing?
Loading…
WORKFLOWS ARE JUST CODE

Orchestrate across machines, survive the crash

Declare what you need from other apps with @app.declare and write the orchestration as plain Python in an @app.workflow. If the machine running it dies, the workflow is resumed: calls that already finished are replayed from the journal instead of running again (the robot does not move twice), and a call still in flight is picked up where it is.

@app.declare(app="fairino")
class Arm(Protocol):
    plate: Plate  # published @app.state
    def pick(self, slot: str) -> None: ...
    def place(self, slot: str) -> None: ...

@app.workflow
def image_plate(arm: Arm, scope: Scope, seg: Segmentor,
                task: Task) -> int:
    arm.pick("hotel/3")
    arm.place("stage")
    total = 0
    # raise if someone swapped the plate while we were down
    with task.guard(arm.plate, "barcode"):
        for well in ["A1", "A2"]:
            image = scope.acquire(well)
            total += task.retry(seg.count_cells, image,
                                  if_started=True)
    arm.place("hotel/3")
    return total
Loading scene…
image_plate()RUNNING · RUN 1
1arm.pick("hotel/3")·
2arm.place("stage")·
3scope.acquire("A1")·
4seg.count_cells(image)·
5scope.acquire("A2")·
6seg.count_cells(image)·
7arm.place("hotel/3")·

EVERY CALL JOURNALED UNDER A STABLE KEY

BLOKS

Dashboards, declared in JSX.

Compose a panel from the component catalogand wire it straight to your app: bind props to a dependency's state with $state, and call its actions with @. jsx(...) parses it into a component tree.

PageLabelTextButtonStackImage
<Page>
  <Label text="Camera" />
  <Text value="$state.camera.connected" />
  <Button title="Snap"
    onClick="@camera.snap(exposure_ms=10)" />
</Page>
RENDERED BLOK
Camera
$state.camera.connectedtrue

@camera.snap → 0 frames captured

Powered by the Arkitekt core

A handful of focused services do the heavy lifting. Call them from any language through the client SDKs.

Rekuest
ACTIONS & APPS

Apps expose Actions; agents run them and Rekuest assigns the work across the network.

Mikro
MICROSCOPY DATA

Stores & serves n-dimensional images, ROIs and rich metadata.

Kraph
KNOWLEDGE GRAPH

Links samples, experiments and results into one graph.

Kabinet
APP REGISTRY

Discovers, deploys & manages Apps across the platform.

CLIENT SDKs

Build Apps & call Actions from any language.

PythonMATLABKotlin / Java
This shit looks like AI...

We dont vibe code here, but we use AI sometimes.

Arkitekt is older than AI and the core of the platform has been painstakingly engineered without any ML magic. Look at our code, talk to us humans, there is no hype here.

What we do care about with regards to AI

Get started with Arkitekt

Install the platform, walk through the tutorial, and connect your first tool.

Start the tutorial