---
title: Chapter 2. Making a New Port
prev: books/porters-handbook/porting-why
next: books/porters-handbook/quick-porting
description: How to make a new FreeBSD Port
tags: ["new port", "upgrading", "guidelines", "ports"]
showBookMenu: true
weight: 2
params:
  path: "/books/porters-handbook/new-port/"
---

[[own-port]]
= Making a New Port
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 2
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/porters-handbook/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

Interested in making a new port, or upgrading existing ports? Great!

What follows are some guidelines for creating a new port for FreeBSD.
To upgrade an existing port, read this, then read crossref:upgrading[port-upgrading,Upgrading a Port].

When this document is not sufficiently detailed, refer to [.filename]#/usr/ports/Mk/bsd.port.mk#, which is included by all port [.filename]#Makefiles#.
Even those not hacking [.filename]##Makefile##s daily can gain much knowledge from it.
Additionally, specific questions can be sent to the {freebsd-ports}.

[NOTE]
====
Only a fraction of the variables (`_VAR_`) that can be overridden are mentioned in this document.
Most (if not all) are documented at the start of [.filename]#/usr/ports/Mk/bsd.port.mk#; the others probably ought to be.
Note that this file uses a non-standard tab setting: Emacs and Vim will recognize the setting on loading the file.
Both man:vi[1] and man:ex[1] can be set to use the correct value by typing `:set tabstop=4` once the file has been loaded.
====

Looking for something easy to start with? Take a look at the https://wiki.freebsd.org/WantedPorts[list of requested ports] and see if you can work on one (or more).
