Getting Started

Deploy osctrl your way

Three paths to a running deployment: Docker Compose for a quick start, the provisioning script for native installs, or building from source.

Option 1 ยท Recommended

๐Ÿณ Docker Compose

The fastest way to get a fully functional deployment โ€” all services, PostgreSQL and Redis wired together.

# Clone the repository
$ git clone https://github.com/jmpsec/osctrl.git
$ cd osctrl

# Build and run the whole stack in Docker
$ make docker_dev

Requires Docker and Docker Compose. The stack is defined in docker-compose-dev.yml.

Frontend (React SPA)

https://localhost:8444
The primary operator experience.

Legacy admin UI

https://localhost:8443
The server-rendered osctrl-admin interface.

Option 2

๐Ÿค– Provisioning script

The deploy/provision.sh script installs all dependencies and configures osctrl on a recent Ubuntu LTS system โ€” usable for development and, with care, for production deployments.

# From a fresh Ubuntu LTS machine
$ git clone https://github.com/jmpsec/osctrl.git
$ cd osctrl
$ ./deploy/provision.sh --help

See the native deployment documentation for full usage, flags and production guidance.

Option 3

๐Ÿ— Build from source

All you need is Go 1.26.3+ (and Node.js 20+ if you're working on the frontend).

$ git clone https://github.com/jmpsec/osctrl.git
$ cd osctrl
$ make

Compiles all components โ€” osctrl-tls, osctrl-admin, osctrl-api, osctrl-cli โ€” into bin/, and builds the frontend bundle. For frontend-only work: make frontend-dev.

Next steps

From zero to managed fleet

1

Create an environment

Environments group your nodes and hold their osquery configuration, enrollment secrets and query schedules.

2

Enroll your nodes

osctrl generates enrollment packages and one-liners per environment. Point your osquery agents at your TLS endpoint and they appear in the UI.

3

Query your fleet

Run on-demand distributed queries, schedule packs, open a node console, and carve files when you need artifacts.

Full guides at osctrl.net โ€” deployment, components, CLI usage and API reference.

Questions along the way?

Join #osctrl in the osquery Slack, or open an issue on GitHub.