Skip to main content
A feed is an external source of package definitions — typically a git or SVN repository containing package Makefiles organized the same way as package/ in the main tree. Feeds let the community maintain large package collections independently of the core OpenWrt repository. When you run ./scripts/feeds update and ./scripts/feeds install, the build system creates symlinks from feeds/<feedname>/ into the package tree so those packages can be selected in make menuconfig.

Default feeds

The file feeds.conf.default in the OpenWrt source root defines the feeds included with every release:
src-git packages https://git.openwrt.org/feed/packages.git
src-git luci https://git.openwrt.org/project/luci.git
src-git routing https://git.openwrt.org/feed/routing.git
src-git telephony https://git.openwrt.org/feed/telephony.git
src-git video https://github.com/openwrt/video.git
FeedContents
packagesThe main community package feed: thousands of ported applications (Python, Perl, network tools, etc.)
luciLuCI web interface and its modules
routingRouting protocol daemons: BIRD, Babel, batman-adv, OLSR, etc.
telephonyVoIP software: Asterisk, Kamailio, and related packages
videoMedia and video-related packages

Feed source types

Each line in feeds.conf or feeds.conf.default follows the format:
<type> <name> <url>[;<branch>]
TypeDescription
src-gitClone a git repository. Optionally specify a branch or tag after ; (e.g., src-git packages https://...;openwrt-23.05).
src-git-fullClone a git repository with full history (no --depth 1).
src-svnCheckout a Subversion repository.
src-linkSymlink to an existing local directory. The directory is not copied.
src-cpyCopy a local directory into feeds/. Changes in the original directory are not reflected until the next update.

Managing feeds

All feed management is done through ./scripts/feeds from the OpenWrt source root.
Download or refresh all feeds defined in feeds.conf:
./scripts/feeds update -a
Update a single named feed:
./scripts/feeds update packages
After updating, the feed contents are available under feeds/<name>/ but packages are not yet visible to menuconfig.
Install (symlink) all packages from all feeds into the package tree:
./scripts/feeds install -a
Install a specific package by name:
./scripts/feeds install python3
Install all packages from a specific feed:
./scripts/feeds install -a -p packages
After installing, packages appear in make menuconfig and can be selected for the build.
Remove all feed packages from the package tree (reverse of install):
./scripts/feeds uninstall -a
Remove a specific package:
./scripts/feeds uninstall python3
Search for packages by name or description across all feeds:
./scripts/feeds search python
Search within a specific feed:
./scripts/feeds search -r packages python
List all packages available in all feeds:
./scripts/feeds list
List packages from a specific feed:
./scripts/feeds list -r luci
Remove all downloaded feed data (the feeds/ directory contents):
./scripts/feeds clean
Run this before a fresh update if you want to ensure a clean state.

Creating a custom feed

A custom feed is any git repository (or local directory) that contains package Makefiles in the standard OpenWrt layout.
1

Create the feed repository

Create a new git repository. The directory structure mirrors package/ in the main tree:
my-feed/
├── myapp/
│   └── Makefile
└── mylib/
    ├── Makefile
    └── patches/
        └── 001-fix.patch
Package Makefiles in a feed are identical to those in the main tree. Commit and push to your git host.
2

Add the feed to your configuration

Copy feeds.conf.default to feeds.conf (the local override file) and add your feed:
cp feeds.conf.default feeds.conf
Then add a line for your feed:
src-git packages https://git.openwrt.org/feed/packages.git
src-git luci https://git.openwrt.org/project/luci.git
src-git routing https://git.openwrt.org/feed/routing.git
src-git telephony https://git.openwrt.org/feed/telephony.git
src-git video https://github.com/openwrt/video.git
src-git myfeed https://github.com/myuser/my-openwrt-feed.git
For local development, use src-link to avoid repeated pushes:
src-link myfeed /home/user/my-openwrt-feed
3

Update and install the feed

./scripts/feeds update myfeed
./scripts/feeds install -a -p myfeed
Your packages now appear in make menuconfig under their respective categories.
feeds.conf takes precedence over feeds.conf.default. If both files exist, only feeds.conf is read. When you create feeds.conf, copy all the default entries you still want — omitting a feed means it will not be available.

Feed workflow for development

The recommended workflow when developing packages in a custom feed:
# 1. Point feeds.conf at your local directory
echo 'src-link myfeed /path/to/my-feed' >> feeds.conf

# 2. Update and install
./scripts/feeds update myfeed
./scripts/feeds install -a -p myfeed

# 3. Build your package
make package/myapp/compile V=s

# 4. After editing the package Makefile, reinstall the feed symlinks
./scripts/feeds install myapp
make package/myapp/compile V=s
Because src-link uses symlinks, edits to files in your local feed directory are reflected immediately without re-running feeds update.