Changelog History
Page 2
-
v1.4.2 Changes
November 10, 2020โ Add a "visitor counter" image you can add to your website to display the number of visitors, similar to old-style counters back in the โ90s (#398).
๐ Other than this, it's mostly contains a few minor bugfixes and the like. You can see a list of changes in the git log: v1.4.1...v1.4.2
-
v1.4.1 Changes
September 04, 2020๐ A few small updates, fixes, and performance enhancements. Nothing major.
๐ You can see a list of changes in the git log: v1.4.0...v1.4.1
-
v1.4.0 Changes
August 24, 2020Major changes:
๐ Change defaults for
-listen
(#336)0๏ธโฃ The default for the
-listen
flag changed fromlocalhost:8081
to:443
, which is probably a better and less confusing default for most people. There is also some more detailed docs available ingoatcounter help listen
.Set Cache-Control header for static files (#348)
โก๏ธ The
Cache-Control
header is now set for static files. Since the "cache busting" happens based on the goatcounter version it's now recommended to set this if you're compiling GoatCounter yourself. See the updated README for instructions.โ Add multi-factor auth (#306)
๐ TOTP-based multi-factor auth is now supported.
๐ Better export, export API, add import feature (#316, #318, #329)
๐ You can now import the CSV exports, useful for migrating from self-hosted to goatcounter.com or vice versa, or for migrating from other systems. There is a web interface and a
goatcounter import
command.๐ The export now supports a "pagination cursor", so you can export only rows you didn't previously export. This is especially useful with the new export API. which should make it easy to sync GoatCounter data with another external platform.
๐ See http://goatcounter.com/api for details on the export API.
API for sending pageviews (#357)
Doing that with the regular
/count
is actually quite painful, as you quickly run in to ratelimits, need to set specific headers, etc. Adding an API endpoint for that makes things much easier.API for creating and editing additional sites (#361)
Some redesigns (#324, #315, #321 #320)
The "Totals" is now placed below the Pages; I think it makes more sense there. The Y-axis for the totals is now also independent. There's also been a quite a few restylings.
โ Add "text view" mode (#359)
View your data as a simple table without too much graphics; only the main "Pages" overview is implemented for now.
๐ Make it easier to skip your own views (#290)
๐ป Previously this required adding custom code, but now loading any page with
#toggle-goatcounter
added will enable/disable the GoatCounter tracking for that browser.Can now manage "additional sites" from self-hosted GoatCounter (#363)
This wasn't possible before for no other reason than laziness on my part ๐
public/count.js is now ISC licensed (#309)
Previously the EUPL applied, which is fairly restrictive and may prevent people from including/self-hosting the count.js script.
โ Add
goatcounter db
command๐ This is mostly useful for writing deploy scripts:
goatcounter db schema-sqlite
prints the SQLite schema,schema-pgsql
prints the PostgreSQL schema, andgoatcounter db test
tests if the database exists.Session hashes are no longer persisted to the database
This is kind of an internal change, but session hashes are now stored in memory only and never recorded to the database. There's no real reason to persistently store this information, and this is a (small) privacy/GDPR compliance improvement.
-
v1.3.2 Changes
July 17, 2020This is a small fix to set some server http timeouts; this is especially relevant if you run GoatCounter "directly" internet-facing, without using a proxy such as HAPRoxy, Varnish, etc.
โฑ When using GoatCounter directly internet-facing it's liable to keep connections around for far too long, exhausting the max. number of open file descriptors, especially with "idle" HTTP/2 connections which, unlike HTTP/1.1 Keep-Alive don't have an explicit timeout.
0๏ธโฃ This isn't much of a problem if you're using a proxy in front of it, as most will have some timeouts set by default (unlike Go, which has no timeouts at all by default).
โฑ For the backend interface, keeping a long timeout makes sense; it reduces overhead on requests (TLS setup alone can be >200ms), but for the /count request we typically want a much shorter timeout.
๐ง Unfortunately, configuring timeouts per-endpoint isn't really supported at this point, although some possible workarounds are mentioned in 1, it's all pretty ugly. We can add "Connection: close" to just close the connection, which is probably much better for almost all cases than keeping a connection open since most people only visit a single page, and keeping a connection open in the off-chance they click somewhere again probably isn't really worth it.
And setting any timeout is better than setting no timeout at all!
-
v1.3.1 Changes
July 04, 2020๐ Fixes for SQLite concurrency issues
In some busy workloads various SQLite operations would fail due to "locked tables"; most of this is related to the session code:
- ๐ On every pageview a new session is either read (OK) or written (LOCK!)
- ๐ At the same time, the cron may be writing data to the db (LOCK!)
๐ On smaller instances this isn't much of an issue since everything is fast enough to not lock for too long, but on longer instances this can be a problem.
Setting SetMaxOpenConns(1) solves this by limiting the connections writing to the database.
๐ Also set the default journal mode to WAL, which should give better performance. Both of this is done in the zgo.at/zdb update.
โ Add "goatcounter help db" to document database usage a bit better.
-
v1.3.0 Changes
June 01, 2020๐ Note: this release contains quite a few database migrations; they make take a minute to run (depending on your table size), and you may want to run a
VACUUM
afterwards.- โ Remove email auth, replace
-auth
with-email-from
.
As mentioned in the 1.2 release the email authentication is now removed. You can still reset the password for old accounts.
Since the email auth no longer exists the
-auth
parameter no longer makes sense. It's now replaced with-email-from
, which can be set to just an email address.Action required: if you set the email address with
-auth
you'll have to change it to-email-from
.- โ Add OS stats, improve accuracy of browser stats.
GoatCounter now tracks the OS/platform in addition to just the browser, and the accuracy of the browser stats should be improved.
Action required: you'll need to populate the
system_stats
table:$ goatcounter reindex -table system_stats
If you want to process all browser stats with the new logic too, then use this instead:
$ goatcounter reindex -table system_stats,browser_stats
- ๐ Improve performance.
Increase performance by quite a bit on large sites and time ranges.
- โ Remove the per-path scaling.
Previously GoatCounter would scale the Y-axis different for every path in the dashboard, but this was more confusing than helpful. It's now always scaled to the maximum of all paths in the selected date range and filter, with a field to scale it lower on-demand if desired.
- โ Add totals overview.
Add chart with totals for the selected date range and filter.
- โ Add
goatcounter.url()
,goatcounter.filter()
.
Adds two new methods to the
count.js
script so it's easier to use write own implementation. In addition the script will now issue aconsole.warn()
if a request isn't being counted for some reason. - โ Remove email auth, replace
-
v1.2.0 Changes
May 18, 2020โก๏ธ There are a number of changes in 1.2, and a few which require a bit of action when updating. Also see: https://www.arp242.net/goatcounter-1.2.html
Password authentication (#232)
๐ The email-based authentication has been deprecated in favour of password authentication.
Action required Use the interface to set a password (you will get a notification about this). Email authentication still works, but will be removed in the next release, after which updating the password will be tricky.
Unique visit tracking (#212)
GoatCounter now tracks unique visits (without using cookies).
๐ Technical documentation about the implementation is in doc/sessions.markdown.
There are two ways to display the older stats:
Do nothing; meaning that "visits" will be 0 for previous date ranges.
Assign a new 'session' to every hit, so that unique visits will be the same as the number of pageviews.
Doing option 2 is a potentially expensive database operation and not everyone may care so it's not done automatically; instructions for doing this are:
SQLite (do not do this on a running system; as far as I can tell there's no good way to get the next sequence ID while incrementing it):
delete from sessions; update hits set session=id, first_visit=1; update sqlite_sequence set seq = (select max(session) from hits) where name='sessions';
PostgreSQL:
update hits set session=nextval('sessions_id_seq'), first_visit=1;
And then run
goatcounter reindex
.๐ Improve bot detection (#219)
โก๏ธ The bot detection is now improved; this will be applied to older pageviews in the database with a migration, but the cached statistics aren't updated automatically (as it can take a while for larger sites). Use the
reindex
command to fully update older pageviews (this is entirely optional).Track events (#215)
๐ There is now better support to track events; see the updated documentation on the Site Code page for details.
๐ Better support for campaigns (#238)
There is now a "campaign parameters" setting; if the URL matches one of these parameters it will be set as the referrer (overriding the
Referer
header).The default is
utm_campaign, utm_source, ref
.๐ Better export (#221)
The export was a quick feature added in the first version, but didn't scale well to larger sites with a lot of pageviews. This now works well for any number of pageviews.
๐ Many small improvements and bug fixes
๐ฑ It's almost 2 months of work, and there have been many small changes, fixes, and improvements. I didnโt keep track of them all ๐
-
v1.1.2 Changes
March 27, 2020๐ Fix small issue with the domain not showing correct in the site code ๐
-
v1.1.1 Changes
March 27, 2020๐ Small bugfix release which fixes some small issues and improves a few small documentation issues. List of changes: v1.1.0...v1.1.1
The biggest change is that the
saas
command no longer works (and is no longer documented). It was only ever useful for hosting goatcounter.com, and has a number of assumptions and hard-coded values.If you're using
saas
, then you can migrate toserve
by setting a custom domain (sites.cname
) for all the sites. Theserve
command should work after that. -
v1.1.0 Changes
March 18, 2020This list is not comprehensive, and only lists new features and major changes.
Incompatible Improve CLI UX (#154, #173, #175, #181)
The entire CLI has been redone; the original wasn't very user-friendly for
๐ self-hosting. Seegoatcounter help
for the full docs, but in brief:o Use "goatcounter serve" instead of just "goatcounter". o Create new sites with "goatcounter create". o Good support for TLS hosting and ACME certificates (see -tls flag). o Invert -prod to -dev (i.e. just drop -prod for production services, add -dev for development). o -smtp flag is no longer required. o -dbconnect โ -db o -pgsql โ -db postgresql://... o -staticdomain โ no longer needed, but if you really want it you can append to domain: -domain example.com,static.example.com o -emailerrors โ -errors mailto:... o goatcounter -migrate โ goatcounter migrate o goatcounter -migrate auto โ goatcounter serve -automigrate
Action required Show top referrals (#192)
To populate the ref_stats and size_stats tables for older data, update first
and then run:$ goatcounter reindex -confirm -table ref_stats $ goatcounter reindex -confirm -table size_stats
Charts are displayed in local timezone (#155)
โ Add "IgnoreIPs" setting to ignore your own views (#128)
๐ Link to paths by adding a new domain setting (#138)
โ Add configurable data retention (#134)
๐ Allow configuring the thousands separator (#132)
๐ Allow filtering pages in the dashboard (#106)
๐ Improve the integration code (#122)
๐ Allow sending emails without a relay (#184)
โ Add get_query() to count.js to get query parameter (#199)
๐ Allow viewing the charts by day, instead of only by hour (#169)