diff --git a/cmd/termmapper/main.go b/cmd/termmapper/main.go
index c31b6b1..0f619c1 100644
--- a/cmd/termmapper/main.go
+++ b/cmd/termmapper/main.go
@@ -1,7 +1,6 @@
 package main
 
 import (
-	"flag"
 	"fmt"
 	"os"
 	"os/signal"
@@ -9,6 +8,7 @@
 	"syscall"
 
 	"github.com/KorAP/KoralPipe-TermMapper/mapper"
+	"github.com/alecthomas/kong"
 	"github.com/gofiber/fiber/v2"
 	"github.com/rs/zerolog"
 	"github.com/rs/zerolog/log"
@@ -20,38 +20,21 @@
 )
 
 type config struct {
-	port     int
-	config   string
-	logLevel string
+	Port     int    `kong:"short='p',default='8080',help='Port to listen on'"`
+	Config   string `kong:"short='c',required,help='YAML configuration file containing mapping directives'"`
+	LogLevel string `kong:"short='l',default='info',help='Log level (debug, info, warn, error)'"`
 }
 
-func parseFlags() *config {
+func parseConfig() *config {
 	cfg := &config{}
-
-	flag.IntVar(&cfg.port, "port", 8080, "Port to listen on")
-	flag.IntVar(&cfg.port, "p", 8080, "Port to listen on (shorthand)")
-
-	flag.StringVar(&cfg.config, "config", "", "YAML configuration file containing mapping directives")
-	flag.StringVar(&cfg.config, "c", "", "YAML configuration file containing mapping directives (shorthand)")
-
-	flag.StringVar(&cfg.logLevel, "log-level", "info", "Log level (debug, info, warn, error)")
-	flag.StringVar(&cfg.logLevel, "l", "info", "Log level (shorthand)")
-
-	flag.Usage = func() {
-		fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
-		fmt.Fprintf(os.Stderr, "\nA web service for transforming JSON objects using term mapping rules.\n\n")
-		fmt.Fprintf(os.Stderr, "Options:\n")
-		flag.PrintDefaults()
-	}
-
-	flag.Parse()
-
-	if cfg.config == "" {
-		fmt.Fprintln(os.Stderr, "Error: config file is required")
-		flag.Usage()
+	ctx := kong.Parse(cfg,
+		kong.Description("A web service for transforming JSON objects using term mapping rules."),
+		kong.UsageOnError(),
+	)
+	if ctx.Error != nil {
+		fmt.Fprintln(os.Stderr, ctx.Error)
 		os.Exit(1)
 	}
-
 	return cfg
 }
 
@@ -70,13 +53,13 @@
 
 func main() {
 	// Parse command line flags
-	cfg := parseFlags()
+	cfg := parseConfig()
 
 	// Set up logging
-	setupLogger(cfg.logLevel)
+	setupLogger(cfg.LogLevel)
 
 	// Create a new mapper instance
-	m, err := mapper.NewMapper(cfg.config)
+	m, err := mapper.NewMapper(cfg.Config)
 	if err != nil {
 		log.Fatal().Err(err).Msg("Failed to create mapper")
 	}
@@ -92,8 +75,8 @@
 
 	// Start server
 	go func() {
-		log.Info().Int("port", cfg.port).Msg("Starting server")
-		if err := app.Listen(fmt.Sprintf(":%d", cfg.port)); err != nil {
+		log.Info().Int("port", cfg.Port).Msg("Starting server")
+		if err := app.Listen(fmt.Sprintf(":%d", cfg.Port)); err != nil {
 			log.Fatal().Err(err).Msg("Server error")
 		}
 	}()
diff --git a/go.mod b/go.mod
index e6f4c32..c166c3b 100644
--- a/go.mod
+++ b/go.mod
@@ -5,6 +5,7 @@
 toolchain go1.23.9
 
 require (
+	github.com/alecthomas/kong v1.11.0
 	github.com/alecthomas/participle/v2 v2.1.4
 	github.com/gofiber/fiber/v2 v2.52.8
 	github.com/rs/zerolog v1.34.0
diff --git a/go.sum b/go.sum
index 7d1da80..a793d95 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,7 @@
 github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
 github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
+github.com/alecthomas/kong v1.11.0 h1:y++1gI7jf8O7G7l4LZo5ASFhrhJvzc+WgF/arranEmM=
+github.com/alecthomas/kong v1.11.0/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU=
 github.com/alecthomas/participle/v2 v2.1.4 h1:W/H79S8Sat/krZ3el6sQMvMaahJ+XcM9WSI2naI7w2U=
 github.com/alecthomas/participle/v2 v2.1.4/go.mod h1:8tqVbpTX20Ru4NfYQgZf4mP18eXPTBViyMWiArNEgGI=
 github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=
