Skip to main content

Not1MM

logo

The worlds #1 unfinished contest logger *According to my daughter Corinna.

PyPI License: GPL v3 Python: 3.11+ Made With:PyQt6 Code Maturity:Snot Nosed PyPI Downloads PyPI Downloads

main screen

The Elephant in the Room

Not1MM's interface is a blatant ripoff of N1MM. It is NOT N1MM and any problem you have with this software should in no way reflect on their software.

Not1MM is NOT ment for interoperability with N1MM+

I wake up, take my first sip of coffee and am greeted by a lovely heartfelt message from Tom Wagner. So I feel something may need to be clarified. Not1MM is... NOT N1MM neither is it N1MM+ or even N1MMPlus. They're not ment to work with each other. It does send N1MM packets, but that's for nodered scoreboards, not Tom's beloved program.

You shouldn't bother Tom or his Team. They be cranky...

The What

Not1MM is, in my opinion, a usable amateur radio, or HAM, contest logger. It's written in Python 3.11+, and uses Qt6 framework for the graphical interface and SQLite for the database.

Target Environment

The primary target for this application is Linux. It may be able to run on other platforms, BSD and Windows. But I don't have a way, or desire, to directly support them.

I've recently purchased an M4 Mac Mini, So I can confirm it works well on the MacOS platform.

The Why

Currently this exists for my own personal amusement. I've recently retired after 35+ years working for 'The Phone Company', GTE -> Verizon -> Frontier. And being a Gentleman of Leisure, needed something to do in my free time. I'm a casual contester and could not find any contesting software for Linux that I wanted to use. There is Tucnak which is very robust and mature. It just wasn't for me.

Code Maturity & Current Multi Multi Development Focus

Not1MM is, at times, fairly stable. Recently, it would seem that I'm desperately trying to change that. The current focus of development is adding support for Multi Multi contest operations. It is something that I have no practical experience in. So you can expect the same quality of code fit and finish.

Our Code Contributors ✨

I wish to thank those who've contributed to the project. Below is an automatically generated, 'cause I'm lazy, list of those who've submitted PR's.

Avatar icons for code contributors.

Recent Changes

  • [2026-08-06] Merge pull request #645 from df7cb/band
  • [2026-08-05] Consolidate band/frequency conversion into a single source-of-truth table
  • [2026-08-04] Remove some dead variables
  • [2026-08-05] Merge pull request #644 from df7cb/spotdx
    • Move SPOTDX to clusterwindow.py
  • [2026-08-04] @mbridak add 3hr band/mode dupe check to rd contest.
  • [2026-08-03] @mbridak RD-Contest Update cabrillo function: enhance mode handling and format output ...
    • Merge pull request #641 from mbridak/rd-contest
    • @mbridak Update WIA Remembrance plugin: enhance scoring logic and clarify exchange instructions
    • Merge pull request #640 from df7cb/clusterwindow
  • [2026-07-28] Create a Cluster window
  • [2026-08-02] @mbridak Maybe Fix: update TCI sendcw method to use cw_macros command for CW transmission
    • @mbridak Fix: maybe Add: send cw_macros_stop command in stopcw method
    • @mbridak Fix: self assigned variable in rsgb-iota
    • Merge pull request #639 from df7cb/euhfc
    • Fix more Cabrillo names and enable online scores
    • Online scoring for EUHFC
  • [2026-08-01] Merge pull request #638 from sblanchard/add-tci-support
    • docs: record cw_msg signature confirmed working on live AetherSDR
    • docs: note TCI rig control support in changelog
    • Wire TCI into vfo.py, fix online staleness, add missing send_cat_string stub
    • test: add fake TCI server for integration testing
    • Correct stale RTTY mode expectation in plan Task 4 test
    • feat: wire TCI backend into radio dispatch, settings, and UI
    • feat: add TciCAT backend implementing the CAT contract over TCI
    • fix: release socket/timer on their own thread after close(), fix backoff double-increm...
    • feat: add TCI websocket client with state cache
    • feat: add TCI protocol parsing and mode translation
    • docs: fix TCI handshake doc overclaim, wrong comment, and stat rounding
    • Add TCI probe and record live AetherSDR handshake
    • Ignore .superpowers scratch directory
    • Correct TCI port to 50001 to match the AetherSDR under test
    • Add implementation plan for TCI CAT backend (phase 1)
    • Add design spec for TCI support (AetherSDR compatibility)

See CHANGELOG.md for prior changes.

Installation

TL;DR

Prerequisites

Not1MM requires:

  • PyQt6
  • libportaudio2
  • libxcb-cursor0 (maybe... Depends on the distro)

One liner install

curl -LsSf uvx.sh/not1mm/install.sh | sh

For more in depth info, please see the installation section.

Documentation

I've nuked 90% of the README.md and moved it to a LaTeX file. So now you can get the user manual as a PDF file. I know some WILL NOT LIKE THIS. Sorry, not sorry.

Features

A quick feature list, See the user manual for more details.

  • 45+ supported contests
  • Lookup, QRZ and HamQTH
  • CAT Control, rigctld and flrig
  • CW Keyer Interface, winkeyer and cwdaemon
  • Cluster and Bandmap
  • Rotator control, rotctld
  • Multi Multi (The super sketchy not ready for prime time)
  • N1MM Packet output for nodered
  • WSJT-X FT8/FT4/ETC and FLDIGI RTTY
  • ADIF and Cabrillo output.
  • And Other Stuff

Known Issues

  • Hamlib before 4.6.3 had a problem with sending CW and changing/reading the keying speed.
  • wfview before version 2.2 has issues with frequency reporting and CW sending.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

not1mm-26.8.6.tar.gz (3.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

not1mm-26.8.6-py3-none-any.whl (3.8 MB view details)

Uploaded Python 3

File details

Details for the file not1mm-26.8.6.tar.gz.

File metadata

  • Download URL: not1mm-26.8.6.tar.gz
  • Upload date:
  • Size: 3.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for not1mm-26.8.6.tar.gz
Algorithm Hash digest
SHA256 6b210c95d887fe04cf5143519246f89107b8b89a95dd9dc935235963f127549d
MD5 8c025672b655c63a8ed32bea1e22c15a
BLAKE2b-256 dce3cc4bf98065fe9d695d141aff31d757225393175718d0b082140254be1bca

See more details on using hashes here.

File details

Details for the file not1mm-26.8.6-py3-none-any.whl.

File metadata

  • Download URL: not1mm-26.8.6-py3-none-any.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for not1mm-26.8.6-py3-none-any.whl
Algorithm Hash digest
SHA256 5b6425af916f44fecceb50f447bf3b6def022b65635a7e8bf9435e8074ffda7d
MD5 8b9e1b08e9d79b11e936033fe98dfbe1
BLAKE2b-256 e2b211042214746c4050a0f312cbfe7f622e8cb0f2e50b2ed80ee1d4b53a976a

See more details on using hashes here.

Release history Release notifications | RSS feed

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page