Query the Canadian Amateur Radio Callsign Database

Usage no npm install needed!

<script type="module">
  import callsigns from '';



This is the code that powers It started with the simple desire for a simple mobile friendly way of searching the Canadian Callsign Database and ended with me developing my own website.


  • mobile friendly design that also works on the desktop and in the terminal
  • bilingual user interface (English and French)
  • no advertisements nor any form of monetization (strictly non-commercial)
  • no login required to access any part of the site
  • no social media buttons to distract you
  • no cookies beyond an ephemeral session cookie for language preference
  • free and open source code


  • systemd
  • iptables
  • nginx
  • openssl
  • mysql
  • wget
  • unzip
  • node.js
  • npm
  • letsencrypt


Grab the source code:

mkdir -p /var/node && cd /var/node
git clone git:// && cd callsigns

Install the dependencies:

npm install

Configure iptables:

iptables-restore < ./etc/iptables/rules.v4
ip6tables-restore < ./etc/iptables/rules.v6
apt-get install iptables-persistent


$EDITOR config.json

Populate the database:


Add a cron job to refresh the database:

crontab -e
15 1   *   *   *   /var/node/callsigns/db/ >/dev/null 2>&1

Configure rsyslog:

sudo -e /etc/rsyslog.conf
local5.*                        /var/log/callsigns.log
sudo service rsyslog restart
logger -p "Test"

Get SSL Certificates:

git clone
cd letsencrypt
./letsencrypt-auto --agree-dev-preview --server \ certonly

Generate DHE Parameters:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Configure nginx:

cp /var/node/callsigns/etc/nginx/sites-available/ /etc/nginx/sites-available/
$EDITOR /etc/nginx/sites-available/
systemctl restart nginx

Configure the service:

cp /var/node/callsigns/etc/systemd/system/callsigns.service /etc/systemd/system/callsigns.service
systemctl enable callsigns
systemctl start callsigns


Once the service is up and running, execute npm test to perform some end-to-end tests.


Code License: see

Data License: see Terms and Conditions on the Industry Canada website.