Skip to content
robvans66 edited this page Jun 23, 2026 · 27 revisions

About Feats

This wiki page provides more in-depth information and how-tos about the application. See the Documentation page in the app for a general introduction.

Installation

Go to the Feats Landing Page to install the app or, the more nerdy way, grab it from the GitHub Releases Page. When updating Feats to a newer version, just follow the installation instructions. Updating the app does not affect the database with your rides and routes.

macOS

The Feats-x.y.z-arm64.dmg file is the macOS installer. This release is signed and verified (notarized) by Apple. Simply double click on it and follow the instructions.

Apple Silicon only — This version requires a Mac with an Apple M-series chip (M1 or later). If your Mac was made before late 2020, it likely has an Intel processor and this download will not run on it.

Not sure which chip you have? Click the menu → About This Mac and look for "Apple M1" (or M2, M3, etc.) under the chip or processor line.

Windows

The Feats.Setup.x.y.z.exe is the Windows installer. This release is not code-signed. Windows may display a SmartScreen or antivirus warning when you download or run it.

When you see "Windows protected your PC" (SmartScreen):

  • Click More info (the small link under the warning message)
  • A Run anyway button will appear — click it
  • The app will launch normally

If Windows blocked the file before you could even run it:

  • Find the downloaded file (usually in your Downloads folder)
  • Right-click it and choose Properties
  • At the bottom of the General tab, look for a message that says "This file came from another computer…"
  • Check the Unblock checkbox next to it
  • Click OK, then run the installer again

Why does this happen?

Windows flags apps that don't have a digital signature (a paid certificate that identifies the publisher). The app isn't necessarily dangerous — it just hasn't been verified by Microsoft's system. You're telling Windows you trust it and want to run it anyway.

Database

The Feats database is stored locally on your computer in an OS-specific User Data Directory. In the status bar of the app you can find the exact location. On macOS this will likely be /Users/<your username>/Library/Application Support/Feats/feats.db. Depending on your system settings, the folder could be hidden and invisible.

On the Manage Data page you can make a backup of the Feats database. The backup file includes 3 tables: rides_table, routes_table and user_config. The file name of the backup is feats-backup-yyyy-mm-dd.sql and is stored in the folder you have chosen when performing a backup (usually Dowwnloads). Note that the backup is currently limited to 10.000 records per table.

If necessary, you can restore a previously created backup using ‘Restore Data’. Feats will check the validity of the selected backup file before replacing your existing tables.

Adding data

An important raison d’être 🤓 of Feats is to give your almost forgotten, hard-to-access data from the past a new life. Importing old data can be cumbersome and time-consuming — editing and counting field separators requires determination. But once you’ve finished importing your previous achievements, it will be easy to add your new rides one at a time.

You can add existing data to Feats by importing a CSV file into one of the tables with the 'Import Data' function on the Manage Data page. The format of the CSV file must exactly match the format of the table you want to add the data to. There are two tables: the rides table and the routes table and therefore the files should be named rides_table.csv or rides_table.csv.

Use a plain text editor like TextEdit (MacOS), Notepad (Windows) or Sublime Text (multi platform) to make changes to your CSV file.

Format of the rides table

The header of the CSV file for importing data into the rides table has the following format:

id;date;description;distance;average;grade;bike;reference;link;notes

The following fields are compulsory and must be filled in:

  • date [TEXT: yyyy-mm-dd]
  • description [TEXT]
  • distance [REAL: dd[d].d]
  • bike [TEXT]

IMPORTANT: Make sure the first column (id) is empty. Feats will add the id's automatically.

Below is a (very simple) example of a CSV file for importing existing rides. It is based on the sample data, generated on first installation of Feats:

