A management studio for Informix.

Connect to a server, browse its objects, and write and run SQL — in one window, on Windows. IMS performs no administrative change of its own.

Download the pilot build Read the manual → Windows 10/11 x64 · no installer · no admin rights
Status pilot Latest v0.3.0-pilot Tested against Informix 14.10 Licence Apache-2.0 Telemetry none

Informix has no equivalent today.

SQL goes through dbaccess, object definitions through dbschema, diagnostics through the onstat family. Generic JDBC clients treat Informix as a lowest-common-denominator target.

Every statement IMS sends is one you typed or explicitly requested; it issues nothing on its own initiative. What you may do is decided by your Informix privileges, not by IMS — it grants no capability you do not already hold, and there is no shared or service account behind it. It offers no way to kill a session: if one needs terminating, that is an administrative action for whoever owns the server.

It emits no telemetry of any kind, enforced by a test that fails the build if a telemetry package enters the dependency graph. Those constraints are what make it reasonable to point IMS at a production server, and to hand it to a colleague.

The IMS main window: saved connections and the object tree on the left; on the right a query toolbar, a SQL editor tab, and a result grid of 100 rows; a status bar reporting the Client SDK version and the connected server.
Connections and objects on the left, editor and results on the right. The toolbar above the editor carries the query actions, and greys out the ones that need a connection. The status bar carries the Client SDK version and what you are connected to.
The query toolbar with no connection open: the target reads Not connected, and Execute, Commit and Roll back are greyed out. The session monitor button is hovered, showing the tooltip “Session monitor — who is connected and what is blocked (Ctrl+Alt+S)”.
The session monitor opens from the toolbar, the Sessions menu or Ctrl+Alt+S. Every button says what it does and names its gesture, and the ones that need a connection are greyed out until there is one — here the target reads Not connected, so Execute, Commit and Roll back are unavailable rather than silently inert.

Four capabilities, in the order you meet them.

  1. Connect.

    A connection is described by its own settings rather than by the machine's sqlhosts, so one that works on your workstation works the same on a colleague's. Each is labelled Development, UAT or Production, shown beside it at all times, so a production connection cannot be mistaken for another.

    Passwords go to Windows Credential Manager — never a config file, never a log.

    Built · in use against a live instance
  2. Browse.

    Tables, views, synonyms, sequences, procedures, functions and indexes, grouped by owner. Nodes load their children on demand rather than reading the whole catalogue at connect time, so opening a large schema does not stall. Opening an object gives it a tab of its own, beside the query tabs, showing its definition; for a view, that is the source Informix itself holds.

    Built · user-defined types not yet listed
  3. Query.

    Informix SQL and SPL highlighting. Each tab holds one script with its own connection and its own results, so a long query in one tab does not block work in another. Select text and run to execute only the selection.

    A toolbar above the editor carries the same actions, so none of them depends on knowing its key. It names the instance the current tab runs against, greys out everything that needs a connection until there is one, and turns Execute into Cancel while a statement is running.

    Rows are fetched in blocks rather than all at once, so a large result starts displaying immediately. When a grid shows only part of a result it says so — a truncated grid is never presented as a complete one.

    Built · F5 runs · cancel is limited, see below
  4. Monitor.

    A read-only view drawn from sysmaster, one tab per instance. It lists who is connected — session id, user, originating host, application, state, connection time — sorts and filters on any column at once, and marks your own sessions with the word YOU rather than a colour. Beside it, instance indicators: mode, uptime, session count, read and write cache efficiency, checkpoint recency. Each figure is read by its own query, so one absent object costs one figure and reads Unknown rather than blank.

    Refresh is manual by default; an optional interval is floored at five seconds, and nothing is queried while the tab is closed or sitting behind another tab. Every query is on show with the onstat command that answers the same question beside it — including the ones that failed, with the server's reason, and the ones IMS decided not to send. Take the block to an editor tab with one button and run it yourself.

    Strictly read-only: IMS does not offer to kill a session. Blocked-session identification is built but returns Unknown on a busy instance — see below.

    Built in v0.3.0 · Ctrl+Alt+S · blocking answer limited, see below

Three gaps to know before you rely on it

Cancelling stops the waiting, not the statement.
Measured against 14.10, the ODBC driver's cancel does not reach the server: the statement runs to completion or to its timeout regardless. IMS stops waiting and returns the window to you, and the session stays usable — but the server keeps working. A cancel frees you, not the server, so bound an expensive query before you send it, with FIRST or a restrictive WHERE, rather than relying on cancelling it afterwards.
The monitor cannot tell you who is blocking whom on a busy instance.
Measured against 14.10 as an ordinary developer account: every read of sysmaster:syslocks exceeds a ten-second cap — a self-join and a plain single scan alike. syslocks is synthesised from shared memory across every lock in the server, so on a busy one it costs more than the whole budget whatever the query asks for. The resolver, the grading and the chain logic are built and unit-tested, and the UI says the source timed out rather than claiming the server does not expose it — but the answer you opened it for reads Unknown. Use onstat -g lok. Raising the cap is not the fix: since cancel does not reach the server, a longer cap means a longer unstoppable statement holding a connection. Two more per-session figures are absent for the same kind of reason — the current statement needs SELECT on syssqlcurses, which an ordinary account does not have, and temporary space is not derivable from what IMS reads.
User-defined types are missing from the object tree.
Descoped rather than diagnosed. Everything else lists correctly.

Unsupported, provided as-is, and not a replacement for the Informix CLI. IMPLEMENTATION-TODO.md records exactly what is and isn't built, item by item, and the changelog carries the standing limits of every build so far.

What it needs.

Windows
10 or 11, 64-bit. The .NET runtime travels in the folder — no installer, no administrator rights.
Informix Client SDK
Required but not bundled — IMS assumes no redistribution rights for IBM client libraries. Needs IBM INFORMIX ODBC DRIVER (64-bit) registered; developed against CSDK 4.10.FC1DE. How to install it · Fix Central (search Informix Client Software Development Kit; an IBMid and an entitled account are required). If your organisation already runs Informix it often arrives with the server tooling — your DBA can point you at the licensed copy, usually quicker than Fix Central.
Informix server
14.10, tested. 12.10 is untested rather than refused: IMS detects capabilities instead of branching on version number, so it may work and should degrade rather than fail — treat it as unsupported.
If it will not connect
Open Help → About IMS: it reports the detected SDK version, INFORMIXDIR, and the ODBC driver name. An empty INFORMIXDIR means the SDK is not installed for this account; (none registered) means the SDK is there but its 64-bit driver is not — IMS is a 64-bit process and cannot load a 32-bit driver. Error -354 means the connection names no database, which the driver permits and the server refuses. The manual covers the rest.

Build it yourself.

Warnings are errors across every project, so a clean build is also the code-quality gate. No test connects to an Informix instance.

PowerShell

dotnet restore ims.sln
dotnet build   ims.sln --configuration Release
dotnet test    ims.sln --configuration Release
dotnet run     --project src/Ims.App

The PRD carries the scope, the decisions and their rationale, and the requirement IDs that code comments cite. Pilot testers should read PILOT-INSTALL.md, which is written for them rather than for a developer.