UWSGI-CORE(1)

๐Ÿ’– uwsgi-core(1) ๐Ÿ’–

okay bestie, welcome to the uwsgi-core manual page (that's the manual name, and no we're not gonna pretend we're above introducing it). this is part 1 of 6, so buckle up, hydrate, and let's get into it ๐Ÿซถ


โœจ NAME โœจ

uwsgi-core โ€” fast (pure C), self-healing, developer-friendly WSGI server

like. it's a WSGI server. it's pure C. it heals itself. it's friendly to developers. the whole package, no notes ๐Ÿ’…


๐ŸŒธ SYNOPSIS ๐ŸŒธ

uwsgi-core [options...]

that's it. that's the whole invocation. you just throw options... at it and it goes โœจ


๐Ÿฆ‹ DESCRIPTION ๐Ÿฆ‹

so basically uWSGI has a lot of options, and this is where they all live. think of this section as the group chat where every flag gets its moment. let's go one by one, no skipping, we do not leave anyone on read ๐Ÿ’œ

๐Ÿ”Œ sockets, the main character energy ๐Ÿ”Œ

  • -s, --socket โ€” bind to the specified UNIX/TCP socket using default protocol
  • -s, --uwsgi-socket โ€” bind to the specified UNIX/TCP socket using uwsgi protocol
  • --suwsgi-socket โ€” bind to the specified UNIX/TCP socket using uwsgi protocol over SSL
  • --ssl-socket โ€” bind to the specified UNIX/TCP socket using uwsgi protocol over SSL
  • --http-socket โ€” bind to the specified UNIX/TCP socket using HTTP protocol
  • --http-socket-modifier1 โ€” force the specified modifier1 when using HTTP protocol
  • --http-socket-modifier2 โ€” force the specified modifier2 when using HTTP protocol
  • --http11-socket โ€” bind to the specified UNIX/TCP socket using HTTP 1.1 (Keep-Alive) protocol
  • --https-socket โ€” bind to the specified UNIX/TCP socket using HTTPS protocol
  • --https-socket-modifier1 โ€” force the specified modifier1 when using HTTPS protocol
  • --https-socket-modifier2 โ€” force the specified modifier2 when using HTTPS protocol
  • --fastcgi-socket โ€” bind to the specified UNIX/TCP socket using FastCGI protocol
  • --fastcgi-nph-socket โ€” bind to the specified UNIX/TCP socket using FastCGI protocol (nph mode)
  • --fastcgi-modifier1 โ€” force the specified modifier1 when using FastCGI protocol
  • --fastcgi-modifier2 โ€” force the specified modifier2 when using FastCGI protocol
  • --scgi-socket โ€” bind to the specified UNIX/TCP socket using SCGI protocol
  • --scgi-nph-socket โ€” bind to the specified UNIX/TCP socket using SCGI protocol (nph mode)
  • --scgi-modifier1 โ€” force the specified modifier1 when using SCGI protocol
  • --scgi-modifier2 โ€” force the specified modifier2 when using SCGI protocol
  • --raw-socket โ€” bind to the specified UNIX/TCP socket using RAW protocol
  • --raw-modifier1 โ€” force the specified modifier1 when using RAW protocol
  • --raw-modifier2 โ€” force the specified modifier2 when using RAW protocol
  • --puwsgi-socket โ€” bind to the specified UNIX/TCP socket using persistent uwsgi protocol (puwsgi)
  • --protocol โ€” force the specified protocol for default sockets
  • --socket-protocol โ€” force the specified protocol for default sockets
  • --shared-socket โ€” create a shared socket for advanced jailing or ipc
  • --undeferred-shared-socket โ€” create a shared socket for advanced jailing or ipc (undeferred mode)

so many protocols bestie, it's giving versatility ๐Ÿ”ฅ


๐Ÿ‘‘ workers & harakiri (yes that's really the name) ๐Ÿ‘‘

  • -p, --processes โ€” spawn the specified number of workers/processes
  • -p, --workers โ€” spawn the specified number of workers/processes
  • --thunder-lock โ€” serialize accept() usage (if possible)
  • -t, --harakiri โ€” set harakiri timeout
  • --harakiri-verbose โ€” enable verbose mode for harakiri
  • --harakiri-graceful-timeout โ€” interval between graceful harakiri attempt and a sigkill
  • --harakiri-graceful-signal โ€” use this signal instead of sigterm for graceful harakiri attempts
  • --harakiri-queue-threshold โ€” only trigger harakiri if queue is greater than this threshold
  • --harakiri-no-arh โ€” do not enable harakiri during after-request-hook
  • --no-harakiri-arh โ€” do not enable harakiri during after-request-hook
  • --no-harakiri-after-req-hook โ€” do not enable harakiri during after-request-hook
  • --backtrace-depth โ€” set backtrace depth
  • --mule-harakiri โ€” set harakiri timeout for mule tasks

"harakiri" is the timeout that takes a worker out back when it's acting up, and honestly? dramatic but fair ๐Ÿ’€


๐Ÿ“œ config loading & placeholders ๐Ÿ“œ

  • -x, --xmlconfig โ€” load config from xml file
  • -x, --xml โ€” load config from xml file
  • --config โ€” load configuration using the pluggable system
  • --fallback-config โ€” re-exec uwsgi with the specified config when exit code is 1
  • --strict โ€” enable strict mode (placeholder cannot be used)
  • --skip-zero โ€” skip check of file descriptor 0
  • --skip-atexit โ€” skip atexit hooks (ignored by the master)
  • --skip-atexit-teardown โ€” skip atexit teardown (ignored by the master)
  • -S, --set โ€” set a placeholder or an option
  • --set-placeholder โ€” set a placeholder
  • --set-ph โ€” set a placeholder
  • --get โ€” print the specified option value and exit
  • --declare-option โ€” declare a new uWSGI custom option
  • --declare-option2 โ€” declare a new uWSGI custom option (non-immediate)
  • --resolve โ€” place the result of a dns query in the specified placeholder, sytax: placeholder=name (immediate option)
ngl the word "sytax" is right there in the original and we are preserving it exactly, character for character, because facts stay facts even when they're a lil typo ๐Ÿ™ˆ

๐Ÿงš opt logic, aka the if/for girlies ๐Ÿงš

  • --for โ€” (opt logic) for cycle
  • --for-glob โ€” (opt logic) for cycle (expand glob)
  • --for-times โ€” (opt logic) for cycle (expand the specified num to a list starting from 1)
  • --for-readline โ€” (opt logic) for cycle (expand the specified file to a list of lines)
  • --endfor โ€” (opt logic) end for cycle
  • --end-for โ€” (opt logic) end for cycle
  • --if-opt โ€” (opt logic) check for option
  • --if-not-opt โ€” (opt logic) check for option
  • --if-env โ€” (opt logic) check for environment variable
  • --if-not-env โ€” (opt logic) check for environment variable
  • --ifenv โ€” (opt logic) check for environment variable
  • --if-reload โ€” (opt logic) check for reload
  • --if-not-reload โ€” (opt logic) check for reload
  • --if-hostname โ€” (opt logic) check for hostname
  • --if-not-hostname โ€” (opt logic) check for hostname
  • --if-hostname-match โ€” (opt logic) try to match hostname against a regular expression
  • --if-not-hostname-match โ€” (opt logic) try to match hostname against a regular expression
  • --if-exists โ€” (opt logic) check for file/directory existence
  • --if-not-exists โ€” (opt logic) check for file/directory existence
  • --ifexists โ€” (opt logic) check for file/directory existence
  • --if-plugin โ€” (opt logic) check for plugin
  • --if-not-plugin โ€” (opt logic) check for plugin
  • --ifplugin โ€” (opt logic) check for plugin
  • --if-file โ€” (opt logic) check for file existence
  • --if-not-file โ€” (opt logic) check for file existence
  • --if-dir โ€” (opt logic) check for directory existence
  • --if-not-dir โ€” (opt logic) check for directory existence
  • --ifdir โ€” (opt logic) check for directory existence
  • --if-directory โ€” (opt logic) check for directory existence
  • --endif โ€” (opt logic) end if
  • --end-if โ€” (opt logic) end if

the way you can write conditionals and loops inside your config file?? it's giving programming language but make it config โœจ


๐ŸŽ€ lists & write-error behaviour ๐ŸŽ€

  • --blacklist โ€” set options blacklist context
  • --end-blacklist โ€” clear options blacklist context
  • --whitelist โ€” set options whitelist context
  • --end-whitelist โ€” clear options whitelist context
  • --ignore-sigpipe โ€” do not report (annoying) SIGPIPE
  • --ignore-write-errors โ€” do not report (annoying) write()/writev() errors
  • --write-errors-tolerance โ€” set the maximum number of allowed write errors (default: no tolerance)
  • --write-errors-exception-only โ€” only raise an exception on write errors giving control to the app itself
  • --disable-write-exception โ€” disable exception generation on write()/writev()
the default here is no tolerance, so if you want any wiggle room at all you gotta set it yourself. she is strict ๐Ÿ’…

๐ŸŒˆ templating & includes ๐ŸŒˆ

  • --inherit โ€” use the specified file as config template
  • --include โ€” include the specified file as immediate configuration
  • --inject-before โ€” inject a text file before the config file (advanced templating)
  • --inject-after โ€” inject a text file after the config file (advanced templating)

advanced templating bestie, we love a config that composes ๐Ÿฆ‹


๐Ÿ’œ daemonizing & instance control ๐Ÿ’œ

  • -d, --daemonize โ€” daemonize uWSGI
  • --daemonize2 โ€” daemonize uWSGI after app loading
  • --stop โ€” stop an instance
  • --reload โ€” reload an instance
  • --pause โ€” pause an instance
  • --suspend โ€” suspend an instance
  • --resume โ€” resume an instance
  • --connect-and-read โ€” connect to a socket and wait for data from it
  • --extract โ€” fetch/dump any supported address to stdout

main character energy: she can stop, reload, pause, suspend and resume herself. obsessed ๐Ÿ˜ญ


โญ sizes, buffers & socket tweaks โญ

  • -l, --listen โ€” set the socket listen queue size
  • -v, --max-vars โ€” set the amount of internal iovec/vars structures
  • --max-apps โ€” set the maximum number of per-worker applications
  • -b, --buffer-size โ€” set internal buffer size
  • -m, --memory-report โ€” enable memory report
  • --profiler โ€” enable the specified profiler
  • -c, --cgi-mode โ€” force CGI-mode for plugins supporting it
  • -a, --abstract-socket โ€” force UNIX socket in abstract mode (Linux only)
  • -C, --chmod-socket โ€” chmod-socket
  • -C, --chmod โ€” chmod-socket
  • --chown-socket โ€” chown unix sockets
  • --umask โ€” set umask
  • --freebind โ€” put socket in freebind mode
  • --map-socket โ€” map sockets to specific workers
-a is Linux only, so don't come crying to her on macOS about abstract sockets ๐Ÿ“

๐Ÿงต process names & threading ๐Ÿงต

  • -T, --enable-threads โ€” enable threads (stub option this is true by default)
  • --no-threads-wait โ€” do not wait for threads cancellation on quit/reload
  • --auto-procname โ€” automatically set processes name to something meaningful
  • --procname-prefix โ€” add a prefix to the process names
  • --procname-prefix-spaced โ€” add a spaced prefix to the process names
  • --procname-append โ€” append a string to process names
  • --procname โ€” set process names
  • --procname-master โ€” set master process name
  • -i, --single-interpreter โ€” do not use multiple interpreters (where available)
  • --need-app โ€” exit if no app can be loaded
  • -M, --master โ€” enable master process
  • --honour-stdin โ€” do not remap stdin to /dev/null

not me pointing out that -T|--enable-threads is a stub option and it's true by default ๐Ÿ™ˆ girl, you don't even need to ask.


๐Ÿ‘‘ the Emperor (yes, capital E) ๐Ÿ‘‘

  • --emperor โ€” run the Emperor
  • --emperor-proxy-socket โ€” force the vassal to became an Emperor proxy
  • --emperor-wrapper โ€” set a binary wrapper for vassals
  • --emperor-wrapper-override โ€” set a binary wrapper for vassals to try before the default one
  • --emperor-wrapper-fallback โ€” set a binary wrapper for vassals to try as a last resort
  • --emperor-nofollow โ€” do not follow symlinks when checking for mtime
  • --emperor-procname โ€” set the Emperor process name
  • --emperor-freq โ€” set the Emperor scan frequency (default 3 seconds)
  • --emperor-required-heartbeat โ€” set the Emperor tolerance about heartbeats
  • --emperor-curse-tolerance โ€” set the Emperor tolerance about cursed vassals

she has an Emperor, she has vassals, she has cursed vassals and a tolerance setting for them ๐Ÿ’€ that's not a server, that's a whole monarchy.


and that's part 1, bestie โ€” the sockets, the workers, the opt logic, the Emperor, all of it. part 2 is coming, so don't go anywhere ๐Ÿ’–

  • --emperor-pidfile โ€” bestie, this one writes the Emperor pid into the file you point at ๐Ÿ“๐Ÿ’–
  • --emperor-tyrant โ€” puts the Emperor in Tyrant mode, no cap ๐Ÿ‘‘๐Ÿ˜ˆ
  • --emperor-tyrant-nofollow โ€” in Tyrant mode, do not follow symlinks when checking uid/gid ๐Ÿšซ๐Ÿ”—
  • --emperor-stats โ€” runs the Emperor stats server, it's giving observability ๐Ÿ“Šโœจ
  • --emperor-stats-server โ€” runs the Emperor stats server, same vibe ๐Ÿ“Šโœจ
  • --early-emperor โ€” spawns the emperor as soon as possible, main character energy โฉ
  • --emperor-broodlord โ€” runs the emperor in BroodLord mode ๐Ÿ‰
  • --emperor-throttle โ€” sets throttling level (in milliseconds) for bad behaving vassals โ€” default is 1000 ๐Ÿ˜ค
  • --emperor-max-throttle โ€” sets max throttling level (in milliseconds) for bad behaving vassals โ€” default is 3 minutes ๐Ÿ’€
  • --emperor-magic-exec โ€” prefixes vassals config files with exec:// if they have the executable bit โœจ
  • --emperor-on-demand-extension โ€” searches for a text file (vassal name + extension) containing the on demand socket name ๐Ÿ”
  • --emperor-on-demand-ext โ€” searches for a text file (vassal name + extension) containing the on demand socket name ๐Ÿ”
  • --emperor-on-demand-directory โ€” enables on demand mode binding to the unix socket in the specified directory named like the vassal + .socket ๐Ÿงฆ
  • --emperor-on-demand-dir โ€” enables on demand mode binding to the unix socket in the specified directory named like the vassal + .socket ๐Ÿงฆ
  • --emperor-on-demand-exec โ€” uses the output of the specified command as on demand socket name (the vassal name is passed as the only argument) ๐ŸŽฏ
  • --emperor-extra-extension โ€” allows the specified extension in the Emperor (vassal will be called with --config) ๐Ÿช„
  • --emperor-extra-ext โ€” allows the specified extension in the Emperor (vassal will be called with --config) ๐Ÿช„
  • --emperor-no-blacklist โ€” disables the Emperor blacklisting subsystem ๐Ÿšซ
  • --emperor-use-clone โ€” uses clone() instead of fork(), passing the specified unshare() flags ๐Ÿงฌ
  • --emperor-graceful-shutdown โ€” uses vassals graceful shutdown during ragnarok ๐ŸŒธ
  • --emperor-cap โ€” sets vassals capability ๐Ÿ›ก๏ธ
  • --vassals-cap โ€” sets vassals capability ๐Ÿ›ก๏ธ
  • --vassal-cap โ€” sets vassals capability ๐Ÿ›ก๏ธ
  • --imperial-monitor-list โ€” lists enabled imperial monitors ๐Ÿ‘€
  • --imperial-monitors-list โ€” lists enabled imperial monitors ๐Ÿ‘€
  • --vassals-inherit โ€” adds config templates to vassals config (uses --inherit) ๐Ÿ“œ
  • --vassals-include โ€” includes config templates to vassals config (uses --include instead of --inherit) ๐Ÿ“Ž
  • --vassals-inherit-before โ€” adds config templates to vassals config (uses --inherit, parses before the vassal file) โช
  • --vassals-include-before โ€” includes config templates to vassals config (uses --include instead of --inherit, parses before the vassal file) โฎ๏ธ
  • --vassals-start-hook โ€” runs the specified command before each vassal starts ๐Ÿš€
  • --vassals-stop-hook โ€” runs the specified command after vassal's death ๐Ÿชฆ
  • --vassal-sos โ€” asks emperor for reinforcement when overloaded ๐Ÿ†˜
  • --vassal-sos-backlog โ€” asks emperor for SOS if backlog queue has more items than the value specified ๐Ÿ“ˆ
  • --vassals-set โ€” automatically sets the specified option (via --set) for every vassal ๐ŸŽ›๏ธ
  • --vassal-set โ€” automatically sets the specified option (via --set) for every vassal ๐ŸŽ›๏ธ
  • --heartbeat โ€” announces healthiness to the emperor ๐Ÿ’“
  • --reload-mercy โ€” sets the maximum time (in seconds) we wait for workers and other processes to die during reload/shutdown โณ
  • --worker-reload-mercy โ€” sets the maximum time (in seconds) a worker can take to reload/shutdown โ€” default is 60 โฑ๏ธ
  • --mule-reload-mercy โ€” sets the maximum time (in seconds) a mule can take to reload/shutdown โ€” default is 60 ๐Ÿด
  • --exit-on-reload โ€” forces exit even if a reload is requested ๐Ÿšช
  • --die-on-term โ€” exits instead of brutal reload on SIGTERM โ˜ ๏ธ
  • --force-gateway โ€” forces the spawn of the first registered gateway without a master ๐Ÿšช
  • -h|--help โ€” shows this help ๐Ÿ™‹โ™€๏ธ
  • -h|--usage โ€” shows this help ๐Ÿ™‹โ™€๏ธ
  • --print-sym โ€” prints content of the specified binary symbol ๐Ÿ”ฃ
  • --print-symbol โ€” prints content of the specified binary symbol ๐Ÿ”ฃ
  • -r|--reaper โ€” calls waitpid(-1,...) after each request to get rid of zombies ๐ŸงŸ
  • -R|--max-requests โ€” reloads workers after the specified amount of managed requests ๐Ÿ”„
  • --max-requests-delta โ€” adds (worker_id * delta) to the max_requests value of each worker โž•
  • --min-worker-lifetime โ€” number of seconds worker must run before being reloaded โ€” default is 10 โฒ๏ธ
  • --max-worker-lifetime โ€” reloads workers after the specified amount of seconds โ€” default is disabled ๐Ÿšซ
  • --max-worker-lifetime-delta โ€” adds (worker_id * delta) seconds to the max_worker_lifetime value of each worker โž•
  • -z|--socket-timeout โ€” sets internal sockets timeout โฐ
  • --no-fd-passing โ€” disables file descriptor passing ๐Ÿšซ๐Ÿ“
  • --locks โ€” creates the specified number of shared locks ๐Ÿ”’
  • --lock-engine โ€” sets the lock engine ๐Ÿ”
  • --ftok โ€” sets the ipcsem key via ftok() for avoiding duplicates ๐Ÿ—๏ธ
  • --persistent-ipcsem โ€” does not remove ipcsem's on shutdown ๐Ÿงท
  • -A|--sharedarea โ€” creates a raw shared memory area of specified pages (note: it supports keyval too) ๐Ÿง 
  • --safe-fd โ€” does not close the specified file descriptor ๐Ÿ›‘
  • --fd-safe โ€” does not close the specified file descriptor ๐Ÿ›‘
  • --cache โ€” creates a shared cache containing given elements ๐Ÿ—ƒ๏ธ
  • --cache-blocksize โ€” sets cache blocksize ๐Ÿ“ฆ
  • --cache-store โ€” enables persistent cache to disk ๐Ÿ’พ
  • --cache-store-sync โ€” sets frequency of sync for persistent cache ๐Ÿ”„
  • --cache-no-expire โ€” disables auto sweep of expired items ๐Ÿงน๐Ÿšซ
  • --cache-expire-freq โ€” sets the frequency of cache sweeper scans โ€” default 3 seconds ๐Ÿงฝ
  • --cache-report-freed-items โ€” constantly reports the cache item freed by the sweeper (use only for debug) ๐Ÿ›
  • --cache-udp-server โ€” binds the cache udp server (used only for set/update/delete) to the specified socket ๐Ÿ“ก
  • --cache-udp-node โ€” sends cache update/deletion to the specified cache udp server ๐Ÿ“ค
  • --cache-sync โ€” copies the whole content of another uWSGI cache server on server startup ๐Ÿ“‹
  • --cache-use-last-modified โ€” updates last_modified_at timestamp on every cache item modification โ€” default is disabled ๐Ÿ•’
  • --add-cache-item โ€” adds an item in the cache โž•
  • --load-file-in-cache โ€” loads a static file in the cache ๐Ÿ“
  • --load-file-in-cache-gzip โ€” loads a static file in the cache with gzip compression ๐Ÿ—œ๏ธ
  • --cache2 โ€” creates a new generation shared cache (keyval syntax) ๐Ÿ†•
  • --queue โ€” enables shared queue ๐Ÿ“ฅ
  • --queue-blocksize โ€” sets queue blocksize ๐Ÿงฑ
  • --queue-store โ€” enables persistent queue to disk ๐Ÿ’ฝ
  • --queue-store-sync โ€” sets frequency of sync for persistent queue ๐Ÿ”
  • -Q|--spooler โ€” runs a spooler on the specified directory ๐Ÿงต
  • --spooler-external โ€” maps spoolers requests to a spooler directory managed by an external instance ๐ŸŒ
  • --spooler-ordered โ€” tries to order the execution of spooler tasks ๐Ÿ“‹
  • --spooler-chdir โ€” chdir()s to specified directory before each spooler task ๐Ÿ“‚
  • --spooler-processes โ€” sets the number of processes for spoolers ๐Ÿง‘๐Ÿณ
  • --spooler-quiet โ€” does not be verbose with spooler tasks ๐Ÿคซ
  • --spooler-max-tasks โ€” sets the maximum number of tasks to run before recycling a spooler โ™ป๏ธ
  • --spooler-harakiri โ€” sets harakiri timeout for spooler tasks ๐Ÿ—ก๏ธ
  • --spooler-frequency โ€” sets spooler frequency ๐Ÿ“ถ
  • --spooler-freq โ€” sets spooler frequency ๐Ÿ“ถ
  • --mule โ€” adds a mule ๐Ÿด
  • --mules โ€” adds the specified number of mules ๐Ÿด๐Ÿด
  • --farm โ€” adds a mule farm ๐Ÿšœ
  • --mule-msg-size โ€” sets mule message buffer size ๐Ÿ“จ
  • --signal โ€” sends a uwsgi signal to a server ๐Ÿ“ถ
  • --signal-bufsize โ€” sets buffer size for signal queue ๐Ÿ“ฆ
  • --signals-bufsize โ€” sets buffer size for signal queue ๐Ÿ“ฆ
  • --signal-timer โ€” adds a timer (syntax: <signal> <seconds>) โฒ๏ธ
  • --timer โ€” adds a timer (syntax: <signal> <seconds>) โฒ๏ธ
  • --signal-rbtimer โ€” adds a redblack timer (syntax: <signal> <seconds>) ๐ŸŒณ
  • --rbtimer โ€” adds a redblack timer (syntax: <signal> <seconds>) ๐ŸŒณ
  • --rpc-max โ€” maximum number of rpc slots โ€” default: 64 ๐ŸŽฐ
  • -L|--disable-logging โ€” disables request logging ๐Ÿค
  • --flock โ€” locks the specified file before starting, exits if locked ๐Ÿ”’
  • --flock-wait โ€” locks the specified file before starting, waits if locked โณ
  • --flock2 โ€” locks the specified file after logging/daemon setup, exits if locked ๐Ÿ”
  • --flock-wait2 โ€” locks the specified file after logging/daemon setup, waits if locked โณ
  • --pidfile โ€” creates pidfile (before privileges drop) ๐Ÿ“
  • --pidfile2 โ€” creates pidfile (after privileges drop) ๐Ÿ“
  • --safe-pidfile โ€” creates safe pidfile (before privileges drop) ๐Ÿ›ก๏ธ๐Ÿ“
  • --safe-pidfile2 โ€” creates safe pidfile (after privileges drop) ๐Ÿ›ก๏ธ๐Ÿ“
  • --chroot โ€” chroot()s to the specified directory ๐Ÿ 
  • --pivot-root โ€” pivot_root()s to the specified directories (new_root and put_old must be separated with a space) ๐Ÿ”„
  • --pivot_root โ€” pivot_root()s to the specified directories (new_root and put_old must be separated with a space) ๐Ÿ”„
  • --uid โ€” setuid to the specified user/uid ๐Ÿ‘ค
  • --gid โ€” setgid to the specified group/gid ๐Ÿ‘ฅ
  • --add-gid โ€” adds the specified group id to the process credentials โž•
  • --immediate-uid โ€” setuid to the specified user/uid IMMEDIATELY ๐Ÿšจ
  • --immediate-gid โ€” setgid to the specified group/gid IMMEDIATELY ๐Ÿšจ
  • --no-initgroups โ€” disables additional groups set via initgroups() ๐Ÿšซ
  • --cap โ€” sets process capability ๐ŸŽฉ
  • --unshare โ€” unshare()s part of the processes and puts it in a new namespace ๐Ÿงฉ
  • --unshare2 โ€” unshare()s part of the processes and puts it in a new namespace after rootfs change ๐Ÿงฉ
  • --setns-socket โ€” exposes a unix socket returning namespace fds from /proc/self/ns ๐Ÿ”Œ
  • --setns-socket-skip โ€” skips the specified entry when sending setns file descriptors โญ๏ธ
  • --setns-skip โ€” skips the specified entry when sending setns file descriptors โญ๏ธ
  • --setns โ€” joins a namespace created by an external uWSGI instance ๐Ÿค
  • --setns-preopen โ€” opens /proc/self/ns as soon as possible and caches fds ๐Ÿ—‚๏ธ

okay so we're still deep in OPTIONS and this chunk is giving life-cycle cinematic universe: hooks, execs, mounts, waits, calls, and all the tuning knobs. no skipping, bestie, every single flag is getting its moment. ๐Ÿ’…

  • --jailed โ€” mark the instance as jailed, which forces the execution of post_jail hooks. ๐Ÿ‘‘
  • --refork โ€” fork() again after privileges drop. useful for jailing systems. ๐Ÿงš
  • --re-fork โ€” fork() again after privileges drop. useful for jailing systems. ๐Ÿงš
  • --refork-as-root โ€” fork() again before privileges drop. useful for jailing systems. ๐Ÿงš
  • --re-fork-as-root โ€” fork() again before privileges drop. useful for jailing systems. ๐Ÿงš
  • --refork-post-jail โ€” fork() again after jailing. useful for jailing systems. ๐Ÿงš
  • --re-fork-post-jail โ€” fork() again after jailing. useful for jailing systems. ๐Ÿงš

and now the hooks โ€” every one of these is literally "run the specified hook" but at a different moment. the timing is the whole personality. ๐ŸŽ€

  • --hook-asap โ€” run the specified hook as soon as possible. โšก
  • --hook-pre-jail โ€” run the specified hook before jailing. ๐Ÿ”’
  • --hook-post-jail โ€” run the specified hook after jailing. ๐Ÿ”“
  • --hook-in-jail โ€” run the specified hook in jail after initialization. ๐Ÿ 
  • --hook-as-root โ€” run the specified hook before privileges drop. ๐Ÿ‘‘
  • --hook-as-user โ€” run the specified hook after privileges drop. ๐Ÿซถ
  • --hook-as-user-atexit โ€” run the specified hook before app exit and reload. ๐Ÿ˜ญ
  • --hook-pre-app โ€” run the specified hook before app loading. ๐Ÿ“ฆ
  • --hook-post-app โ€” run the specified hook after app loading. โœจ
  • --hook-post-fork โ€” run the specified hook after each fork. ๐Ÿด
  • --hook-accepting โ€” run the specified hook after each worker enter the accepting phase. ๐ŸŽง
  • --hook-accepting1 โ€” run the specified hook after the first worker enters the accepting phase. ๐Ÿฅ‡
  • --hook-accepting-once โ€” run the specified hook after each worker enter the accepting phase (once per-instance). ๐Ÿ”‚
  • --hook-accepting1-once โ€” run the specified hook after the first worker enters the accepting phase (once per instance). ๐Ÿฅ‡
  • --hook-master-start โ€” run the specified hook when the Master starts. ๐Ÿ‘‘
  • --hook-touch โ€” run the specified hook when the specified file is touched (syntax: <file> <action>). ๐Ÿ‘†
  • --hook-emperor-start โ€” run the specified hook when the Emperor starts. ๐Ÿ‘‘
  • --hook-emperor-stop โ€” run the specified hook when the Emperor send a stop message. ๐Ÿ›‘
  • --hook-emperor-reload โ€” run the specified hook when the Emperor send a reload message. ๐Ÿ”„
  • --hook-emperor-lost โ€” run the specified hook when the Emperor connection is lost. ๐Ÿ’”
  • --hook-as-vassal โ€” run the specified hook before exec()ing the vassal. ๐Ÿงณ
  • --hook-as-emperor โ€” run the specified hook in the emperor after the vassal has been started. ๐Ÿ‘‘
  • --hook-as-mule โ€” run the specified hook in each mule. ๐Ÿด
  • --hook-as-gateway โ€” run the specified hook in each gateway. ๐Ÿšช
  • --after-request-hook โ€” run the specified function/symbol after each request. ๐ŸŽฏ
  • --after-request-call โ€” run the specified function/symbol after each request. ๐ŸŽฏ

next up: exec flags. same timing energy, but instead of hooks you're running the specified command. ๐Ÿƒโ€โ™€๏ธ

  • --exec-asap โ€” run the specified command as soon as possible. โšก
  • --exec-pre-jail โ€” run the specified command before jailing. ๐Ÿ”’
  • --exec-post-jail โ€” run the specified command after jailing. ๐Ÿ”“
  • --exec-in-jail โ€” run the specified command in jail after initialization. ๐Ÿ 
  • --exec-as-root โ€” run the specified command before privileges drop. ๐Ÿ‘‘
  • --exec-as-user โ€” run the specified command after privileges drop. ๐Ÿซถ
  • --exec-as-user-atexit โ€” run the specified command before app exit and reload. ๐Ÿ˜ญ
  • --exec-pre-app โ€” run the specified command before app loading. ๐Ÿ“ฆ
  • --exec-post-app โ€” run the specified command after app loading. โœจ
  • --exec-as-vassal โ€” run the specified command before exec()ing the vassal. ๐Ÿงณ
  • --exec-as-emperor โ€” run the specified command in the emperor after the vassal has been started. ๐Ÿ‘‘

mount flags: mount filesystem at the stated moment. ๐Ÿ—‚๏ธ

  • --mount-asap โ€” mount filesystem as soon as possible. โšก
  • --mount-pre-jail โ€” mount filesystem before jailing. ๐Ÿ”’
  • --mount-post-jail โ€” mount filesystem after jailing. ๐Ÿ”“
  • --mount-in-jail โ€” mount filesystem in jail after initialization. ๐Ÿ 
  • --mount-as-root โ€” mount filesystem before privileges drop. ๐Ÿ‘‘
  • --mount-as-vassal โ€” mount filesystem before exec()ing the vassal. ๐Ÿงณ
  • --mount-as-emperor โ€” mount filesystem in the emperor after the vassal has been started. ๐Ÿ‘‘

umount flags: unmount filesystem, same timing buffet. ๐Ÿ—‘๏ธ

  • --umount-asap โ€” unmount filesystem as soon as possible. โšก
  • --umount-pre-jail โ€” unmount filesystem before jailing. ๐Ÿ”’
  • --umount-post-jail โ€” unmount filesystem after jailing. ๐Ÿ”“
  • --umount-in-jail โ€” unmount filesystem in jail after initialization. ๐Ÿ 
  • --umount-as-root โ€” unmount filesystem before privileges drop. ๐Ÿ‘‘
  • --umount-as-vassal โ€” unmount filesystem before exec()ing the vassal. ๐Ÿงณ
  • --umount-as-emperor โ€” unmount filesystem in the emperor after the vassal has been started. ๐Ÿ‘‘

wait-for-interface era: make root hooks wait for networking. ๐ŸŒ

  • --wait-for-interface โ€” wait for the specified network interface to come up before running root hooks. ๐Ÿ“ถ
  • --wait-for-interface-timeout โ€” set the timeout for wait-for-interface. โณ
  • --wait-interface โ€” wait for the specified network interface to come up before running root hooks. ๐Ÿ“ถ
  • --wait-interface-timeout โ€” set the timeout for wait-for-interface. โณ
  • --wait-for-iface โ€” wait for the specified network interface to come up before running root hooks. ๐Ÿ“ถ
  • --wait-for-iface-timeout โ€” set the timeout for wait-for-interface. โณ
  • --wait-iface โ€” wait for the specified network interface to come up before running root hooks. ๐Ÿ“ถ
  • --wait-iface-timeout โ€” set the timeout for wait-for-interface. โณ
  • --wait-for-fs โ€” wait for the specified filesystem item to appear before running root hooks. ๐Ÿ“
  • --wait-for-file โ€” wait for the specified file to appear before running root hooks. ๐Ÿ“„
  • --wait-for-dir โ€” wait for the specified directory to appear before running root hooks. ๐Ÿ“‚
  • --wait-for-mountpoint โ€” wait for the specified mountpoint to appear before running root hooks. ๐Ÿ“
  • --wait-for-fs-timeout โ€” set the timeout for wait-for-fs/file/dir. โณ
  • --wait-for-socket โ€” wait for the specified socket to be ready before loading apps. ๐Ÿ”Œ
  • --wait-for-socket-timeout โ€” set the timeout for wait-for-socket. โณ

call flags: call the specified function at the chosen moment. ๐Ÿ“ž

  • --call-asap โ€” call the specified function as soon as possible. โšก
  • --call-pre-jail โ€” call the specified function before jailing. ๐Ÿ”’
  • --call-post-jail โ€” call the specified function after jailing. ๐Ÿ”“
  • --call-in-jail โ€” call the specified function in jail after initialization. ๐Ÿ 
  • --call-as-root โ€” call the specified function before privileges drop. ๐Ÿ‘‘
  • --call-as-user โ€” call the specified function after privileges drop. ๐Ÿซถ
  • --call-as-user-atexit โ€” call the specified function before app exit and reload. ๐Ÿ˜ญ
  • --call-pre-app โ€” call the specified function before app loading. ๐Ÿ“ฆ
  • --call-post-app โ€” call the specified function after app loading. โœจ
  • --call-as-vassal โ€” call the specified function() before exec()ing the vassal. ๐Ÿงณ
  • --call-as-vassal1 โ€” call the specified function(char *) before exec()ing the vassal. ๐Ÿงณ
  • --call-as-vassal3 โ€” call the specified function(char *, uid_t, gid_t) before exec()ing the vassal. ๐Ÿงณ
  • --call-as-emperor โ€” call the specified function() in the emperor after the vassal has been started. ๐Ÿ‘‘
  • --call-as-emperor1 โ€” call the specified function(char *) in the emperor after the vassal has been started. ๐Ÿ‘‘
  • --call-as-emperor2 โ€” call the specified function(char *, pid_t) in the emperor after the vassal has been started. ๐Ÿ‘‘
  • --call-as-emperor4 โ€” call the specified function(char *, pid_t, uid_t, gid_t) in the emperor after the vassal has been started. ๐Ÿ‘‘

config loading, bestie: pick your format. ๐Ÿ“š

  • --ini โ€” load config from ini file. ๐Ÿ“
  • -y|--yaml โ€” load config from yaml file. ๐Ÿงพ
  • -y|--yml โ€” load config from yaml file. ๐Ÿงพ
  • -j|--json โ€” load config from json file. ๐Ÿงพ
  • -j|--js โ€” load config from json file. ๐Ÿงพ
  • --weight โ€” weight of the instance (used by clustering/lb/subscriptions). โš–๏ธ
  • --auto-weight โ€” set weight of the instance automatically (used by clustering/lb/subscriptions). โš–๏ธ
  • --no-server โ€” force no-server mode. ๐Ÿšซ
  • --command-mode โ€” force command mode. ๐ŸŽฎ
  • --no-defer-accept โ€” disable deferred-accept on sockets. ๐Ÿšซ
  • --tcp-nodelay โ€” enable TCP NODELAY on each request. โšก
  • --so-keepalive โ€” enable TCP KEEPALIVEs. ๐Ÿ’“
  • --so-send-timeout โ€” set SO_SNDTIMEO. โณ
  • --socket-send-timeout โ€” set SO_SNDTIMEO. โณ
  • --so-write-timeout โ€” set SO_SNDTIMEO. โณ
  • --socket-write-timeout โ€” set SO_SNDTIMEO. โณ
  • --socket-sndbuf โ€” set SO_SNDBUF. ๐Ÿ“ฆ
  • --socket-rcvbuf โ€” set SO_RCVBUF. ๐Ÿ“ฆ
  • --shutdown-sockets โ€” force calling shutdown() in addition to close() when sockets are destroyed. ๐Ÿ”Œ
  • --limit-as โ€” limit processes address space/vsz. ๐Ÿง 
  • --limit-nproc โ€” limit the number of spawnable processes. ๐Ÿ”ข
  • --reload-on-as โ€” reload if address space is higher than specified megabytes. ๐Ÿ”„
  • --reload-on-rss โ€” reload if rss memory is higher than specified megabytes. ๐Ÿ”„
  • --evil-reload-on-as โ€” force the master to reload a worker if its address space is higher than specified megabytes. ๐Ÿ˜ˆ
  • --evil-reload-on-rss โ€” force the master to reload a worker if its rss memory is higher than specified megabytes. ๐Ÿ˜ˆ
  • --mem-collector-freq โ€” set the memory collector frequency when evil reloads are in place. ๐Ÿงน
  • --reload-on-fd โ€” reload if the specified file descriptor is ready. ๐Ÿ”„
  • --brutal-reload-on-fd โ€” brutal reload if the specified file descriptor is ready. ๐Ÿ’ฅ
  • --ksm โ€” enable Linux KSM. ๐Ÿง
  • --pcre-jit โ€” enable pcre jit (if available). โšก
  • --never-swap โ€” lock all memory pages avoiding swapping. ๐Ÿ”’
  • --touch-reload โ€” reload uWSGI if the specified file is modified/touched. ๐Ÿ‘†
  • --touch-workers-reload โ€” trigger reload of (only) workers if the specified file is modified/touched. ๐Ÿ‘†
  • --touch-mules-reload โ€” reload mules if the specified file is modified/touched. ๐Ÿ‘†
  • --touch-spoolers-reload โ€” reload spoolers if the specified file is modified/touched. ๐Ÿ‘†
  • --touch-chain-reload โ€” trigger chain reload if the specified file is modified/touched. ๐Ÿ‘†
  • --touch-logrotate โ€” trigger logrotation if the specified file is modified/touched. ๐Ÿ‘†
  • --touch-logreopen โ€” trigger log reopen if the specified file is modified/touched. ๐Ÿ‘†
  • --touch-exec โ€” run command when the specified file is modified/touched (syntax: file command). ๐Ÿ‘†
  • --touch-signal โ€” ๐Ÿ‘€ watch a file and fire off a signal the second it gets modified/touched. Syntax goes like file signal, bestie.
  • --fs-reload โ€” if the filesystem object you named gets modified, do a graceful reload. Chill vibes, no drama.
  • --fs-brutal-reload โ€” same energy but make it brutal reload when that filesystem object changes. No soft launch here.
  • --fs-signal โ€” raise a uwsgi signal when the specified filesystem object is modified. Syntax: file signal โœจ
  • --check-mountpoint โ€” if a filesystem becomes unreachable, destroy the instance. Sounds harsh but it's literally useful for reliable Fuse management ๐Ÿ’€
  • --mountpoint-check โ€” same thing, different spelling: destroy the instance if a filesystem is no more reachable (useful for reliable Fuse management).
  • --check-mount โ€” yep, also destroys the instance when a filesystem goes unreachable (useful for reliable Fuse management).
  • --mount-check โ€” the fourth twin ๐Ÿซถ destroy the instance if a filesystem is no more reachable (useful for reliable Fuse management).
  • --propagate-touch โ€” described as an over-engineering option for system with flaky signal management. They said it, not me ๐Ÿ˜ญ
  • --limit-post โ€” cap the request body. Put a limit on it, periodt.
  • --no-orphans โ€” if the master dies, the workers get auto-killed too ๐Ÿชฆ but heads up, this can be dangerous for availability.
  • --prio โ€” set the priority of your processes/threads. Main character scheduling energy ๐Ÿ‘‘
  • --cpu-affinity โ€” pin things to specific CPUs, set your cpu affinity ๐Ÿ’…
  • --post-buffering โ€” pick the size in bytes where stuff stops living in memory and gets buffered to disk instead.
  • --post-buffering-bufsize โ€” set the buffer size for read() when you're in post buffering mode.
  • --body-read-warning โ€” set the amount of allowed memory allocation, in megabytes, for the request body before it starts printing a warning at you. Like a lil "bestieโ€ฆ" alarm ๐Ÿšจ
  • --upload-progress โ€” turn on creation of .json files in the directory you specify, all while a file upload is happening ๐Ÿ“
  • --no-default-app โ€” do not fallback to the default app. Boundaries โœ‹
  • --manage-script-name โ€” automatically rewrite SCRIPT_NAME and PATH_INFO for you. Iconic behaviour.
  • --ignore-script-name โ€” ignore SCRIPT_NAME entirely. Not today.
  • --catch-exceptions โ€” report the exception as http output. > Discouraged! Use only for testing, fr fr.
  • --reload-on-exception โ€” an exception gets raised, the worker gets reloaded. Fresh start, glow up ๐Ÿ”„
  • --reload-on-exception-type โ€” reload a worker when a specific exception type is raised.
  • --reload-on-exception-value โ€” reload a worker when a specific exception value is raised.
  • --reload-on-exception-repr โ€” reload a worker when a specific exception type+value combo (language-specific) is raised.
  • --exception-handler โ€” add an exception handler ๐Ÿซถ
  • --enable-metrics โ€” switch on the metrics subsystem โœจ
  • --metric โ€” add a custom metric of your very own.
  • --metric-threshold โ€” add a metric threshold/alarm ๐Ÿšจ
  • --metric-alarm โ€” add a metric threshold/alarm (same deal, different name).
  • --alarm-metric โ€” and again: add a metric threshold/alarm.
  • --metrics-dir โ€” export your metrics as text files into the directory you name.
  • --metrics-dir-restore โ€” restore the last value taken from the metrics dir. Glow-up from your past self ๐Ÿ’–
  • --metric-dir โ€” export metrics as text files to the specified directory (singular twin, same energy).
  • --metric-dir-restore โ€” restore last value taken from the metrics dir.
  • --metrics-no-cores โ€” stop generating cores-related metrics. No cores, no problem.
  • --udp โ€” run the udp server on the address you specify ๐Ÿ“ก
  • --stats โ€” enable the stats server on the specified address.
  • --stats-server โ€” enable the stats server on the specified address (yes, again, it's the same option wearing a different name).
  • --stats-http โ€” prefix the stats server json output with http headers.
  • --stats-minified โ€” minify the statistics json output. Shrink it, slay it.
  • --stats-min โ€” minify statistics json output. Same glow, shorter name.
  • --stats-push โ€” push the stats json to whatever destination you name ๐Ÿš€
  • --stats-pusher-default-freq โ€” set the default frequency of stats pushers.
  • --stats-pushers-default-freq โ€” set the default frequency of stats pushers (plural edition).
  • --stats-no-cores โ€” disable generation of cores-related stats.
  • --stats-no-metrics โ€” do not include metrics in the stats output. Leave them out of the group chat ๐Ÿ™ˆ
  • --multicast โ€” subscribe to the multicast group you specify ๐Ÿ“ป
  • --multicast-ttl โ€” set the multicast ttl.
  • --multicast-loop โ€” set multicast loop. Default is 1.
  • --master-fifo โ€” enable the master fifo ๐ŸŽ€
  • --notify-socket โ€” enable the notification socket ๐Ÿ””
  • --subscription-notify-socket โ€” set the notification socket for subscriptions.
  • --legion โ€” become a member of a legion. Like joining a squad but for uWSGI ๐Ÿ‘‘
  • --legion-mcast โ€” become a member of a legion, but this one's a shortcut for multicast.
  • --legion-node โ€” add a node to a legion.
  • --legion-freq โ€” set the frequency of legion packets.
  • --legion-tolerance โ€” set the tolerance of the legion subsystem.
  • --legion-death-on-lord-error โ€” if one of the lord hooks fails, declare itself as a dead node for the specified amount of seconds ๐Ÿ’€ dramatic but make it resilient.
  • --legion-skew-tolerance โ€” set the clock skew tolerance of the legion subsystem. Default is 60 seconds.
  • --legion-lord โ€” the action to call on Lord election ๐Ÿ‘‘
  • --legion-unlord โ€” the action to call on Lord dismiss.
  • --legion-setup โ€” the action to call on legion setup.
  • --legion-death โ€” the action to call on legion death, aka shutdown of the instance ๐Ÿชฆ
  • --legion-join โ€” the action to call on legion join (the first time quorum is reached).
  • --legion-node-joined โ€” the action to call when a new node joins the legion ๐Ÿซถ
  • --legion-node-left โ€” the action to call when a node leaves the legion.
  • --legion-quorum โ€” set the quorum of a legion.
  • --legion-scroll โ€” set the scroll of a legion.
  • --legion-scroll-max-size โ€” set the max size of the legion scroll buffer.
  • --legion-scroll-list-max-size โ€” set the max size of the legion scroll list buffer.
  • --subscriptions-sign-check โ€” set the digest algorithm and certificate directory for the secured subscription system ๐Ÿ”
  • --subscriptions-sign-check-tolerance โ€” set the maximum tolerance, in seconds, of clock skew for the secured subscription system.
  • --subscriptions-sign-skip-uid โ€” skip the signature check for the specified uid when you're using unix sockets credentials.
  • --subscriptions-credentials-check โ€” add a directory to search for subscriptions key credentials.
  • --subscriptions-use-credentials โ€” enable management of SCM_CREDENTIALS in subscriptions UNIX sockets.
  • --subscription-algo โ€” set the load balancing algorithm for the subscription system โš–๏ธ
  • --subscription-dotsplit โ€” try to fallback to the next part (dot based) in the subscription key.
  • --subscribe-to โ€” subscribe to the subscription server you specify.
  • --st โ€” subscribe to the specified subscription server. Tiny name, big job.
  • --subscribe โ€” subscribe to the specified subscription server (yes bestie, it's the same thing again).
  • --subscribe2 โ€” subscribe to the specified subscription server using advanced keyval syntax โœจ
  • --subscribe-freq โ€” send the subscription announce at the interval you specify.
  • --subscription-tolerance โ€” set tolerance for subscription servers. Be patient with them ๐Ÿซถ
  • --unsubscribe-on-graceful-reload โ€” force an unsubscribe request even during a graceful reload. No lingering subscriptions, periodt.
  • --start-unsubscribed โ€” configure subscriptions but do not send them yet. Super useful with master fifo.
  • --subscribe-with-modifier1 โ€” force the specified modifier1 when subscribing.
  • --snmp โ€” enable the embedded snmp server ๐Ÿ“Š
  • --snmp-community โ€” set the snmp community string.
  • --ssl-verbose โ€” be verbose about SSL errors. Spill the tea on every handshake problem โ˜•
  • --ssl-verify-depth โ€” set the maximum certificate verification depth.
  • --sni โ€” add an SNI-governed SSL context.
  • --sni-dir โ€” check for cert/key/client_ca files in the specified directory and create a sni/ssl context on demand ๐Ÿ’…
  • --sni-dir-ciphers โ€” set the ssl ciphers for the sni-dir option.
  • --ssl-enable3 โ€” > enable SSLv3. This one is insecure ๐Ÿšจ you've been warned.
  • --ssl-enable-sslv3 โ€” > enable SSLv3 (insecure). Same warning, longer name.
  • --ssl-enable-tlsv1 โ€” > enable TLSv1. Also insecure. Proceed with caution, bestie.
  • --ssl-option โ€” set a raw ssl option, as a numeric value.
  • --sni-regexp โ€” add an SNI-governed SSL context where the key is a regexp ๐Ÿงš
  • --ssl-tmp-dir โ€” store ssl-related temp files in the directory you specify.
  • --check-interval โ€” set the interval, in seconds, of master checks.
  • --forkbomb-delay โ€” when a forkbomb gets detected, sleep for the specified number of seconds ๐Ÿ˜ด
  • --binary-path โ€” force the binary path.
  • --privileged-binary-patch โ€” patch the uwsgi binary with a new command, and this happens before the privileges drop.
  • --unprivileged-binary-patch โ€” patch the uwsgi binary with a new command, but this one runs after the privileges drop.
  • --privileged-binary-patch-arg โ€” patch the uwsgi binary with a new command and arguments, before privileges drop.
  • --unprivileged-binary-patch-arg โ€” patch the uwsgi binary with a new command and arguments, after privileges drop.
  • --async โ€” enable async mode with the number of cores you specify โšก
  • --max-fd โ€” set the maximum number of file descriptors. > Requires root privileges ๐Ÿ‘‘
  • --logto โ€” set the logfile or udp address.
  • --logto2 โ€” log to the specified file or udp address, but only after the privileges drop.
  • --log-format โ€” set an advanced format for request logging ๐ŸŽ€
  • --logformat โ€” set advanced format for request logging (the classic spelling).
  • --logformat-strftime โ€” apply strftime to the logformat output.
  • --log-format-strftime โ€” apply strftime to logformat output (dashed twin).
  • --logfile-chown โ€” chown your logfiles.
  • --logfile-chmod โ€” chmod your logfiles.
  • --log-syslog โ€” log to syslog ๐Ÿ“ป
  • --log-socket โ€” send logs to the socket you specify.
  • --req-logger โ€” set/append a request logger.
  • --logger-req โ€” set/append a request logger (same thing, flipped around).
  • --logger โ€” set/append a logger.
  • --logger-list โ€” list the enabled loggers ๐Ÿ“‹
  • --loggers-list โ€” list enabled loggers (plural, same list).
  • --threaded-logger โ€” offload log writing to a thread. Let the thread handle it ๐Ÿ’…
  • --log-encoder โ€” add an item in the log encoder chain.
  • --log-req-encoder โ€” add an item in the log req encoder chain.
  • --log-drain โ€” drain, meaning do not show, log lines matching the regexp you give ๐Ÿ™ˆ
  • --log-filter โ€” show only the log lines matching the specified regexp.
  • --log-route โ€” log to the specified named logger if the regexp applied on the logline matches.
  • --log-req-route โ€” log requests to the specified named logger if the regexp applied on the logline matches.
  • --use-abort โ€” call abort() on segfault/fpe. Could be useful for generating a core dump ๐Ÿ’€
  • --alarm โ€” create a new alarm. Syntax: <alarm> <plugin:args>

Okay so real talk bestie, we're deep in the option mines now and the alarm system is next up โ€” it's giving "uWSGI will text you when something goes wrong" energy and I'm obsessed. ๐ŸŒธ

  • --alarm-cheap โ€” use the main alarm thread instead of spinning up dedicated threads for curl-based alarms. Reuses the one thread, no new ones. Lowkey frugal queen ๐Ÿ’…
  • --alarm-freq โ€” tune the anti-loop alarm system (default 3 seconds)
  • --alarm-fd โ€” raise the specified alarm when an fd is ready to read (by default it reads 1 byte, set 8 for eventfd)
  • --alarm-segfault โ€” raise the specified alarm when the segmentation fault handler is executed
  • --segfault-alarm โ€” raise the specified alarm when the segmentation fault handler is executed (same thing, different font โœจ)
  • --alarm-backlog โ€” raise the specified alarm when the socket backlog queue is full
  • --backlog-alarm โ€” raise the specified alarm when the socket backlog queue is full
  • --lq-alarm โ€” raise the specified alarm when the socket backlog queue is full
  • --alarm-lq โ€” raise the specified alarm when the socket backlog queue is full
  • --alarm-listen-queue โ€” raise the specified alarm when the socket backlog queue is full
  • --listen-queue-alarm โ€” raise the specified alarm when the socket backlog queue is full
Not me listing six whole flags that all do the exact same thing ๐Ÿ˜ญ that's just how the listen-queue alarm rolls, bestie. Pick whichever spelling feels most like you, they're all going to the same place.
  • --log-alarm โ€” raise the specified alarm when a log line matches the specified regexp. Syntax: <alarm>[,alarm...] <regexp>
  • --alarm-log โ€” raise the specified alarm when a log line matches the specified regexp. Syntax: <alarm>[,alarm...] <regexp>
  • --not-log-alarm โ€” skip the specified alarm when a log line matches the specified regexp. Syntax: <alarm>[,alarm...] <regexp>
  • --not-alarm-log โ€” skip the specified alarm when a log line matches the specified regexp. Syntax: <alarm>[,alarm...] <regexp>
  • --alarm-list โ€” list enabled alarms ๐Ÿ‘‘
  • --alarms-list โ€” list enabled alarms (plural version, for the plural girlies)
  • --alarm-msg-size โ€” set the max size of an alarm message (default 8192)

Now we're onto logging, which is genuinely the main character of every debugging session, periodt. ๐ŸŽ€

  • --log-master โ€” delegate logging to the master process
  • --log-master-bufsize โ€” set the buffer size for the master logger. Bigger log messages will be truncated ๐Ÿ’€
  • --log-master-stream โ€” create the master logpipe as SOCK_STREAM
  • --log-master-req-stream โ€” create the master requests logpipe as SOCK_STREAM
  • --log-reopen โ€” reopen log after reload
  • --log-truncate โ€” truncate log on startup
  • --log-maxsize โ€” set maximum logfile size
  • --log-backupname โ€” set logfile name after rotation
  • --logdate โ€” prefix logs with date or a strftime string
  • --log-date โ€” prefix logs with date or a strftime string
  • --log-prefix โ€” prefix logs with a string
  • --log-zero โ€” log responses without body
  • --log-slow โ€” log requests slower than the specified number of milliseconds
  • --log-4xx โ€” log requests with a 4xx response
  • --log-5xx โ€” log requests with a 5xx response
  • --log-big โ€” log requests bigger than the specified size
  • --log-sendfile โ€” log sendfile requests
  • --log-ioerror โ€” log requests with io errors
  • --log-micros โ€” report response time in microseconds instead of milliseconds (tiny numbers, huge drama โœจ)
  • --log-x-forwarded-for โ€” use the ip from X-Forwarded-For header instead of REMOTE_ADDR

Privileges and directories, aka the "who am I and where am I standing" section ๐Ÿฆ‹

  • --master-as-root โ€” leave master process running as root
  • --drop-after-init โ€” run privileges drop after plugin initialization, superseded by drop-after-apps
  • --drop-after-apps โ€” run privileges drop after apps loading, superseded by master-as-root
  • --force-cwd โ€” force the initial working directory to the specified value
  • --binsh โ€” override /bin/sh (used by exec hooks, it always fallback to /bin/sh)
  • --chdir โ€” chdir to specified directory before apps loading
  • --chdir2 โ€” chdir to specified directory after apps loading
Note the supersede chain, bestie โ€” --drop-after-init gets overridden by drop-after-apps, and drop-after-apps gets overridden by master-as-root. It's a whole succession drama. ๐Ÿ‘‘

Worker spawning, lazy mode, and the cheaper family โ€” this is the load-management lore and honestly it ate ๐ŸŒˆ

  • --lazy โ€” set lazy mode (load apps in workers instead of master)
  • --lazy-apps โ€” load apps in each worker instead of the master
  • --cheap โ€” set cheap mode (spawn workers only after the first request)
  • --cheaper โ€” set cheaper mode (adaptive process spawning)
  • --cheaper-initial โ€” set the initial number of processes to spawn in cheaper mode
  • --cheaper-algo โ€” choose to algorithm used for adaptive process spawning
  • --cheaper-step โ€” number of additional processes to spawn at each overload
  • --cheaper-overload โ€” increase workers after specified overload
  • --cheaper-algo-list โ€” list enabled cheapers algorithms
  • --cheaper-algos-list โ€” list enabled cheapers algorithms
  • --cheaper-list โ€” list enabled cheapers algorithms
  • --cheaper-rss-limit-soft โ€” don't spawn new workers if total resident memory usage of all workers is higher than this limit
  • --cheaper-rss-limit-hard โ€” if total workers resident memory usage is higher try to stop workers
  • --idle โ€” set idle mode (put uWSGI in cheap mode after inactivity)
  • --die-on-idle โ€” shutdown uWSGI when idle

Apps and mounting and threads, oh my ๐Ÿงš

  • --mount โ€” load application under mountpoint
  • --worker-mount โ€” load application under mountpoint in the specified worker or after workers spawn
  • --threads โ€” run each worker in prethreaded mode with the specified number of threads
  • --thread-stacksize โ€” set threads stacksize
  • --threads-stacksize โ€” set threads stacksize
  • --thread-stack-size โ€” set threads stacksize
  • --threads-stack-size โ€” set threads stacksize
Four spellings of the thread stacksize flag. Four!! The way that uWSGI said "we'll accept literally any of these" and moved on ๐Ÿ’€ Pick your fave, they're all valid.
  • --vhost โ€” enable virtualhosting mode (based on SERVER_NAME variable)
  • --vhost-host โ€” enable virtualhosting mode (based on HTTP_HOST variable)

Okay now the routing section, which is long and iconic and I need you to stay with me bestie, we're going the distance ๐Ÿ’–

  • --route โ€” add a route
  • --route-host โ€” add a route based on Host header
  • --route-uri โ€” add a route based on REQUEST_URI
  • --route-qs โ€” add a route based on QUERY_STRING
  • --route-remote-addr โ€” add a route based on REMOTE_ADDR
  • --route-user-agent โ€” add a route based on HTTP_USER_AGENT
  • --route-remote-user โ€” add a route based on REMOTE_USER
  • --route-referer โ€” add a route based on HTTP_REFERER
  • --route-label โ€” add a routing label (for use with goto)
  • --route-if โ€” add a route based on condition
  • --route-if-not โ€” add a route based on condition (negate version)
  • --route-run โ€” always run the specified route action

Then the final routes, the ones that get the last word:

  • --final-route โ€” add a final route
  • --final-route-status โ€” add a final route for the specified status
  • --final-route-host โ€” add a final route based on Host header
  • --final-route-uri โ€” add a final route based on REQUEST_URI
  • --final-route-qs โ€” add a final route based on QUERY_STRING
  • --final-route-remote-addr โ€” add a final route based on REMOTE_ADDR
  • --final-route-user-agent โ€” add a final route based on HTTP_USER_AGENT
  • --final-route-remote-user โ€” add a final route based on REMOTE_USER
  • --final-route-referer โ€” add a final route based on HTTP_REFERER
  • --final-route-label โ€” add a final routing label (for use with goto)
  • --final-route-if โ€” add a final route based on condition
  • --final-route-if-not โ€” add a final route based on condition (negate version)
  • --final-route-run โ€” always run the specified final route action

Error routes next, for when things go sideways (and they will, no cap):

  • --error-route โ€” add an error route
  • --error-route-status โ€” add an error route for the specified status
  • --error-route-host โ€” add an error route based on Host header
  • --error-route-uri โ€” add an error route based on REQUEST_URI
  • --error-route-qs โ€” add an error route based on QUERY_STRING
  • --error-route-remote-addr โ€” add an error route based on REMOTE_ADDR
  • --error-route-user-agent โ€” add an error route based on HTTP_USER_AGENT
  • --error-route-remote-user โ€” add an error route based on REMOTE_USER
  • --error-route-referer โ€” add an error route based on HTTP_REFERER
  • --error-route-label โ€” add an error routing label (for use with goto)
  • --error-route-if โ€” add an error route based on condition
  • --error-route-if-not โ€” add an error route based on condition (negate version)
  • --error-route-run โ€” always run the specified error route action

And response routes, the ones that shape what the client actually gets back:

  • --response-route โ€” add a response route
  • --response-route-status โ€” add a response route for the specified status
  • --response-route-host โ€” add a response route based on Host header
  • --response-route-uri โ€” add a response route based on REQUEST_URI
  • --response-route-qs โ€” add a response route based on QUERY_STRING
  • --response-route-remote-addr โ€” add a response route based on REMOTE_ADDR
  • --response-route-user-agent โ€” add a response route based on HTTP_USER_AGENT
  • --response-route-remote-user โ€” add a response route based on REMOTE_USER
  • --response-route-referer โ€” add a response route based on HTTP_REFERER
  • --response-route-label โ€” add a response routing label (for use with goto)
  • --response-route-if โ€” add a response route based on condition
  • --response-route-if-not โ€” add a response route based on condition (negate version)
  • --response-route-run โ€” always run the specified response route action
See the pattern? Every routing family comes in the same shape: plain, -status, -host, -uri, -qs, -remote-addr, -user-agent, -remote-user, -referer, -label, -if, -if-not, -run. Once you clock the pattern you can basically speedrun the whole list ๐Ÿ”ฅ
  • --router-list โ€” list enabled routers
  • --routers-list โ€” list enabled routers
  • --error-page-403 โ€” add an error page (html) for managed 403 response
  • --error-page-404 โ€” add an error page (html) for managed 404 response
  • --error-page-500 โ€” add an error page (html) for managed 500 response

Websockets and chunked input, the โœจstreamingโœจ era:

  • --websockets-ping-freq โ€” set the frequency (in seconds) of websockets automatic ping packets
  • --websocket-ping-freq โ€” set the frequency (in seconds) of websockets automatic ping packets
  • --websockets-pong-tolerance โ€” set the tolerance (in seconds) of websockets ping/pong subsystem
  • --websocket-pong-tolerance โ€” set the tolerance (in seconds) of websockets ping/pong subsystem
  • --websockets-max-size โ€” set the max allowed size of websocket messages (in Kbytes, default 1024)
  • --websocket-max-size โ€” set the max allowed size of websocket messages (in Kbytes, default 1024)
  • --chunked-input-limit โ€” set the max size of a chunked input part (default 1MB, in bytes)
  • --chunked-input-timeout โ€” set default timeout for chunked input

And finally, the clocks ๐Ÿ•ฐ๏ธ โ€” yes, clock sources, because time is a construct and uWSGI still wants to know which one you're using:

  • --clock โ€” set a clock source
  • --clock-list โ€” list enabled clocks
Bestie, if you've made it this far you are genuinely built different ๐Ÿ’œ We are not done yet though โ€” more is coming, so don't go anywhere.
  • --clocks-list โ€” list enabled clocks. show me the clocks bestie โฐโœจ
  • --add-header โ€” automatically add HTTP headers to response. it just slides them in there ๐Ÿ’…
  • --rem-header โ€” automatically remove specified HTTP header from the response. bye bye header ๐Ÿซถ
  • --del-header โ€” automatically remove specified HTTP header from the response. same remove-the-header energy, different name fr fr
  • --collect-header โ€” store the specified response header in a request var (syntax: header var). save that header for later ๐Ÿ“ฅ
  • --response-header-collect โ€” store the specified response header in a request var (syntax: header var). twin flame behavior ๐Ÿ’ž
  • --pull-header โ€” store the specified response header in a request var and remove it from the response (syntax: header var). snatch it, stash it, and yeet it from the response ๐Ÿงฒ
  • --check-static โ€” check for static files in the specified directory. static file vibe check ๐Ÿ”
  • --check-static-docroot โ€” check for static files in the requested DOCUMENT_ROOT. it looks where the request says ๐Ÿ‘€
  • --static-check โ€” check for static files in the specified directory. same static check, living its truth ๐Ÿ’ซ
  • --static-map โ€” map mountpoint to static directory (or file). map it, slay it ๐Ÿ—บ๏ธ
  • --static-map2 โ€” like static-map but completely appending the requested resource to the docroot. extra append energy โœจ
  • --static-skip-ext โ€” skip specified extension from staticfile checks. not today, extension ๐Ÿ™…โ€โ™€๏ธ
  • --static-index โ€” search for specified file if a directory is requested. directory requested? go find the index bestie ๐Ÿ“‚
  • --static-safe โ€” skip security checks if the file is under the specified path. trusted path, no security check needed ๐Ÿ”
  • --static-cache-paths โ€” put resolved paths in the uWSGI cache for the specified amount of seconds. cache those paths for N seconds โณ
  • --static-cache-paths-name โ€” use the specified cache for static paths. name that cache ๐Ÿท๏ธ
  • --mimefile โ€” set mime types file path (default /etc/mime.types). mime file location, default is iconic ๐Ÿ’–
  • --mime-file โ€” set mime types file path (default /etc/mime.types). same but with a hyphen, periodt ๐Ÿ’…
  • --static-expires-type โ€” set the Expires header based on content type. expire by content type โฐ
  • --static-expires-type-mtime โ€” set the Expires header based on content type and file mtime. content type + mtime = expiration math ๐Ÿงฎ
  • --static-expires โ€” set the Expires header based on filename regexp. filename regexp decides Expires ๐Ÿ”ฅ
  • --static-expires-mtime โ€” set the Expires header based on filename regexp and file mtime. filename regexp + mtime, combo meal ๐Ÿ”
  • --static-expires-uri โ€” set the Expires header based on REQUEST_URI regexp. REQUEST_URI regexp for Expires ๐ŸŒˆ
  • --static-expires-uri-mtime โ€” set the Expires header based on REQUEST_URI regexp and file mtime. REQUEST_URI regexp + mtime, yes maโ€™am ๐Ÿซก
  • --static-expires-path-info โ€” set the Expires header based on PATH_INFO regexp. PATH_INFO regexp for Expires ๐Ÿ›ฃ๏ธ
  • --static-expires-path-info-mtime โ€” set the Expires header based on PATH_INFO regexp and file mtime. PATH_INFO regexp + mtime, the full package ๐Ÿ“ฆ
  • --static-gzip โ€” if the supplied regexp matches the static file translation it will search for a gzip version. regexp match? go find the gzip twin ๐Ÿ—œ๏ธ
  • --static-gzip-all โ€” check for a gzip version of all requested static files. every static file gets a gzip check, all of them ๐Ÿ’ฏ
  • --static-gzip-dir โ€” check for a gzip version of all requested static files in the specified dir/prefix. gzip check in that dir/prefix ๐Ÿ“
  • --static-gzip-prefix โ€” check for a gzip version of all requested static files in the specified dir/prefix. same as --static-gzip-dir, just named prefix ๐Ÿ’ซ
  • --static-gzip-ext โ€” check for a gzip version of all requested static files with the specified ext/suffix. gzip check with that ext/suffix ๐Ÿ“Ž
  • --static-gzip-suffix โ€” check for a gzip version of all requested static files with the specified ext/suffix. ext/suffix twin, same vibe ๐Ÿชž
  • --honour-range โ€” enable support for the HTTP Range header. range requests? honoured, bestie ๐ŸŽฏ
  • --offload-threads โ€” set the number of offload threads to spawn (per-worker, default 0). offload threads, per-worker, default 0 ๐Ÿงต
  • --offload-thread โ€” set the number of offload threads to spawn (per-worker, default 0). singular name, same setting, no cap ๐Ÿงถ
  • --file-serve-mode โ€” set static file serving mode. pick your file serving mode ๐ŸŽ›๏ธ
  • --fileserve-mode โ€” set static file serving mode. same mode, no hyphen needed ๐Ÿ’…
  • --disable-sendfile โ€” disable sendfile() and rely on boring read()/write(). goodbye sendfile(), hello old-school read()/write() ๐Ÿ˜ด
  • --check-cache โ€” check for response data in the specified cache (empty for default cache). look in that cache, empty means default ๐Ÿ•ต๏ธโ€โ™€๏ธ
  • --close-on-exec โ€” set close-on-exec on connection sockets (could be required for spawning processes in requests). connection sockets get close-on-exec, maybe needed for spawning in requests ๐Ÿšช
  • --close-on-exec2 โ€” set close-on-exec on server sockets (could be required for spawning processes in requests). server sockets this time, same maybe-needed energy ๐Ÿ–ฅ๏ธ
  • --mode โ€” set uWSGI custom mode. custom mode activated ๐Ÿ˜Ž
  • --env โ€” set environment variable. env var, set it ๐ŸŒฑ
  • --envdir โ€” load a daemontools compatible envdir. daemontools-compatible envdir loading ๐Ÿ“‚
  • --early-envdir โ€” load a daemontools compatible envdir ASAP. same but ASAP, no waiting โšก
  • --unenv โ€” unset environment variable. unset that env var, bye ๐Ÿ‘‹
  • --vacuum โ€” try to remove all of the generated file/sockets. try to clean up generated files/sockets ๐Ÿงน
  • --file-write โ€” write the specified content to the specified file (syntax: file=value) before privileges drop. write file=value before privileges drop โœ๏ธ
  • --cgroup โ€” put the processes in the specified cgroup. cgroup placement, slay ๐Ÿงบ
  • --cgroup-opt โ€” set value in specified cgroup option. set that cgroup option value ๐ŸŽš๏ธ
  • --cgroup-dir-mode โ€” set permission for cgroup directory (default is 700). cgroup dir permission, default 700 ๐Ÿ”’
  • --namespace โ€” run in a new namespace under the specified rootfs. new namespace under that rootfs ๐ŸŒŒ
  • --namespace-keep-mount โ€” keep the specified mountpoint in your namespace. keep that mountpoint in your namespace ๐Ÿ”๏ธ
  • --ns โ€” run in a new namespace under the specified rootfs. short king --ns, same namespace energy ๐Ÿ‘‘
  • --namespace-net โ€” add network namespace. add a network namespace ๐ŸŒ
  • --ns-net โ€” add network namespace. network namespace, short name edition ๐Ÿ“ก
  • --enable-proxy-protocol โ€” enable PROXY1 protocol support (only for http parsers). PROXY1 support, but only for http parsers ๐Ÿงผ
  • --reuse-port โ€” enable REUSE_PORT flag on socket (BSD only). REUSE_PORT on socket, BSD only ๐Ÿก
  • --tcp-fast-open โ€” enable TCP_FASTOPEN flag on TCP sockets with the specified qlen value. TCP_FASTOPEN with that qlen value ๐Ÿš€
  • --tcp-fastopen โ€” enable TCP_FASTOPEN flag on TCP sockets with the specified qlen value. no hyphen, same fast open vibe ๐Ÿ’จ
  • --tcp-fast-open-client โ€” use sendto(..., MSG_FASTOPEN, ...) instead of connect() if supported. client side uses sendto(..., MSG_FASTOPEN, ...) instead of connect() when supported ๐Ÿงฒ
  • --tcp-fastopen-client โ€” use sendto(..., MSG_FASTOPEN, ...) instead of connect() if supported. same thing, hyphenless name ๐Ÿช„
  • --zerg โ€” attach to a zerg server. zerg rush, attach ๐Ÿ›
  • --zerg-fallback โ€” fallback to normal sockets if the zerg server is not available. no zerg server? fallback to normal sockets ๐Ÿ›Ÿ
  • --zerg-server โ€” enable the zerg server on the specified UNIX socket. zerg server on that UNIX socket ๐Ÿœ
  • --cron โ€” add a cron task. cron task added โฐ
  • --cron2 โ€” add a cron task (key=val syntax). cron task with key=val syntax ๐Ÿ”‘
  • --unique-cron โ€” add a unique cron task. unique cron task, one of a kind ๐Ÿ’Ž
  • --cron-harakiri โ€” set the maximum time (in seconds) we wait for cron command to complete. cron harakiri timeout in seconds โณ
  • --legion-cron โ€” add a cron task runnable only when the instance is a lord of the specified legion. legion cron, only for the lord of that legion ๐Ÿ‘‘
  • --cron-legion โ€” add a cron task runnable only when the instance is a lord of the specified legion. same legion lord cron, different name ๐Ÿฐ
  • --unique-legion-cron โ€” add a unique cron task runnable only when the instance is a lord of the specified legion. unique + legion + cron, triple threat ๐ŸŽ€
  • --unique-cron-legion โ€” add a unique cron task runnable only when the instance is a lord of the specified legion. same as above, name flipped ๐Ÿ”„
  • --loop โ€” select the uWSGI loop engine. pick your loop engine ๐Ÿ”
  • --loop-list โ€” list enabled loop engines. show me the loop engines ๐Ÿ“‹
  • --loops-list โ€” list enabled loop engines. plural loops, same list ๐Ÿชž
  • --worker-exec โ€” run the specified command as worker. worker runs that command ๐Ÿƒ
  • --worker-exec2 โ€” run the specified command as worker (after post_fork hook). same but after post_fork hook ๐Ÿช
  • --attach-daemon โ€” attach a command/daemon to the master process (the command has to not go in background). attach daemon to master, command has to not go in background ๐Ÿงท
  • --attach-control-daemon โ€” attach a command/daemon to the master process (the command has to not go in background), when the daemon dies, the master dies too. if daemon dies, master dies too ๐Ÿ’€
  • --smart-attach-daemon โ€” attach a command/daemon to the master process managed by a pidfile (the command has to daemonize). smart attach with pidfile, command has to daemonize ๐Ÿง 
  • --smart-attach-daemon2 โ€” attach a command/daemon to the master process managed by a pidfile (the command has to NOT daemonize). pidfile managed, but command has to NOT daemonize ๐Ÿšซ
  • --legion-attach-daemon โ€” same as --attach-daemon but daemon runs only on legion lord node. legion lord only daemon ๐Ÿ‘‘
  • --legion-smart-attach-daemon โ€” same as --smart-attach-daemon but daemon runs only on legion lord node. smart + legion lord only ๐Ÿง ๐Ÿ‘‘
  • --legion-smart-attach-daemon2 โ€” same as --smart-attach-daemon2 but daemon runs only on legion lord node. smart2 + legion lord only ๐Ÿง ๐Ÿ‘‘2
  • --daemons-honour-stdin โ€” do not change the stdin of external daemons to /dev/null. leave external daemon stdin alone, donโ€™t send it to /dev/null ๐Ÿ™…
  • --attach-daemon2 โ€” attach-daemon keyval variant (supports smart modes too). keyval attach-daemon, smart modes supported too ๐Ÿ—๏ธ
  • --plugins โ€” load uWSGI plugins. load those plugins ๐Ÿงฉ
  • --plugin โ€” load uWSGI plugins. singular plugin, same loading ๐Ÿงฉ
  • --need-plugins โ€” load uWSGI plugins (exit on error). need plugins, exit on error ๐Ÿšช
  • --need-plugin โ€” load uWSGI plugins (exit on error). singular need plugin, exit on error ๐Ÿšช
  • --plugins-dir โ€” add a directory to uWSGI plugin search path. add plugin search path dir ๐Ÿ“
  • --plugin-dir โ€” add a directory to uWSGI plugin search path. singular plugin dir, same path ๐Ÿ“‚
  • --plugins-list โ€” list enabled plugins. list plugins ๐Ÿ“œ
  • --plugin-list โ€” list enabled plugins. singular plugin list, same list ๐Ÿ“‹
  • --autoload โ€” try to automatically load plugins when unknown options are found. unknown option? try autoloading plugins ๐Ÿค–
  • --dlopen โ€” blindly load a shared library. blindly load that shared library ๐Ÿ™ˆ
  • --allowed-modifiers โ€” comma separated list of allowed modifiers. allowed modifiers, comma separated ๐Ÿงพ
  • --remap-modifier โ€” remap request modifier from one id to another. remap modifier id to another ๐Ÿ”€
  • --dump-options โ€” dump the full list of available options. dump all the options ๐Ÿ“ฆ
  • --show-config โ€” show the current config reformatted as ini. show config as ini ๐Ÿ“„
  • --binary-append-data โ€” return the content of a resource to stdout for appending to a uwsgi binary (for data:// usage). stdout content for appending to uwsgi binary, for data:// usage ๐Ÿงฌ
  • --print โ€” simple print. simple print ๐Ÿ–จ๏ธ
  • --iprint โ€” simple print (immediate version). simple print but immediate โšก
  • --exit โ€” force exit() of the instance. force exit() on the instance ๐Ÿšช
  • --cflags โ€” report uWSGI CFLAGS (useful for building external plugins). report CFLAGS, useful for external plugins ๐Ÿ”ง
  • --dot-h โ€” dump the uwsgi.h used for building the core (useful for building external plugins). dump uwsgi.h, useful for external plugins ๐Ÿ“œ
  • --config-py โ€” dump the uwsgiconfig.py used for building the core (useful for building external plugins). dump uwsgiconfig.py, useful for external plugins ๐Ÿ
  • --build-plugin โ€” build a uWSGI plugin for the current binary. build a plugin for current binary ๐Ÿ”จ
  • --version โ€” print uWSGI version. print version ๐Ÿท๏ธ
  • --response-headers-limit โ€” set response header maximum size (default: 64k). response header max size, default 64k ๐Ÿ“

and thatโ€™s the whole options buffet, bestie ๐Ÿ’– this page was from uwsgi-core 2.0.31-debian, dated January 2026, and itโ€™s UWSGI-CORE(1) โ€” periodt. โœจ๐Ÿซถ

๐Ÿ“ฆ where this page comes from