diff --git a/doc_src/ulimit.txt b/doc_src/ulimit.txt
new file mode 100644
index 000000000..26897568a
--- /dev/null
+++ b/doc_src/ulimit.txt
@@ -0,0 +1,52 @@
+
+\section ulimit ulimit - Set or get the shells resurce usage limits
+
+\subsection ulimit-synopsis Synopsis
+ulimit [OPTIONS] [LIMIT]
+
+\subsection ulimit-description Description
+
+The ulimit builtin provides control over the resources available to
+the shell and to processes started by it. The -H and -S options
+specify that the hard or soft limit is set for the given resource. A
+hard limit cannot be increased once it is set; a soft limit may be
+increased up to the value of the hard limit. If neither -H nor -S is
+specified, both the soft and hard limits are set. The value of limit
+can be a number in the unit specified for the resource or one of the
+special values hard, soft, or unlimited, which stand for the current
+hard limit, the current soft limit, and no limit, respectively. If
+limit is omitted, the current value of the soft limit of the resource
+is printed, unless the -H option is given. When more than one
+resource is specified, the limit name and unit are printed before the
+value. Other options are interpreted as follows:
+
+- -a or --all Set or get all current limits
+- -c or --core-size The maximum size of core files created
+- -d or --data-size The maximum size of a process’s data segment
+- -f or --file-size The maximum size of files created by the shell
+- -l or --lock-size The maximum size that may be locked into memory
+- -m or --resident-set-size The maximum resident set size
+- -n or --file-descriptor-count The maximum number of open file descriptors (most systems do not allow this value to be set)
+- -s or --stack-size The maximum stack size
+- -t or --cpu-time The maximum amount of cpu time in seconds
+- -u or --process-count The maximum number of processes available to a single user
+- -v or --virtual-memory-size The maximum amount of virtual memory available to the shell
+
+If limit is given, it is the new value of the specified resource. If
+no option is given, then -f is assumed. Values are in kilobytes,
+except for -t, which is in seconds and -n and -u, which are unscaled
+values. The return status is 0 unless an invalid option or argument is
+supplied, or an error occurs while setting a new limit.
+
+The fish implementation of ulimit should behave identically to the implementation in bash, except for these differences:
+
+- Fish ulimit supports GNU-style long options for all switches
+- Fish ulimit does not support the -p option for getting the pipe size. The bash implementation consists of a compile-time check that empirically guesses this number by writing to a pipe and waiting for SIGPIPE.
+- Fish ulimit does not support getting the values of multiple limits in one command, except by using the -a switch
+
+\subsection ulimit-example Example
+
+ulimit -Hs 64
+
+would set the hard stack size limit to 64 kB:
+