Deployment modes
DK Studio ships in two modes: a hosted studio operated by DK Studio, and an in-house installation running on infrastructure you control. They are the same product β the same REST API, the same agent protocol, the same case model, the same reports. This page compares them, explains how to choose, and covers moving from one to the other.
The two modes at a glance
| Question | Hosted studio | In-house installation |
|---|---|---|
| Who operates the studio | DK Studio | You |
| What you install | The agents on your benches | The studio, the socket server, the database |
| Where the data lives | With DK Studio | On your infrastructure |
| How agent licences are issued | From the admin screen of the hosted studio | From the admin screen of your studio |
| What happens when a bench is offline | The bench's commands wait; other benches are unaffected | The same β the connection model is unchanged |
| How you reach the studio | A browser, over https | A browser, over http or https on your network |
Hosted studio
In the hosted mode the studio runs on DK Studio's infrastructure. The team works in a browser; there is nothing to install except the agents on the benches.
The agents are the same agents you would install yourself. They reach the hosted studio over the
outbound connection they already make β an http or https URL, and the studio's own port. The
bench needs no inbound port, no port forwarding and no VPN client.
Licensing is per agent. An administrator opens Admin β Licences, issues a licence, and hands the licence code to the bench operator. The licence is one seat for one bench, and the same revocation rules apply as in an in-house install. See Agent registration and entitlements.
Hosted does not mean the studio calls your benches. The agent dials out to the hosted studio over the same two channels it uses for an in-house install β the Socket.IO push path and the REST polling fallback β and the hosted studio never dials back. See Network requirements.
In-house installation
The studio, the socket server and the database all run on infrastructure you control. One studio process serves the UI, the REST API and the Socket.IO endpoint on port 3000.
The database engine is chosen at setup:
| Engine | Driver | Notes |
|---|---|---|
| SQLite | better-sqlite3 | The default. The database is a file under DATA_DIR. |
| PostgreSQL | pg | Server-based. |
| MySQL | mysql2 | Server-based. |
The schema is applied at setup by the wizard's initialize step (POST /api/system/setup with
{"step":"initialize"}), from the three parallel DDL files, each defining the same 21 tables.
Configuration comes from two places:
- Environment variables β
PORT,HOSTNAME,NODE_ENVandDATA_DIRfor the studio, andAGENT_PORTandAGENT_HOSTfor the agent. - Files in the working directory β
.db-config.json(the engine and its connection details),.studio-license.json,.setup-progress.jsonand the.setup-completemarker.
The full procedure, the start order, the backup and restore steps are in Self-hosted deployment.
What is identical in both modes
- The agent always dials out. No inbound port is opened on a bench or on the studio's server, in either mode.
- The same REST API. The same endpoints, the same request and response bodies.
- The same agent protocol. The same socket envelope, the same handshake, the same command vocabulary.
- The same case model, the same runs, the same reports. A case written for one mode runs in the other without change.
The mode is a decision about where the processes run, not about what the product does.
Choosing a mode
Choose the hosted studio when the team wants to work on the platform without operating a server, and the data the runs produce is not restricted by an internal policy. Choose an in-house installation when the case definitions, the run results and the evidence they contain have to stay inside your network, or when the studio has to sit on a network the bench can reach but nothing else can.
Moving between modes
The schema is the same in both modes, so a migration is a database movement plus a change of address.
In-house to hosted. Take a dump of the database, load it into the hosted studio, and point
the agents at the hosted studio's URL. The agent rows and their credentials move with the dump, so
a bench keeps its identity; what changes is the studioUrl it is registered against.
Hosted to in-house. Take a dump from the hosted studio, restore it into an engine you control,
write the matching .db-config.json in the studio's working directory, and start the studio. The
agents are pointed at your studio's URL and re-registered there.
Two things to check after either move:
- The licence seats. Agent licences are rows in the database and travel with it. Confirm that the number of seats matches the fleet you are about to run.
- The command history. The database carries the command records and their results. A dump carries them into the new home, and they carry whatever those commands printed.
The security consequence of each mode
| Hosted studio | In-house installation | |
|---|---|---|
| Where the case definitions and run results live | With DK Studio | On your infrastructure |
| Who can read the database | DK Studio's operators, and you, by role | Whoever holds the database credentials |
| Where the backups are | Taken by DK Studio | Taken by you, under your retention policy |
| What a script printed to stdout | Recorded in the command history, with DK Studio | Recorded in the command history, with you |
| What leaves your network | The agent's outbound connection, and the data in it | Nothing |
In the hosted mode, the data of a digital key programme β the case definitions, the run results, the captured screens and anything a bench command printed β lives with DK Studio. In the in-house mode it never leaves your network, and the database is the last line of defence: whoever holds the database credentials holds everything the studio holds.
The rest of the security model is the same in both modes. The session cookie expires after seven days, agent credentials are sent in request bodies and socket payloads rather than in headers, and licence codes are shown once, at issue. See Security and privacy.
Related pages
- Self-hosted deployment β the in-house install in detail.
- Network requirements β who dials whom, and which ports.
- Agent registration and entitlements β issuing a licence per bench.
- Configuration β every environment variable and file.
- Setup wizard β the first-run flow.