Repository: hassio-addons/addon-unifi
Branch: main
Commit: 886de5062388
Files: 37
Total size: 48.7 KB
Directory structure:
gitextract_tt91enxx/
├── .github/
│ ├── CODEOWNERS
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── SECURITY.md
│ ├── dependabot.yaml
│ └── workflows/
│ ├── ci.yaml
│ ├── deploy.yaml
│ ├── labels.yaml
│ ├── lock.yaml
│ ├── pr-labels.yaml
│ └── stale.yaml
├── .mdlrc
├── .yamllint
├── LICENSE.md
├── README.md
└── unifi/
├── .README.j2
├── DOCS.md
├── Dockerfile
├── build.yaml
├── config.yaml
├── rootfs/
│ └── etc/
│ └── s6-overlay/
│ └── s6-rc.d/
│ ├── init-unifi/
│ │ ├── dependencies.d/
│ │ │ └── base
│ │ ├── run
│ │ ├── type
│ │ └── up
│ ├── unifi/
│ │ ├── dependencies.d/
│ │ │ └── init-unifi
│ │ ├── finish
│ │ ├── run
│ │ └── type
│ └── user/
│ └── contents.d/
│ ├── init-unifi
│ └── unifi
└── translations/
├── en.yaml
├── fr.yaml
├── pl.yaml
└── pt-BR.yaml
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/CODEOWNERS
================================================
.github/* @frenck
================================================
FILE: .github/CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We pledge to make our community welcoming, safe, and equitable for all.
We are committed to fostering an environment that respects and promotes the
dignity, rights, and contributions of all individuals, regardless of
characteristics including race, ethnicity, caste, color, age, physical
characteristics, neurodiversity, disability, sex or gender, gender identity or
expression, sexual orientation, language, philosophy or religion, national or
social origin, socio-economic position, level of education, or other status.
The same privileges of participation are extended to everyone who participates
in good faith and in accordance with this Covenant.
## Encouraged Behaviors
While acknowledging differences in social norms, we all strive to meet our
community's expectations for positive behavior. We also understand that our
words and actions may be interpreted differently than we intend based on
culture, background, or native language.
With these considerations in mind, we agree to behave mindfully toward each
other and act in ways that center our shared values, including:
1. Respecting the **purpose of our community**, our activities, and our ways
of gathering.
2. Engaging **kindly and honestly** with others.
3. Respecting **different viewpoints** and experiences.
4. **Taking responsibility** for our actions and contributions.
5. Gracefully giving and accepting **constructive feedback**.
6. Committing to **repairing harm** when it occurs.
7. Behaving in other ways that promote and sustain the **well-being of our
community**.
## Restricted Behaviors
We agree to restrict the following behaviors in our community. Instances,
threats, and promotion of these behaviors are violations of this Code of
Conduct.
1. **Harassment.** Violating explicitly expressed boundaries or engaging in
unnecessary personal attention after any clear request to stop.
2. **Character attacks.** Making insulting, demeaning, or pejorative comments
directed at a community member or group of people.
3. **Stereotyping or discrimination.** Characterizing anyone's personality or
behavior on the basis of immutable identities or traits.
4. **Sexualization.** Behaving in a way that would generally be considered
inappropriately intimate in the context or purpose of the community.
5. **Violating confidentiality**. Sharing or acting on someone's personal or
private information without their permission.
6. **Endangerment.** Causing, encouraging, or threatening violence or other
harm toward any person or group.
7. Behaving in other ways that **threaten the well-being** of our community.
### Other Restrictions
1. **Misleading identity.** Impersonating someone else for any reason, or
pretending to be someone else to evade enforcement actions.
2. **Failing to credit sources.** Not properly crediting the sources of
content you contribute.
3. **Promotional materials**. Sharing marketing or other commercial content in
a way that is outside the norms of the community.
4. **Irresponsible communication.** Failing to responsibly present content
which includes, links or describes any other restricted behaviors.
## Reporting an Issue
Tensions can occur between community members even when they are trying their
best to collaborate. Not every conflict represents a code of conduct violation,
and this Code of Conduct reinforces encouraged behaviors and norms that can
help avoid conflicts and minimize harm.
When an incident does occur, it is important to report it promptly. To report
a possible violation, send an email to `opensource@frenck.dev`.
Community Moderators take reports of violations seriously and will make every
effort to respond in a timely manner. They will investigate all reports of code
of conduct violations, reviewing messages, logs, and recordings, or
interviewing witnesses and other participants. Community Moderators will keep
investigation and enforcement actions as transparent as possible while
prioritizing safety and confidentiality. In order to honor these values,
enforcement actions are carried out in private with the involved parties, but
communicating to the whole community may be part of a mutually agreed upon
resolution.
## Addressing and Repairing Harm
If an investigation by the Community Moderators finds that this Code of
Conduct has been violated, the following enforcement ladder may be used to
determine how best to repair harm, based on the incident's impact on the
individuals involved and the community as a whole. Depending on the severity
of a violation, lower rungs on the ladder may be skipped.
1. Warning
1. Event: A violation involving a single incident or series of incidents.
2. Consequence: A private, written warning from the Community Moderators.
3. Repair: Examples of repair include a private written apology,
acknowledgement of responsibility, and seeking clarification on
expectations.
2. Temporarily Limited Activities
1. Event: A repeated incidence of a violation that previously resulted in a
warning, or the first incidence of a more serious violation.
2. Consequence: A private, written warning with a time-limited cooldown
period designed to underscore the seriousness of the situation and give
the community members involved time to process the incident. The cooldown
period may be limited to particular communication channels or
interactions with particular community members.
3. Repair: Examples of repair may include making an apology, using the
cooldown period to reflect on actions and impact, and being thoughtful
about re-entering community spaces after the period is over.
3. Temporary Suspension
1. Event: A pattern of repeated violation which the Community Moderators
have tried to address with warnings, or a single serious violation.
2. Consequence: A private written warning with conditions for return from
suspension. In general, temporary suspensions give the person being
suspended time to reflect upon their behavior and possible corrective
actions.
3. Repair: Examples of repair include respecting the spirit of the
suspension, meeting the specified conditions for return, and being
thoughtful about how to reintegrate with the community when the
suspension is lifted.
4. Permanent Ban
1. Event: A pattern of repeated code of conduct violations that other steps
on the ladder have failed to resolve, or a violation so serious that the
Community Moderators determine there is no way to keep the community safe
with this person as a member.
2. Consequence: Access to all community spaces, tools, and communication
channels is removed. In general, permanent bans should be rarely used,
should have strong reasoning behind them, and should only be resorted to
if working through other remedies has failed to change the behavior.
3. Repair: There is no possible repair in cases of this severity.
This enforcement ladder is intended as a guideline. It does not limit the
ability of Community Managers to use their discretion and judgment, in keeping
with the best interests of our community.
## Scope
This Code of Conduct applies within all community spaces, and also applies
when an individual is officially representing the community in public or other
spaces. Examples of representing our community include using an official email
address, posting via an official social media account, or acting as an
appointed representative at an online or offline event.
## Attribution
This Code of Conduct is adapted from the Contributor Covenant, version 3.0,
permanently available at
[https://www.contributor-covenant.org/version/3/0/][v3.0].
Contributor Covenant is stewarded by the Organization for Ethical Source and
licensed under CC BY-SA 4.0. To view a copy of this license, visit
[https://creativecommons.org/licenses/by-sa/4.0/][cc-by-sa].
For answers to common questions about Contributor Covenant, see the FAQ at
[https://www.contributor-covenant.org/faq][faq]. Translations are provided at
[https://www.contributor-covenant.org/translations][translations]. Additional
enforcement and community guideline resources can be found at
[https://www.contributor-covenant.org/resources][resources]. The enforcement
ladder was inspired by the work of
[Mozilla's code of conduct team][mozilla-coc].
[v3.0]: https://www.contributor-covenant.org/version/3/0/
[cc-by-sa]: https://creativecommons.org/licenses/by-sa/4.0/
[faq]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
[resources]: https://www.contributor-covenant.org/resources
[mozilla-coc]: https://github.com/mozilla/inclusion
================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing
When contributing to this repository, please first discuss the change you wish
to make via issue, email, or any other method with the owners of this repository
before making a change.
Please note we have a code of conduct, please follow it in all your interactions
with the project.
## Issues and feature requests
You've found a bug in the source code, a mistake in the documentation or maybe
you'd like a new feature? You can help us by submitting an issue to our
[GitHub Repository][github]. Before you create an issue, make sure you search
the archive, maybe your question was already answered.
Even better: You could submit a pull request with a fix / new feature!
## Pull request process
1. Search our repository for open or closed [pull requests][prs] that relates
to your submission. You don't want to duplicate effort.
1. You may merge the pull request in once you have the sign-off of two other
developers, or if you do not have permission to do that, you may request
the second reviewer to merge it for you.
[github]: https://github.com/hassio-addons/app-unifi/issues
[prs]: https://github.com/hassio-addons/app-unifi/pulls
================================================
FILE: .github/FUNDING.yml
================================================
---
github: frenck
patreon: frenck
custom: https://frenck.dev/donate/
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
# Problem/Motivation
> (Why the issue was filed)
## Expected behavior
> (What you expected to happen)
## Actual behavior
> (What actually happened)
## Steps to reproduce
> (How can someone else make/see it happen)
## Proposed changes
> (If you have a proposed change, workaround or fix,
> describe the rationale behind it)
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
# Proposed Changes
> (Describe the changes and rationale behind them)
## Related Issues
> ([Github link][autolink-references] to related issues or pull requests)
[autolink-references]: https://help.github.com/articles/autolinked-references-and-urls/
================================================
FILE: .github/SECURITY.md
================================================
# Security Policy
We take the security of this project seriously. We appreciate your efforts to responsibly disclose your findings and will make every effort to acknowledge your contributions.
## Reporting a Vulnerability
**Please do not report security vulnerabilities through public GitHub issues.**
If you discover a security vulnerability, please report it via GitHub's private vulnerability reporting:
1. Navigate to the Security tab of this repository
2. Click "Report a vulnerability"
3. Provide a description of the vulnerability and steps to reproduce
After the initial report, we will keep you informed of the progress towards a fix and may ask for additional information or guidance.
We aim to address reported vulnerabilities within 90 days.
Thank you for helping keep this project secure!
================================================
FILE: .github/dependabot.yaml
================================================
---
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: daily
time: "06:00"
================================================
FILE: .github/workflows/ci.yaml
================================================
---
name: CI
# yamllint disable-line rule:truthy
on:
pull_request:
types:
- opened
- reopened
- synchronize
workflow_dispatch:
permissions:
actions: read
contents: write
pull-requests: read
packages: read
security-events: write
jobs:
workflows:
uses: hassio-addons/workflows/.github/workflows/app-ci.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
================================================
FILE: .github/workflows/deploy.yaml
================================================
---
name: Deploy
# yamllint disable-line rule:truthy
on:
push:
branches:
- main
release:
types:
- published
permissions: {}
jobs:
ci:
permissions:
actions: read
contents: write
pull-requests: read
packages: read
security-events: write
uses: hassio-addons/workflows/.github/workflows/app-ci.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
deploy:
needs: ci
permissions:
contents: read
packages: write
uses: hassio-addons/workflows/.github/workflows/app-deploy.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
secrets:
DISPATCH_TOKEN: ${{ secrets.DISPATCH_TOKEN }}
================================================
FILE: .github/workflows/labels.yaml
================================================
---
name: Sync labels
# yamllint disable-line rule:truthy
on:
schedule:
- cron: "34 5 * * *"
workflow_dispatch:
permissions:
issues: write
jobs:
workflows:
uses: hassio-addons/workflows/.github/workflows/labels.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
================================================
FILE: .github/workflows/lock.yaml
================================================
---
name: Lock
# yamllint disable-line rule:truthy
on:
schedule:
- cron: "0 9 * * *"
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
workflows:
uses: hassio-addons/workflows/.github/workflows/lock.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
================================================
FILE: .github/workflows/pr-labels.yaml
================================================
---
name: PR Labels
# yamllint disable-line rule:truthy
on:
pull_request:
types:
- opened
- labeled
- unlabeled
- synchronize
permissions: {}
jobs:
workflows:
uses: hassio-addons/workflows/.github/workflows/pr-labels.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
================================================
FILE: .github/workflows/stale.yaml
================================================
---
name: Stale
# yamllint disable-line rule:truthy
on:
schedule:
- cron: "0 8 * * *"
workflow_dispatch:
permissions:
issues: write
pull-requests: write
jobs:
workflows:
uses: hassio-addons/workflows/.github/workflows/stale.yaml@3846ae0fd09acec8ac1ac308ceacd052b9d01bec # v2.0.6
================================================
FILE: .mdlrc
================================================
rules "~MD024"
================================================
FILE: .yamllint
================================================
---
rules:
braces:
level: error
min-spaces-inside: 0
max-spaces-inside: 1
min-spaces-inside-empty: -1
max-spaces-inside-empty: -1
brackets:
level: error
min-spaces-inside: 0
max-spaces-inside: 0
min-spaces-inside-empty: -1
max-spaces-inside-empty: -1
colons:
level: error
max-spaces-before: 0
max-spaces-after: 1
commas:
level: error
max-spaces-before: 0
min-spaces-after: 1
max-spaces-after: 1
comments:
level: error
require-starting-space: true
min-spaces-from-content: 1
comments-indentation:
level: error
document-end:
level: error
present: false
document-start:
level: error
present: true
empty-lines:
level: error
max: 1
max-start: 0
max-end: 1
hyphens:
level: error
max-spaces-after: 1
indentation:
level: error
spaces: 2
indent-sequences: true
check-multi-line-strings: false
key-duplicates:
level: error
line-length: disable
new-line-at-end-of-file:
level: error
new-lines:
level: error
type: unix
trailing-spaces:
level: error
truthy:
level: error
================================================
FILE: LICENSE.md
================================================
# MIT License
Copyright (c) 2018-2026 Franck Nijhof
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# Home Assistant Community App: UniFi Network Application
[![GitHub Release][releases-shield]][releases]
![Project Stage][project-stage-shield]
[![License][license-shield]](LICENSE.md)
![Supports aarch64 Architecture][aarch64-shield]
![Supports amd64 Architecture][amd64-shield]
[![GitHub Actions][github-actions-shield]][github-actions]
![Project Maintenance][maintenance-shield]
[![GitHub Activity][commits-shield]][commits]
[![Discord][discord-shield]][discord]
[![Community Forum][forum-shield]][forum]
[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
[![Support Frenck on Patreon][patreon-shield]][patreon]
The UniFi Network Application allows you to manage your UniFi network
using a web browser.

## About
This app runs Ubiquiti Networks' UniFi Network Application software, which
allows you to manage your UniFi network via the web browser. The app
provides a single-click installation and run solution for Home Assistant,
allowing users to get their network up, running, and updated, easily.
**Note:** The standalone UniFi Network Application is approaching end-of-life.
Ubiquiti is transitioning to UniFi OS Server, which does not translate to a
Docker/Home Assistant app. There is no upgrade path from this app to UniFi OS
Server. See the [documentation][docs] for details.
[:books: Read the full app documentation][docs]
## Support
Got questions?
You have several options to get them answered:
- The [Home Assistant Community Apps Discord chat server][discord] for app
support and feature requests.
- The [Home Assistant Discord chat server][discord-ha] for general Home
Assistant discussions and questions.
- The Home Assistant [Community Forum][forum].
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
You could also [open an issue here][issue] GitHub.
## Contributing
This is an active open-source project. We are always open to people who want to
use the code or contribute to it.
We have set up a separate document containing our
[contribution guidelines](.github/CONTRIBUTING.md).
Thank you for being involved! :heart_eyes:
## Authors & contributors
The original setup of this repository is by [Franck Nijhof][frenck].
For a full list of all authors and contributors,
check [the contributor's page][contributors].
## We have got some Home Assistant apps for you
Want some more functionality to your Home Assistant instance?
We have created multiple apps for Home Assistant. For a full list, check out
our [GitHub Repository][repository].
## License
MIT License
Copyright (c) 2018-2026 Franck Nijhof
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
[commits-shield]: https://img.shields.io/github/commit-activity/y/hassio-addons/app-unifi.svg
[commits]: https://github.com/hassio-addons/app-unifi/commits/main
[contributors]: https://github.com/hassio-addons/app-unifi/graphs/contributors
[discord-ha]: https://discord.gg/c5DvZ4e
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
[discord]: https://discord.me/hassioaddons
[docs]: https://github.com/hassio-addons/app-unifi/blob/main/unifi/DOCS.md
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-unifi-controller/56297?u=frenck
[frenck]: https://github.com/frenck
[github-actions-shield]: https://github.com/hassio-addons/app-unifi/workflows/CI/badge.svg
[github-actions]: https://github.com/hassio-addons/app-unifi/actions
[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
[github-sponsors]: https://github.com/sponsors/frenck
[issue]: https://github.com/hassio-addons/app-unifi/issues
[license-shield]: https://img.shields.io/github/license/hassio-addons/app-unifi.svg
[maintenance-shield]: https://img.shields.io/maintenance/yes/2026.svg
[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
[patreon]: https://www.patreon.com/frenck
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
[reddit]: https://reddit.com/r/homeassistant
[releases-shield]: https://img.shields.io/github/release/hassio-addons/app-unifi.svg
[releases]: https://github.com/hassio-addons/app-unifi/releases
[repository]: https://github.com/hassio-addons/repository
================================================
FILE: unifi/.README.j2
================================================
# Home Assistant Community App: UniFi Network Application
[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
[![Support Frenck on Patreon][patreon-shield]][patreon]
The UniFi Network Application allows you to manage your UniFi network
using a web browser.
## Important notice
**The standalone UniFi Network Application is approaching end-of-life.**
Ubiquiti is transitioning to UniFi OS Server, which does not translate to a
Docker/Home Assistant app. There is no upgrade path from this app to UniFi OS
Server. This app will continue to work as long as Ubiquiti ships the standalone
application, but users planning long-term should consider migrating to a
dedicated machine or VM.
## About
This app runs Ubiquiti Networks' UniFi Network Application software, which
allows you to manage your UniFi network via the web browser. The app
provides a single-click installation and run solution for Home Assistant,
allowing users to get their network up, running, and updated, easily.
This app supports all Home Assistant supported architectures, including the
Raspberry Pi.
![UniFi Network Application][screenshot]
{% if channel == "edge" %}
## WARNING! THIS IS AN EDGE VERSION!
This Home Assistant Apps repository contains edge builds of apps.
Edge app builds are based on the latest development version.
- They may not work at all.
- They might stop working at any time.
- They could have a negative impact on your system.
This repository was created for:
- Anybody willing to test.
- Anybody interested in trying out upcoming apps or app features.
- Developers.
If you are more interested in stable releases of our apps:
<https://github.com/hassio-addons/repository>
{% endif %}
{% if channel == "beta" %}
## WARNING! THIS IS A BETA VERSION!
This Home Assistant Apps repository contains beta releases of apps.
- They might stop working at any time.
- They could have a negative impact on your system.
This repository was created for:
- Anybody willing to test.
- Anybody interested in trying out upcoming apps or app features.
If you are more interested in stable releases of our apps:
<https://github.com/hassio-addons/repository>
{% endif %}
[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
[discord]: https://discord.me/hassioaddons
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-unifi-controller/56297?u=frenck
[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
[github-sponsors]: https://github.com/sponsors/frenck
[maintenance-shield]: https://img.shields.io/maintenance/yes/2026.svg
[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
[patreon]: https://www.patreon.com/frenck
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
[release-shield]: https://img.shields.io/badge/version-{{ version }}-blue.svg
[release]: {{ repo }}/tree/{{ version }}
[screenshot]: https://github.com/hassio-addons/app-unifi/raw/main/images/screenshot.jpg
================================================
FILE: unifi/DOCS.md
================================================
# Home Assistant Community App: UniFi Network Application
This app runs Ubiquiti Networks' UniFi Network Application software, which
allows you to manage your UniFi network via the web browser. The app
provides a single-click installation and run solution for Home Assistant,
allowing users to get their network up, running, and updated, easily.
## Installation
The installation of this app is pretty straightforward and not different in
comparison to installing any other Home Assistant app.
1. Click the Home Assistant My button below to open the app on your Home
Assistant instance.
[![Open this app in your Home Assistant instance.][app-badge]][app]
1. Click the "Install" button to install the app.
1. Check the logs of the "UniFi Network Application" to see if everything went
well.
1. Click the "OPEN WEB UI" button, and follow the initial wizard.
1. After completing the wizard, log in with the credentials just created.
1. Select Unifi Devices which you can find on the left hand. Once there, select Device Updates and Settings on the top right.
1. Scroll down to Device settings and below the `Inform Host Override` label, enter the IP or hostname of the device running Home Assistant.
1. Click the checkbox option for `Inform Host Override` so that is now "checked".
1. Hit the "Apply Changes" button to activate the settings.
1. Ready to go!
## Configuration
**Note**: _Remember to restart the app when the configuration is changed._
Example app configuration, with all available options:
```yaml
log_level: info
memory_max: 2048
memory_init: 512
```
**Note**: _This is just an example, don't copy and paste it! Create your own!_
### Option: `log_level`
The `log_level` option controls the level of log output by the app and can
be changed to be more or less verbose, which might be useful when you are
dealing with an unknown issue. Possible values are:
- `trace`: Show every detail, like all called internal functions.
- `debug`: Shows detailed debug information.
- `info`: Normal (usually) interesting events.
- `warning`: Exceptional occurrences that are not errors.
- `error`: Runtime errors that do not require immediate action.
- `fatal`: Something went terribly wrong. App becomes unusable.
Please note that each level automatically includes log messages from a
more severe level, e.g., `debug` also shows `info` messages. By default,
the `log_level` is set to `info`, which is the recommended setting unless
you are troubleshooting.
### Option: `memory_max`
This option allows you to change the amount of memory the UniFi Network
Application is allowed to consume. By default, this is limited to 256 MB.
You might want to increase this, in order to reduce CPU load or reduce this,
in order to optimize your system for lower memory usage.
This option takes the number of Megabyte, for example, the default is 256.
### Option: `memory_init`
This option allows you to change the amount of memory the UniFi Network
Application will initially reserve/consume when starting. By default,
this is limited to 128MB.
This option takes the number of Megabyte, for example, the default is 128.
## Automated backups
The UniFi Network Application ships with an automated backup feature. This
feature works but has been adjusted to put the created backups in a different
location.
Backups are created in `/backup/unifi`. You can access this folder using
the normal Home Assistant methods (e.g., using Samba, Terminal, SSH).
## Manually adopting a device
Alternatively to setting up a custom inform address (installation steps 7-9)
you can manually adopt a device by following these steps:
- SSH into the device using `ubnt` as username and `ubnt` as password
- `$ mca-cli`
- `$ set-inform http://<IP of Hassio>:<controller port (default:8080)>/inform`
- for example `$ set-inform http://192.168.1.14:8080/inform`
## Future of this app
**The standalone UniFi Network Application is approaching end-of-life.**
Ubiquiti is transitioning to UniFi OS Server, a multi-container architecture
based on podman and systemd that does not translate to a Docker/Home Assistant
app. This app will continue to work as long as Ubiquiti ships the standalone
application, but there is no upgrade path from this app to UniFi OS Server.
Users planning long-term should consider migrating to a dedicated machine or VM.
## Known issues and limitations
- The AP seems stuck in "adopting" state: Please read the installation
instructions carefully. You need to change some controller settings
in order for this app to work properly. Using the Ubiquiti Discovery
Tool, or SSH'ing into the AP and setting the INFORM after adopting
will resolve this. (see: _Manually adopting a device_)
- The following error can show up in the log, but can be safely ignored:
```
INFO: I/O exception (java.net.ConnectException) caught when processing
request: Connection refused (Connection refused)
```
This is a known issue, however, the app functions normally.
- Due to security policies in the UniFi Network Application software, it is
currently impossible to add the UniFI web interface to your Home Assistant
frontend using a `panel_iframe`.
- The broadcast feature of the EDU-type APs are currently not working with
this app. Due to a limitation in Home Assistant, is it currently impossible
to open the required "range" of ports needed for this feature to work.
- This app cannot support Ingress due to technical limitations of the
UniFi software.
- During making a backup of this app via Home Assistant, this app will
temporary shutdown and start up after the backup has finished. This prevents
data corruption during taking the backup.
## Changelog & Releases
This repository keeps a change log using [GitHub's releases][releases]
functionality. The format of the log is based on
[Keep a Changelog][keepchangelog].
Releases are based on [Semantic Versioning][semver], and use the format
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
based on the following:
- `MAJOR`: Incompatible or major changes.
- `MINOR`: Backwards-compatible new features and enhancements.
- `PATCH`: Backwards-compatible bugfixes and package updates.
## Support
Got questions?
You have several options to get them answered:
- The [Home Assistant Community Apps Discord chat server][discord] for app
support and feature requests.
- The [Home Assistant Discord chat server][discord-ha] for general Home
Assistant discussions and questions.
- The Home Assistant [Community Forum][forum].
- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
You could also [open an issue here][issue] GitHub.
## Authors & contributors
The original setup of this repository is by [Franck Nijhof][frenck].
For a full list of all authors and contributors,
check [the contributor's page][contributors].
## License
MIT License
Copyright (c) 2018-2026 Franck Nijhof
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
[app-badge]: https://my.home-assistant.io/badges/supervisor_addon.svg
[app]: https://my.home-assistant.io/redirect/supervisor_addon/?addon=a0d7b954_unifi&repository_url=https%3A%2F%2Fgithub.com%2Fhassio-addons%2Frepository
[contributors]: https://github.com/hassio-addons/app-unifi/graphs/contributors
[discord-ha]: https://discord.gg/c5DvZ4e
[discord]: https://discord.me/hassioaddons
[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-unifi-controller/56297?u=frenck
[frenck]: https://github.com/frenck
[issue]: https://github.com/hassio-addons/app-unifi/issues
[keepchangelog]: http://keepachangelog.com/en/1.0.0/
[reddit]: https://reddit.com/r/homeassistant
[releases]: https://github.com/hassio-addons/app-unifi/releases
[semver]: http://semver.org/spec/v2.0.0.htm
================================================
FILE: unifi/Dockerfile
================================================
ARG BUILD_FROM=ghcr.io/hassio-addons/ubuntu-base:8.2.0
# hadolint ignore=DL3006
FROM ${BUILD_FROM}
# Set shell
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# Setup base system
# UniFi 10.1+ requires Java 25 — not in Ubuntu repos, use Eclipse Temurin.
# Temurin is not version-pinned: Adoptium uses different build suffixes per
# architecture (e.g. +10-1 on amd64 vs +10-0 on arm64), making a single
# pinned version string impossible across all supported architectures.
# hadolint ignore=DL3008
RUN \
apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y --no-install-recommends \
gpg=2.2.19-3ubuntu2.5 \
\
&& curl -fsSL https://packages.adoptium.net/artifactory/api/gpg/key/public \
| gpg --dearmor -o /usr/share/keyrings/adoptium.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb focal main" \
> /etc/apt/sources.list.d/adoptium.list \
&& apt-get update \
\
&& apt-get install -y --no-install-recommends \
binutils=2.34-6ubuntu1.11 \
libcap2=1:2.32-1ubuntu0.2 \
logrotate=3.14.0-4ubuntu3 \
mongodb-server=1:3.6.9+really3.6.8+90~g8e540c0b6d-0ubuntu5.3 \
\
&& apt-get install -y --no-install-recommends \
temurin-25-jre \
\
&& curl -J -L -o /tmp/unifi.deb \
"https://dl.ui.com/unifi/10.2.105/unifi_sysvinit_all.deb" \
\
&& dpkg --install /tmp/unifi.deb \
\
# Patch libubnt_webrtc_jni.so: strip the DONT-FRAGMENT (0x001A) attribute from
# TURN Allocate requests. Cloudflare's TURN relay rejects it with error 420
# (Unknown Attribute), breaking remote access via unifi.ui.com on all
# self-hosted controllers. The _all deb ships both arch libs, so we can patch
# both here regardless of build architecture.
# Expected MD5s are for the unmodified originals — build fails loudly if
# Ubiquiti ships a new library so offsets can be re-derived before proceeding.
&& AARCH64_LIB="/usr/lib/unifi/lib/native/Linux/aarch64/libubnt_webrtc_jni.so" \
&& X86_64_LIB="/usr/lib/unifi/lib/native/Linux/x86_64/libubnt_webrtc_jni.so" \
&& echo "27e786235fae4a052bc808c3c13dfc19 ${AARCH64_LIB}" | md5sum --check \
&& echo "657963ca47b185baf4eef8d90b70755b ${X86_64_LIB}" | md5sum --check \
# Helper: verify byte sequence at offset in library matches expected hex string.
# On mismatch, emit a descriptive failure message and exit non-zero.
&& verify_bytes() { \
local lib="$1" off="$2" count="$3" expect="$4" label="$5"; \
local actual; \
actual="$(dd if="${lib}" bs=1 skip=$((off)) count="${count}" 2>/dev/null | od -An -tx1 | tr -d ' \n')"; \
if [ "${actual}" != "${expect}" ]; then \
echo "FAIL: ${label} at $(printf '0x%X' "${off}"): expected ${expect}, got ${actual}" >&2; \
return 1; \
fi; \
} \
# Sanity-check target bytes before patching. Each offset must point to the
# opcode for "mov type, #0x1a" that precedes AppendFieldEmpty.
# aarch64: full 4-byte instruction 0x52800342 (mov w2, #0x1a), little-endian
# x86_64: 5-byte instruction 0xba 0x1a 0x00 0x00 0x00 (mov edx, 0x1a)
&& verify_bytes "${AARCH64_LIB}" $((0x167214)) 4 "42038052" "aarch64 pre-patch site 1" \
&& verify_bytes "${AARCH64_LIB}" $((0x167D20)) 4 "42038052" "aarch64 pre-patch site 2" \
&& verify_bytes "${X86_64_LIB}" $((0x114CB9)) 5 "ba1a000000" "x86_64 pre-patch site 1" \
&& verify_bytes "${X86_64_LIB}" $((0x1157D7)) 5 "ba1a000000" "x86_64 pre-patch site 2" \
# Apply the patches
&& printf '\x1f\x20\x03\xd5' | dd of="${AARCH64_LIB}" bs=1 seek=$((0x167214)) count=4 conv=notrunc 2>/dev/null \
&& printf '\x1f\x20\x03\xd5' | dd of="${AARCH64_LIB}" bs=1 seek=$((0x167D20)) count=4 conv=notrunc 2>/dev/null \
&& printf '\x90\x90\x90\x90\x90' | dd of="${X86_64_LIB}" bs=1 seek=$((0x114CB9)) count=5 conv=notrunc 2>/dev/null \
&& printf '\x90\x90\x90\x90\x90' | dd of="${X86_64_LIB}" bs=1 seek=$((0x1157D7)) count=5 conv=notrunc 2>/dev/null \
# Verify patches actually landed
&& verify_bytes "${AARCH64_LIB}" $((0x167214)) 4 "1f2003d5" "aarch64 post-patch site 1" \
&& verify_bytes "${AARCH64_LIB}" $((0x167D20)) 4 "1f2003d5" "aarch64 post-patch site 2" \
&& verify_bytes "${X86_64_LIB}" $((0x114CB9)) 5 "9090909090" "x86_64 post-patch site 1" \
&& verify_bytes "${X86_64_LIB}" $((0x1157D7)) 5 "9090909090" "x86_64 post-patch site 2" \
\
&& apt-get clean \
&& rm -fr \
/tmp/* \
/var/cache/* \
/var/lib/apt/lists/* \
/var/log/*.log \
/var/log/apt
# Copy root filesystem
COPY rootfs /
# Health check
HEALTHCHECK --start-period=5m \
CMD curl --insecure --fail https://localhost:8443 || exit 1
# Build arguments
ARG BUILD_ARCH
ARG BUILD_DATE
ARG BUILD_DESCRIPTION
ARG BUILD_NAME
ARG BUILD_REF
ARG BUILD_REPOSITORY
ARG BUILD_VERSION
# Labels
LABEL \
io.hass.name="${BUILD_NAME}" \
io.hass.description="${BUILD_DESCRIPTION}" \
io.hass.arch="${BUILD_ARCH}" \
io.hass.type="addon" \
io.hass.version=${BUILD_VERSION} \
maintainer="Franck Nijhof <opensource@frenck.dev>" \
org.opencontainers.image.title="${BUILD_NAME}" \
org.opencontainers.image.description="${BUILD_DESCRIPTION}" \
org.opencontainers.image.vendor="Home Assistant Community Apps" \
org.opencontainers.image.authors="Franck Nijhof <opensource@frenck.dev>" \
org.opencontainers.image.licenses="MIT" \
org.opencontainers.image.url="https://frenck.dev/home-assistant-apps" \
org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \
org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \
org.opencontainers.image.created=${BUILD_DATE} \
org.opencontainers.image.revision=${BUILD_REF} \
org.opencontainers.image.version=${BUILD_VERSION}
================================================
FILE: unifi/build.yaml
================================================
---
build_from:
aarch64: ghcr.io/hassio-addons/ubuntu-base:8.2.0
amd64: ghcr.io/hassio-addons/ubuntu-base:8.2.0
================================================
FILE: unifi/config.yaml
================================================
---
name: UniFi Network Application
version: dev
slug: unifi
description: Manage your UniFi network using a web browser
url: https://github.com/hassio-addons/app-unifi
webui: https://[HOST]:[PORT:8443]
startup: services
arch:
- aarch64
- amd64
init: false
backup: cold
map:
- backup:rw
ports:
161/udp: null
1900/udp: null
3478/udp: 3478
5514/udp: 5514
6789/tcp: 6789
8080/tcp: 8080
8443/tcp: 8443
8843/tcp: 8843
8880/tcp: 8880
10001/udp: 10001
ports_description:
161/udp: Used for SNMP Access
1900/udp: L2 discoverable port
3478/udp: Used for STUN
5514/udp: Used for remote syslog debugging
6789/tcp: Used for UniFi mobile speed test
8080/tcp: Used for device and controller communication
8443/tcp: Used for controller web interface and API
8843/tcp: Used for HTTPS portal redirection
8880/tcp: Used for HTTP portal redirection
10001/udp: Used for device discovery
hassio_api: true
schema:
log_level: list(trace|debug|info|notice|warning|error|fatal)?
memory_max: int?
memory_init: int?
================================================
FILE: unifi/rootfs/etc/s6-overlay/s6-rc.d/init-unifi/dependencies.d/base
================================================
================================================
FILE: unifi/rootfs/etc/s6-overlay/s6-rc.d/init-unifi/run
================================================
#!/command/with-contenv bashio
# shellcheck shell=bash
# ==============================================================================
# Home Assistant Community App: UniFi Network Application
# Configures the UniFi Network Application
# ==============================================================================
readonly KEYSTORE="/usr/lib/unifi/data/keystore"
readonly properties="/data/unifi/data/system.properties"
# Ensures the data of the UniFi Network Application is store outside the container
if ! bashio::fs.directory_exists '/data/unifi/data'; then
mkdir -p /data/unifi/data
fi
rm -fr /usr/lib/unifi/data
ln -s /data/unifi/data /usr/lib/unifi/data
if ! bashio::fs.directory_exists '/backup/unifi'; then
mkdir -p /backup/unifi
fi
rm -fr /usr/lib/unifi/data/backup
ln -s /backup/unifi /usr/lib/unifi/data/backup
# Enable small files on MongoDB
if ! bashio::fs.file_exists "${properties}"; then
touch "${properties}"
echo "unifi.db.extraargs=--smallfiles" > "${properties}"
fi
#shellcheck disable=SC2016
sed -i \
'/^unifi.db.extraargs=/{h;s/=.*/=--smallfiles/};${x;/^$/{s//unifi.db.extraargs=--smallfiles/;H};x}' \
"${properties}"
# If there is no keystore yet, we are good to go
if ! bashio::fs.file_exists "${KEYSTORE}"; then
# Prevent migration next time
touch /data/keystore_reset
bashio::exit.ok
fi
# If the keystore has never been reset, we are going to do that... once
# This is a migration path, for people that previously had a custom SSL
# certificate.
# It will trigger a new self-signed certificate.
# This logic can be removed and cleaned up at a later moment
if ! bashio::fs.file_exists "/data/keystore_reset"; then
rm -f -r "${KEYSTORE}"
touch /data/keystore_reset
bashio::exit.ok
fi
# Suppress the "Upgrade to UniFi OS Server" nag — irrelevant on HA apps.
# The modal in 10.2.105 has a bug: it reads async storage (Promise) synchronously,
# so the dismiss state never resolves and the modal always shows.
# Fix: patch the initial state from !s (always true) to !1 (always false).
SWAI_JS=$(find /usr/lib/unifi/webapps/ROOT/app-unifi/react/js -name 'swai.*.js' 2>/dev/null | head -1)
if [ -n "${SWAI_JS}" ] && grep -q 'useState)(!s)' "${SWAI_JS}"; then
sed -i 's/useState)(!s)/useState)(!1)/g' "${SWAI_JS}" 2>/dev/null \
|| bashio::log.warning "Could not patch UOS upgrade nag"
fi
================================================
FILE: unifi/rootfs/etc/s6-overlay/s6-rc.d/init-unifi/type
================================================
oneshot
================================================
FILE: unifi/rootfs/etc/s6-overlay/s6-rc.d/init-unifi/up
================================================
/etc/s6-overlay/s6-rc.d/init-unifi/run
================================================
FILE: unifi/rootfs/etc/s6-overlay/s6-rc.d/unifi/dependencies.d/init-unifi
================================================
================================================
FILE: unifi/rootfs/etc/s6-overlay/s6-rc.d/unifi/finish
================================================
#!/command/with-contenv bashio
# shellcheck shell=bash
# ==============================================================================
# Home Assistant Community App: UniFi Network Application
# Take down the S6 supervision tree when UniFi Network Application fails
# ==============================================================================
declare exit_code
readonly exit_code_container=$(</run/s6-linux-init-container-results/exitcode)
readonly exit_code_service="${1}"
readonly exit_code_signal="${2}"
readonly service="UniFi Network Application"
bashio::log.info \
"Service ${service} exited with code ${exit_code_service}" \
"(by signal ${exit_code_signal})"
if [[ "${exit_code_service}" -eq 256 ]]; then
if [[ "${exit_code_container}" -eq 0 ]]; then
echo $((128 + $exit_code_signal)) > /run/s6-linux-init-container-results/exitcode
fi
[[ "${exit_code_signal}" -eq 15 ]] && exec /run/s6/basedir/bin/halt
elif [[ "${exit_code_service}" -ne 0 ]]; then
if [[ "${exit_code_container}" -eq 0 ]]; then
echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode
fi
exec /run/s6/basedir/bin/halt
fi
================================================
FILE: unifi/rootfs/etc/s6-overlay/s6-rc.d/unifi/run
================================================
#!/command/with-contenv bashio
# shellcheck shell=bash
# ==============================================================================
# Home Assistant Community App: UniFi Network Application
# Runs the UniFi Network Application
# ==============================================================================
declare -a options
declare xmx
declare xms
bashio::log.info 'Now starting the UniFi Network Application...'
bashio::log.info 'Note: No app specific logs beyond this point.'
xmx=256
if bashio::config.has_value 'memory_max'; then
xmx=$(bashio::config 'memory_max')
fi
xms=128
if bashio::config.has_value 'memory_init'; then
xms=$(bashio::config 'memory_init')
fi
options+=("-Xmx${xmx}m")
options+=("-Xms${xms}m")
options+=(-Dapple.awt.UIElement=true)
options+=(-Dfile.encoding=UTF-8)
options+=(-Djava.awt.headless=true)
options+=(-XX:+CrashOnOutOfMemoryError)
options+=(-XX:+ExitOnOutOfMemoryError)
options+=(-XX:+UseParallelGC)
options+=(--enable-native-access=ALL-UNNAMED)
options+=(--add-opens=java.base/java.io=ALL-UNNAMED)
options+=(--add-opens=java.base/java.lang=ALL-UNNAMED)
options+=(--add-opens=java.base/java.time=ALL-UNNAMED)
options+=(--add-opens=java.base/sun.security.util=ALL-UNNAMED)
options+=(--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED)
options+=(-jar /usr/lib/unifi/lib/ace.jar)
options+=(start)
# Run UniFi
exec /usr/bin/java "${options[@]}"
================================================
FILE: unifi/rootfs/etc/s6-overlay/s6-rc.d/unifi/type
================================================
longrun
================================================
FILE: unifi/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/init-unifi
================================================
================================================
FILE: unifi/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/unifi
================================================
================================================
FILE: unifi/translations/en.yaml
================================================
---
configuration:
log_level:
name: Log level
description: >-
Controls the level of log details the app provides.
memory_max:
name: Max Memory
description: >-
This option allows you to change the amount of memory the UniFi Network
Application is allowed to consume.
memory_init:
name: Initial Memory
description: >-
This option allows you to change the amount of memory the UniFi Network
Application will initially reserve/consume when starting.
network:
161/udp: Used for SNMP Access
1900/udp: L2 discoverable port
3478/udp: Used for STUN
5514/udp: Used for remote syslog debugging
6789/tcp: Used for UniFi mobile speed test
8080/tcp: Used for device and controller communication
8443/tcp: Used for controller web interface and API
8843/tcp: Used for HTTPS portal redirection
8880/tcp: Used for HTTP portal redirection
10001/udp: Used for device discovery
================================================
FILE: unifi/translations/fr.yaml
================================================
---
configuration:
log_level:
name: Niveau de journalisation
description: >-
Contrôle le niveau de détails des journaux fournis par l'extension.
memory_max:
name: Mémoire maximale
description: >-
Cette option vous permet de modifier la quantité de mémoire que l'application UniFi Network est autorisée à consommer.
memory_init:
name: Mémoire initiale
description: >-
Cette option vous permet de modifier la quantité de mémoire que l'application UniFi Network réservera/consommera initialement au démarrage.
network:
161/udp: Utilisé pour l'accès SNMP
1900/udp: Port découvrable de niveau 2
3478/udp: Utilisé pour STUN
5514/udp: Utilisé pour le débogage distant via syslog
6789/tcp: Utilisé pour le test de vitesse UniFi Mobile
8080/tcp: Utilisé pour la communication entre appareils et contrôleur
8443/tcp: Utilisé pour l'interface web et l'API du contrôleur
8843/tcp: Utilisé pour la redirection de portail HTTPS
8880/tcp: Utilisé pour la redirection de portail HTTP
10001/udp: Utilisé pour la découverte d'appareils
================================================
FILE: unifi/translations/pl.yaml
================================================
---
configuration:
log_level:
name: Log level
description: >-
Kontroluje poziom szczegółowości logów, jaki zapewnia dodatek.
memory_max:
name: Max Memory
description: >-
Ta opcja pozwala na zmianę ilości pamięci, którą może używać
aplikacja UniFi Network.
memory_init:
name: Initial Memory
description: >-
Ta opcja pozwala zmienić ilość pamięci, którą aplikacja UniFi
Network będzie rezerwować/używać przy starcie.
network:
161/udp: Używany dla dostępu po SNMP
1900/udp: L2 wykrywalny port
3478/udp: Używany dla STUN
5514/udp: Używany do zdalnego debugowania syslogu
6789/tcp: Używany do testu prędkości UniFi mobile
8080/tcp: Używany do komunikacji urządzeń z kontrolerem
8443/tcp: Używany do interfejsu webowego kontrolera i API
8843/tcp: Używany do przekierowania na portal po HTTPS
8880/tcp: Używany do przekierowania na portal po HTTP
10001/udp: Używany do wykrywania urządzeń
================================================
FILE: unifi/translations/pt-BR.yaml
================================================
---
configuration:
log_level:
name: Detalhes do log
description: >-
Controla o nível de detalhes provido pelo app para o log.
memory_max:
name: Memória máxima
description: >-
Esta opção permite que você altere a quantidade máxima de memória
consumida pela UniFi Network Application.
memory_init:
name: Memória inicial
description: >-
Esta opção permite que você altere a quantidade máxima de memória
reservada/consumida na inicialização da UniFi Network Application.
network:
161/udp: Utilizado para acesso SNMP
1900/udp: L2 discoverable port
3478/udp: Utilizado para STUN
5514/udp: Utilizado para depuração remota do syslog
6789/tcp: Utilizado para teste de velocidade do app UniFi
8080/tcp: Utilizado para comunicação do controlador com dispositivos
8443/tcp: Utilizado para interface web e API do controlador
8843/tcp: Utilizado para redirecionamento HTTPS do portal
8880/tcp: Utilizado para redirecionamento HTTP do portal
10001/udp: Utilizado para descoberta de dispositivos
gitextract_tt91enxx/
├── .github/
│ ├── CODEOWNERS
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── SECURITY.md
│ ├── dependabot.yaml
│ └── workflows/
│ ├── ci.yaml
│ ├── deploy.yaml
│ ├── labels.yaml
│ ├── lock.yaml
│ ├── pr-labels.yaml
│ └── stale.yaml
├── .mdlrc
├── .yamllint
├── LICENSE.md
├── README.md
└── unifi/
├── .README.j2
├── DOCS.md
├── Dockerfile
├── build.yaml
├── config.yaml
├── rootfs/
│ └── etc/
│ └── s6-overlay/
│ └── s6-rc.d/
│ ├── init-unifi/
│ │ ├── dependencies.d/
│ │ │ └── base
│ │ ├── run
│ │ ├── type
│ │ └── up
│ ├── unifi/
│ │ ├── dependencies.d/
│ │ │ └── init-unifi
│ │ ├── finish
│ │ ├── run
│ │ └── type
│ └── user/
│ └── contents.d/
│ ├── init-unifi
│ └── unifi
└── translations/
├── en.yaml
├── fr.yaml
├── pl.yaml
└── pt-BR.yaml
Condensed preview — 37 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (54K chars).
[
{
"path": ".github/CODEOWNERS",
"chars": 18,
"preview": ".github/* @frenck\n"
},
{
"path": ".github/CODE_OF_CONDUCT.md",
"chars": 8799,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe pledge to make our community welcoming, safe, and equitable fo"
},
{
"path": ".github/CONTRIBUTING.md",
"chars": 1167,
"preview": "# Contributing\n\nWhen contributing to this repository, please first discuss the change you wish\nto make via issue, email,"
},
{
"path": ".github/FUNDING.yml",
"chars": 70,
"preview": "---\ngithub: frenck\npatreon: frenck\ncustom: https://frenck.dev/donate/\n"
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 332,
"preview": "# Problem/Motivation\n\n> (Why the issue was filed)\n\n## Expected behavior\n\n> (What you expected to happen)\n\n## Actual beha"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 254,
"preview": "# Proposed Changes\n\n> (Describe the changes and rationale behind them)\n\n## Related Issues\n\n> ([Github link][autolink-ref"
},
{
"path": ".github/SECURITY.md",
"chars": 810,
"preview": "# Security Policy\n\nWe take the security of this project seriously. We appreciate your efforts to responsibly disclose yo"
},
{
"path": ".github/dependabot.yaml",
"chars": 139,
"preview": "---\nversion: 2\nupdates:\n - package-ecosystem: \"github-actions\"\n directory: \"/\"\n schedule:\n interval: daily\n "
},
{
"path": ".github/workflows/ci.yaml",
"chars": 400,
"preview": "---\nname: CI\n\n# yamllint disable-line rule:truthy\non:\n pull_request:\n types:\n - opened\n - reopened\n -"
},
{
"path": ".github/workflows/deploy.yaml",
"chars": 680,
"preview": "---\nname: Deploy\n\n# yamllint disable-line rule:truthy\non:\n push:\n branches:\n - main\n release:\n types:\n "
},
{
"path": ".github/workflows/labels.yaml",
"chars": 285,
"preview": "---\nname: Sync labels\n\n# yamllint disable-line rule:truthy\non:\n schedule:\n - cron: \"34 5 * * *\"\n workflow_dispatch:"
},
{
"path": ".github/workflows/lock.yaml",
"chars": 298,
"preview": "---\nname: Lock\n\n# yamllint disable-line rule:truthy\non:\n schedule:\n - cron: \"0 9 * * *\"\n workflow_dispatch:\n\npermis"
},
{
"path": ".github/workflows/pr-labels.yaml",
"chars": 311,
"preview": "---\nname: PR Labels\n\n# yamllint disable-line rule:truthy\non:\n pull_request:\n types:\n - opened\n - labeled\n "
},
{
"path": ".github/workflows/stale.yaml",
"chars": 300,
"preview": "---\nname: Stale\n\n# yamllint disable-line rule:truthy\non:\n schedule:\n - cron: \"0 8 * * *\"\n workflow_dispatch:\n\npermi"
},
{
"path": ".mdlrc",
"chars": 14,
"preview": "rules \"~MD024\""
},
{
"path": ".yamllint",
"chars": 1156,
"preview": "---\nrules:\n braces:\n level: error\n min-spaces-inside: 0\n max-spaces-inside: 1\n min-spaces-inside-empty: -1\n"
},
{
"path": "LICENSE.md",
"chars": 1077,
"preview": "# MIT License\n\nCopyright (c) 2018-2026 Franck Nijhof\n\nPermission is hereby granted, free of charge, to any person obtain"
},
{
"path": "README.md",
"chars": 5507,
"preview": "# Home Assistant Community App: UniFi Network Application\n\n[![GitHub Release][releases-shield]][releases]\n![Project Stag"
},
{
"path": "unifi/.README.j2",
"chars": 3345,
"preview": "# Home Assistant Community App: UniFi Network Application\n\n[![Release][release-shield]][release] ![Project Stage][projec"
},
{
"path": "unifi/DOCS.md",
"chars": 8749,
"preview": "# Home Assistant Community App: UniFi Network Application\n\nThis app runs Ubiquiti Networks' UniFi Network Application so"
},
{
"path": "unifi/Dockerfile",
"chars": 5950,
"preview": "ARG BUILD_FROM=ghcr.io/hassio-addons/ubuntu-base:8.2.0\n# hadolint ignore=DL3006\nFROM ${BUILD_FROM}\n\n# Set shell\nSHELL [\""
},
{
"path": "unifi/build.yaml",
"chars": 116,
"preview": "---\nbuild_from:\n aarch64: ghcr.io/hassio-addons/ubuntu-base:8.2.0\n amd64: ghcr.io/hassio-addons/ubuntu-base:8.2.0\n"
},
{
"path": "unifi/config.yaml",
"chars": 1039,
"preview": "---\nname: UniFi Network Application\nversion: dev\nslug: unifi\ndescription: Manage your UniFi network using a web browser\n"
},
{
"path": "unifi/rootfs/etc/s6-overlay/s6-rc.d/init-unifi/dependencies.d/base",
"chars": 0,
"preview": ""
},
{
"path": "unifi/rootfs/etc/s6-overlay/s6-rc.d/init-unifi/run",
"chars": 2376,
"preview": "#!/command/with-contenv bashio\n# shellcheck shell=bash\n# ==============================================================="
},
{
"path": "unifi/rootfs/etc/s6-overlay/s6-rc.d/init-unifi/type",
"chars": 8,
"preview": "oneshot\n"
},
{
"path": "unifi/rootfs/etc/s6-overlay/s6-rc.d/init-unifi/up",
"chars": 39,
"preview": "/etc/s6-overlay/s6-rc.d/init-unifi/run\n"
},
{
"path": "unifi/rootfs/etc/s6-overlay/s6-rc.d/unifi/dependencies.d/init-unifi",
"chars": 0,
"preview": ""
},
{
"path": "unifi/rootfs/etc/s6-overlay/s6-rc.d/unifi/finish",
"chars": 1146,
"preview": "#!/command/with-contenv bashio\n# shellcheck shell=bash\n# ==============================================================="
},
{
"path": "unifi/rootfs/etc/s6-overlay/s6-rc.d/unifi/run",
"chars": 1393,
"preview": "#!/command/with-contenv bashio\n# shellcheck shell=bash\n# ==============================================================="
},
{
"path": "unifi/rootfs/etc/s6-overlay/s6-rc.d/unifi/type",
"chars": 8,
"preview": "longrun\n"
},
{
"path": "unifi/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/init-unifi",
"chars": 0,
"preview": ""
},
{
"path": "unifi/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/unifi",
"chars": 0,
"preview": ""
},
{
"path": "unifi/translations/en.yaml",
"chars": 937,
"preview": "---\nconfiguration:\n log_level:\n name: Log level\n description: >-\n Controls the level of log details the app "
},
{
"path": "unifi/translations/fr.yaml",
"chars": 1086,
"preview": "---\nconfiguration:\n log_level:\n name: Niveau de journalisation\n description: >-\n Contrôle le niveau de détai"
},
{
"path": "unifi/translations/pl.yaml",
"chars": 962,
"preview": "---\nconfiguration:\n log_level:\n name: Log level\n description: >-\n Kontroluje poziom szczegółowości logów, ja"
},
{
"path": "unifi/translations/pt-BR.yaml",
"chars": 1060,
"preview": "---\nconfiguration:\n log_level:\n name: Detalhes do log\n description: >-\n Controla o nível de detalhes provido"
}
]
About this extraction
This page contains the full source code of the hassio-addons/addon-unifi GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 37 files (48.7 KB), approximately 13.8k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.