owned this note
owned this note
Published
Linked with GitHub
---
tags: conda, work
---
# Introducing Channel Notices for conda
Today, I am here to talk to you about one of the latest feature additions
to `conda`, which is the "Channel Notices" feature. We will cover
exactly what this new feature is and how it works from the perspective
of regular `conda` users as well as channel owners.
## What are channel notices?
Simply put, channel notices provide a way for channel owners to communicate
important information to their respective users. A channel owner is a group
or individual that maintains a channel. Some of the biggest channels include
"defaults" which is managed by Anaconda and several of the community managed
channels, including "conda-forge" and "bioconda". Additionally, if you manage
a personal channel via "anaconda.org" then you too can be considered a channel
owner.
The notices themselves may include information about service disruptions or
announcements about particular packages. These notices may also include notices
about violations of terms of service for particular channels. On top of that,
channel owners who need support from their users or want to publicize any
initiatives can use channel notices for this purpose as well.
Channel notices will appear for users in one of two ways:
- During normal usage of the `install`, `update` or `create` sub-commands
- By invoking `conda notices` directly.
Below are examples of each:
### Example one: running `conda install, update or create`
```bash
conda install python=3.10
Collecting package metadata (current_repodata.json): done
Solving environment:
# Truncating usual install output...
Channel "repo.anaconda.com/pkgs/main/noarch" has the following notices:
[critical] -- Sun July 17th 11:00:00 2022
Here is an example message that will be displayed to users
```
If there are channel notices that you have not seen, they will be **displayed
here only once**. After a message has been displayed, it will no longer appear
when running `install`, `create` or `update`. To display all notices on command,
check out the next example.
### Example two: running `conda notices`
```bash
conda notices
Retrieving notices: done
Channel "repo.anaconda.com/pkgs/main/noarch" has the following notices:
[critical] -- Sun July 17th 11:00:00 2022
Here is an example message that will be displayed to users
```
Here, we directly invoke the `conda notices` command and will receive all messages
for all channels that we have configured.
### Disabling channel notices
If you do not want to see channel notices during regular usage of `conda`, you can put
the following line into your `.condarc` file:
```yaml
number_channel_notices: 0
```
The setting above specifies exactly how many messages will be shown when notices appear
while running the `install`, `update` or `create` sub-commands. Setting it to `0` disables
channel notices completely. Even when these notices are disabled in the `.condarc` file,
all channel notices that are currently available will still appear when the `conda notices`
command is invoked.
## How do I create channel notices?
As a channel owner, you will put all of your channel notices into a single `notices.json`
file in the root of your channel directory. This file lives beside other files such as
`channeldata.json`. An example of this layout is shown below:
```
# Root of channel repo
- channeldata.json
- index.html
- noarch/
- notices.json <-- new file where notices live
- osx64/
- ...
```
The `notices.json` file is laid out like the example below:
```json
{
"notices": [
{
"id": "1cd1d8e5-d96c-42d1-9c29-38120ad80823",
"message": "This is a very important message about channel stability",
"level": "critical",
"created_at": "2022-04-26T11:50:34+00:00",
"expired_at": "2022-06-30T11:50:34+00:00"
},
{
"id": "1cd1d8e5-d96c-42d1-9c29-28120ad80823",
"message": "Here is a warning about something with the channel",
"level": "warning",
"created_at": "2022-05-02T11:50:34+00:00",
"expired_at": "2022-06-30T11:50:34+00:00"
},
{
"id": "1cd1d8e5-d96c-42d1-9c29-28120ad80823",
"message": "Here is a helpful announcement about the channel itself",
"level": "info",
"created_at": "2022-05-02T11:50:34+00:00",
"expired_at": "2022-06-30T11:50:34+00:00"
}
]
}
```
Here's a summary of the fields for each notice:
**id** This is a unique identifier for the message, it can be any string you want
but we suggest using a UUID.
**message** This is the message itself. We recommend keeping it as short as possible; the size of a single Tweet, or ~280 characters, is ideal. You can use shortened
links when linking to a longer announcment.
**level** The level conveys the importance of the message and can be one of "critical",
"warning" and "info". There are no hard rules for the types of messages which belong in
these catagories. Please use your best judgment.
**created_at** A datetime field that shows when the message was created. Use the
ISO 8601 format.
**expired_at** A datetime field that shows when the message will expire. Use the ISO 8601 format. Additionally, this field will dictate when the `conda` client will fetch a new message. If you know you will be adding a new notice every week,
set the `expired_at` field to when you would like to client to check for new notices.
## Final thoughts and future development
As development on `conda` continues, "channel notices" may evolve into a more general
"notices" feature for all messages `conda` wants to communicate to its users (e.g. update
notices or experimental feature usage notices). We believe doing so will give the tool
better UX and centralize all notices to a single location for our users.
We highly appreciate any bug reports related to this new feature. Please file one
[at our GitHub repository](https://github.com/conda/conda/issues/new?assignees=&labels=type%3A%3Abug&template=bug-report.yml).