id;date;description;distance;average;grade;bike;reference;link;notes
;2026-01-01;Ride 1;77.6;29.0;6.9;Santos;;;
;2025-02-04;Ride 2;77.5;25.9;7.6;Rimonta;;;
;2024-03-07;Ride 3;96.9;28.7;2.6;Santos;;;
;2023-04-10;Ride 4;30.9;29.5;2.6;Rimonta;;;Nice ride
;2026-05-13;Ride 5;58.6;23.8;6.2;Santos;https://example.com/ride/5;Link;
;2025-06-16;Ride 6;59.0;20.2;0.1;Rimonta;;;Nice ride
;2024-07-19;Ride 7;78.0;21.3;11.9;Santos;https://example.com/ride/7;Link;
;2023-08-22;Ride 8;99.9;27.6;2.7;Rimonta;;;
;2026-09-25;Ride 9;60.6;27.0;4.9;Santos;https://example.com/ride/9;Link;
;2025-10-01;Ride 10;84.6;23.8;7.2;Rimonta;;;

Note that every line starts with a semicolon because the id field must be empty.

Format of the routes table

The header of the CSV file for importing data into the routes table has the following format:

id;description;distance;grade;start;destination;surface;reference;link;notes

The following fields are compulsory and must be filled in:

  • description [TEXT]
  • distance [REAL: dd[d].d]
  • start [TEXT]
  • destination [TEXT]
  • surface [TEXT]

IMPORTANT: Make sure the first column (id) is empty. Feats will add the id's automatically.

Below is a (very simple) example of a CSV file for importing existing routes. It is based on the sample data, generated on first installation of Feats:

id;description;distance;grade;start;destination;surface;reference;link;notes
;Route 1;45.4;4.0;Start 1;Destination 1;Road;https://example.com/route/1;Link;
;Route 2;98.8;11.4;Start 2;Destination 2;Gravel;https://example.com/route/2;Link;
;Route 3;42.8;3.8;Start 3;Destination 3;Road/Gravel;;;
;Route 4;83.2;2.6;Start 4;Destination 4;Gravel/MTB;https://example.com/route/4;Link;
;Route 5;118.8;3.8;Start 5;Destination 5;Road;;;
;Route 6;64.2;3.4;Start 6;Destination 6;Gravel;https://example.com/route/6;Link;Scenic
;Route 7;129.0;5.4;Start 7;Destination 7;Road/Gravel;;;Scenic
;Route 8;24.4;5.2;Start 8;Destination 8;Gravel/MTB;https://example.com/route/8;Link;Scenic
;Route 9;123.1;5.5;Start 9;Destination 9;Road;https://example.com/route/9;Link;
;Route 10;46.6;5.5;Start 10;Destination 10;Gravel;;;
;Route 11;104.1;3.6;Start 11;Destination 11;Road/Gravel;https://example.com/route/11;Link;
;Route 12;90.7;9.3;Start 12;Destination 12;Gravel/MTB;https://example.com/route/12;Link;
;Route 13;60.3;7.6;Start 13;Destination 13;Road;https://example.com/route/13;Link;
;Route 14;119.7;2.5;Start 14;Destination 14;Gravel;;;Scenic
;Route 15;20.4;9.5;Start 15;Destination 15;Road/Gravel;https://example.com/route/15;Link;Scenic
;Route 16;91.1;8.5;Start 16;Destination 16;Gravel/MTB;https://example.com/route/16;Link;
;Route 17;110.8;3.1;Start 17;Destination 17;Road;;;
;Route 18;59.4;8.1;Start 18;Destination 18;Gravel;https://example.com/route/18;Link;
;Route 19;36.7;5.8;Start 19;Destination 19;Road/Gravel;;;Scenic
;Route 20;78.6;11.9;Start 20;Destination 20;Gravel/MTB;https://example.com/route/20;Link;

Bonus: adding a lot of sample data to play with

When you start the application for the first time, it will create a new database and populate it with sample data — about 20 rides and 20 routes. Feats becomes much more interesting once you’ve collected more data, especially on the statistics pages. If you want more data to play with you can download the file '1000_sample_rides.csv' form the ./sample-data folder of the repository and add them to your database on the Manage Data page in the app. Make sure you change the filename to 'rides_table.csv', otherwise Feats will not accept the file as a valid import.

Feats For Fun

The name "Feats" is a play on words, as it can refer to both "feats" as in achievements (completing rides), and "fiets" which is the Dutch word for bicycle, pronounced similarly.