Linux desktop reminders

Reminders that fly in.

Bird runs quietly in the background. When something is due, a little bird flies in from the left side of your screen and holds up the reminder until you answer it.

Free and open source (MIT). Written in Go. Configured with one YAML file.

11:00

Stand-up meeting

Stop coding. Time to meet your team!

Install

Build from source. You need Go 1.25+ and the GTK / WebKitGTK development packages.

Debian / Ubuntu / Zorin / Mint
sudo apt install build-essential pkg-config libgtk-3-dev libwebkit2gtk-4.1-dev
git clone https://github.com/arjunshajitech/bird.git
cd bird
make                          # build
./build/bird-overlay --demo   # see the bird
make install-config           # create ~/.config/bird/config.yaml
make install install-service  # start with your desktop session

Fedora: sudo dnf install gcc pkgconf gtk3-devel webkit2gtk4.1-devel
Arch: sudo pacman -S base-devel gtk3 webkit2gtk-4.1

How it works

  1. 1

    Write your events

    List your reminders in ~/.config/bird/config.yaml. Save the file and Bird picks up the change.

  2. 2

    Bird keeps time

    A small background service checks the clock and remembers what it has already shown, even across restarts.

  3. 3

    The bird lands

    At the right moment the bird flies in with your buttons. Click one, press its number, or Esc to snooze.

  • ~10 MBmemory for the background service
  • No networkeverything runs locally
  • No duplicatesrestarts never repeat a reminder
  • No commandsthe config can only open links

One small YAML file

Daily or weekly, at a time you choose, with the buttons you want. Mistakes are caught with a clear message, and the last working version keeps running.

Every option, explained →

events:
  - id: standup
    title: "Stand-up meeting"
    schedule: { type: weekly, time: "11:00",
                days: [mon, tue, wed, thu, fri] }
    actions:
      - { id: join, label: "Join meeting",
          action: open_url, url: "https://meet.example.com/abc" }
      - { id: snooze, label: "In 5 minutes",
          action: snooze, minutes: 5 }

  - id: lunch
    title: "Lunch break"
    schedule: { type: daily, time: "13:00" }