Skip to content

Services

Services are a higher-level abstraction over processes. While processes provide low-level control for running any command, services offer pre-configured interfaces for existing software like databases.

Here's an example starting PostgreSQL with a few extensions:

devenv.nix
{ pkgs, ... }:

{
  services.postgres = {
    enable = true;
    package = pkgs.postgresql_15;
    initialDatabases = [{ name = "mydb"; }];
    extensions = extensions: [
      extensions.postgis
      extensions.timescaledb
    ];
    settings.shared_preload_libraries = "timescaledb";
    initialScript = "CREATE EXTENSION IF NOT EXISTS timescaledb;";
  };
}

Services start like processes with devenv up:

$ devenv up
Starting processes ...

Service states are persisted to directories in $DEVENV_STATE. When you adjust options like the above used initialScript, you will have to delete the service's directory for changes to take effect on next devenv up.

Services in the background

Services start in the foreground by default. If you want to start services up in the background, you can pass the -d flag:

$ devenv up -d

Supported services

services.adminer.enable = true;
services.blackfire.enable = true;
services.caddy.enable = true;
services.cassandra.enable = true;
services.clickhouse.enable = true;
services.cockroachdb.enable = true;
services.couchdb.enable = true;
services.dynamodb-local.enable = true;
services.elasticmq.enable = true;
services.elasticsearch.enable = true;
services.httpbin.enable = true;
services.influxdb.enable = true;
services.kafka.enable = true;
services.keycloak.enable = true;
services.mailhog.enable = true;
services.mailpit.enable = true;
services.meilisearch.enable = true;
services.memcached.enable = true;
services.minio.enable = true;
services.mongodb.enable = true;
services.mysql.enable = true;
services.nginx.enable = true;
services.opensearch.enable = true;
services.opentelemetry-collector.enable = true;
services.postgres.enable = true;
services.prometheus.enable = true;
services.rabbitmq.enable = true;
services.redis.enable = true;
services.sqld.enable = true;
services.tailscale.enable = true;
services.temporal.enable = true;
services.tideways.enable = true;
services.trafficserver.enable = true;
services.typesense.enable = true;
services.varnish.enable = true;
services.vault.enable = true;
services.wiremock.enable = true;

You can find all supported options for services here.