Skip to content
Tags give the ability to mark specific points in history as being important
  • 0.1
  • 0.10
    0.10 (2018-04-23)
    -----------------
    
    Features:
    
    - Can now import files in-place from the CLI importer (#155)
    
    Enhancements:
    
    - Avoid downloading audio files multiple times from remote libraries (#163)
    - Better file import performance and error handling (#144)
    - Import job and batch API and front-end have been improved with better
      performance, pagination and additional filters (#171)
    - Increased max_length on TrackFile.source, this will help when importing files
      with a really long path (#142)
    - Player is back in Queue tab (#150)
    
    Bugfixes:
    
    - Fail graciously when AP representation includes a null_value for mediaType
    - Fix sidebar tabs not showing under small resolution under Chrome (#173)
    - Fixed broken login due to badly configured Axios (#172)
    - Fixed broken playlist modal after login (#155)
    - Fixed queue reorder or track deletion restarting currently playing track
      (#151)
    - Radio will now append new track if you delete the last track in queue (#145)
    - Reset all sensitive front-end data on logout (#124)
    - Typos/not showing text due to i18n work (#175)
    
    Documentation:
    
    - Better documentation for hardware requirements and memory usage (#165)
    
    In-place import
    ^^^^^^^^^^^^^^^
    
    This release includes in-place imports for the CLI import. This means you can
    load gigabytes of music into funkwhale without worrying about about Funkwhale
    copying those music files in its internal storage and eating your disk space.
    
    `This new feature is documented here <https://docs.funkwhale.audio/importing-music.html#in-place-import>`_
    and require additional configuration to ensure funkwhale and your webserver can
    serve those files properly.
    
    **Non-docker users:**
    
    Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following
    block to your nginx configuration::
    
        location /_protected/music {
            internal;
            alias   /srv/funkwhale/data/music;
        }
    
    And the following to your .env file::
    
        MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music
    
    **Docker users:**
    
    Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following
    block to your nginx configuration::
    
        location /_protected/music {
            internal;
            alias   /srv/funkwhale/data/music;
        }
    
    Assuming you have the following volume directive in your ``docker-compose.yml``
    (it's the default): ``/srv/funkwhale/data/music:/music:ro``, then add
    the following to your .env file::
    
        # this is the path in the container
        MUSIC_DIRECTORY_PATH=/music
        # this is the path on the host
        MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music
  • 0.11
    0.11 (unreleased)
    -----------------
    
    Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html
    
    Special thanks for this release go to @renon:matrix.org (@Hazmo on Gitlab)
    for bringing Apache2 support to Funkwhale and contributing on other issues.
    Thank you!
    
    Features:
    
    - Funkwhale now works behind an Apache2 reverse proxy (!165)
      check out the brand new documentation at https://docs.funkwhale.audio/installation/index.html#apache2
      if you want to try it!
    - Users can now request password reset by email, assuming a SMTP server was
      correctly configured (#187)
    
    Enhancements:
    
    - Added a fix_track_files command to run checks and fixes against library
      (#183)
    - Avoid fetching Actor object on every request authentication
    - Can now relaunch errored jobs and batches (#176)
    - List pending requests by default, added a status filter for requests (#109)
    - More structured menus in sidebar, added labels with notifications
    - Sample virtual-host file for Apache2 reverse-proxy (!165)
    - Store high-level settings (such as federation or auth-related ones) in
      database (#186)
    
    Bugfixes:
    
    - Ensure in place imported files get a proper mimetype (#183)
    - Federation cache suppression is now simpler and also deletes orphaned files
      (#189)
    - Fixed small UI glitches/bugs in federation tabs (#184)
    - X-sendfile not working with in place import (#182)
    
    Documentation:
    
    - Added a documentation area for third-party projects (#180)
    - Added documentation for optimizing Funkwhale and reduce its memory footprint.
    - Document that the database should use an utf-8 encoding (#185)
    - Foundations for API documentation with Swagger (#178)
    
    Database storage for high-level settings
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    Due to the work done in #186, the following environment variables have been
    deprecated:
    
    - FEDERATION_ENABLED
    - FEDERATION_COLLECTION_PAGE_SIZE
    - FEDERATION_MUSIC_NEEDS_APPROVAL
    - FEDERATION_ACTOR_FETCH_DELAY
    - PLAYLISTS_MAX_TRACKS
    - API_AUTHENTICATION_REQUIRED
    
    Configuration for this settings has been moved to database, as it will provide
    a better user-experience, by allowing you to edit these values on-the-fly,
    without restarting Funkwhale processes.
    
    You can leave those environment variables in your .env file for now, as the
    values will be used to populate the database entries. We'll make a proper
    announcement when the variables won't be used anymore.
    
    Please browse https://docs.funkwhale.audio/configuration.html#instance-settings
    for more information about instance configuration using the web interface.
    
    System emails
    ^^^^^^^^^^^^^
    
    Starting from this release, Funkwhale will send two types
    of emails:
    
    - Email confirmation emails, to ensure a user's email is valid
    - Password reset emails, enabling user to reset their password without an admin's intervention
    
    Email sending is disabled by default, as it requires additional configuration.
    In this mode, emails are simply outputed on stdout.
    
    If you want to actually send those emails to your users, you should edit your
    .env file and tweak the EMAIL_CONFIG variable. See :ref:`setting-EMAIL_CONFIG`
    for more details.
    
    .. note::
    
      As a result of these changes, the DJANGO_EMAIL_BACKEND variable,
      which was not documented, has no effect anymore. You can safely remove it from
      your .env file if it is set.
    
    Proxy headers for non-docker deployments
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    For non-docker deployments, add ``--proxy-headers`` at the end of the ``daphne``
    command in :file:`/etc/systemd/system/funkwhale-server.service`.
    
    This will ensure the application receive the correct IP address from the client
    and not the proxy's one.
  • 0.12
    0.12 (2018-05-09)
    -----------------
    
    Upgrade instructions are available at
      https://docs.funkwhale.audio/upgrading.html
    
    Features:
    
    - Subsonic API implementation to offer compatibility with existing clients such
      as DSub (#75)
    - Use nodeinfo standard for publishing instance information (#192)
    
    Enhancements:
    
    - Play button now play tracks immediately instead of appending them to the
      queue (#99, #156)
    
    Bugfixes:
    
    - Fix broken federated import (#193)
    
    Documentation:
    
    - Up-to-date documentation for upgrading front-end files on docker setup (#132)
    
    Subsonic API
    ^^^^^^^^^^^^
    
    This release implements some core parts of the Subsonic API, which is widely
    deployed in various projects and supported by numerous clients.
    
    By offering this API in Funkwhale, we make it possible to access the instance
    library and listen to the music without from existing Subsonic clients, and
    without developping our own alternative clients for each and every platform.
    
    Most advanced Subsonic clients support offline caching of music files,
    playlist management and search, which makes them well-suited for nomadic use.
    
    Please head over :doc:`users/apps` for more informations about supported clients
    and user instructions.
    
    At the instance-level, the Subsonic API is enabled by default, but require
    and additional endpoint to be added in you reverse-proxy configuration.
    
    On nginx, add the following block::
    
        location /rest/ {
            include /etc/nginx/funkwhale_proxy.conf;
            proxy_pass   http://funkwhale-api/api/subsonic/rest/;
        }
    
    On Apache, add the following block::
    
        <Location "/rest">
            ProxyPass ${funkwhale-api}/api/subsonic/rest
            ProxyPassReverse ${funkwhale-api}/api/subsonic/rest
        </Location>
    
    The Subsonic can be disabled at the instance level from the django admin.
    
    .. note::
    
        Because of Subsonic's API design which assumes cleartext storing of
        user passwords, we chose to have a dedicated, separate password
        for that purpose. Users can generate this password from their
        settings page in the web client.
    
    Nodeinfo standard for instance information and stats
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    .. warning::
    
        The ``/api/v1/instance/stats/`` endpoint which was used to display
        instance data in the about page is removed in favor of the new
        ``/api/v1/instance/nodeinfo/2.0/`` endpoint.
    
    In earlier version, we where using a custom endpoint and format for
    our instance information and statistics. While this was working,
    this was not compatible with anything else on the fediverse.
    
    We now offer a nodeinfo 2.0 endpoint which provides, in a single place,
    all the instance information such as library and user activity statistics,
    public instance settings (description, registration and federation status, etc.).
    
    We offer two settings to manage nodeinfo in your Funkwhale instance:
    
    1. One setting to completely disable nodeinfo, but this is not recommended
       as the exposed data may be needed to make some parts of the front-end
       work (especially the about page).
    2. One setting to disable only usage and library statistics in the nodeinfo
       endpoint. This is useful if you want the nodeinfo endpoint to work,
       but don't feel comfortable sharing aggregated statistics about your library
       and user activity.
    
    To make your instance fully compatible with the nodeinfo protocol, you need to
    to edit your nginx configuration file:
    
    .. code-block::
    
        # before
        ...
        location /.well-known/webfinger {
            include /etc/nginx/funkwhale_proxy.conf;
            proxy_pass   http://funkwhale-api/.well-known/webfinger;
        }
        ...
    
        # after
        ...
        location /.well-known/ {
            include /etc/nginx/funkwhale_proxy.conf;
            proxy_pass   http://funkwhale-api/.well-known/;
        }
        ...
    
    You can do the same if you use apache:
    
    .. code-block::
    
        # before
        ...
        <Location "/.well-known/webfinger">
          ProxyPass ${funkwhale-api}/.well-known/webfinger
          ProxyPassReverse ${funkwhale-api}/.well-known/webfinger
        </Location>
        ...
    
        # after
        ...
        <Location "/.well-known/">
          ProxyPass ${funkwhale-api}/.well-known/
          ProxyPassReverse ${funkwhale-api}/.well-known/
        </Location>
        ...
    
    This will ensure all well-known endpoints are proxied to funkwhale, and
    not just webfinger one.
    
    Links:
    
    - About nodeinfo: https://github.com/jhass/nodeinfo
  • 0.2
    0.2
    -------
    
    2017-07-09
    
    * [feature] can now import artist and releases from youtube and musicbrainz.
      This requires a YouTube API key for the search
    * [breaking] we now check for user permission before serving audio files, which requires
    a specific configuration block in your reverse proxy configuration:
  • 0.2.1
    0.2.1
    -----
    
    2017-07-17
    
    * Now return media files with absolute URL
    * Now display CLI instructions to download a set of tracks
    * Fixed #33: sort by track position in album in API by default, also reuse that information on frontend side
    * More robust audio player and queue in various situations:
    * upgrade to latest dynamic_preferences and use redis as cache even locally
  • 0.2.2
    shortcuts
  • 0.2.3
    - lazyloading images
    - artist browsing
    - better pagination
    - fixed multiple warnings
  • 0.2.4
    Features:
    
    - Models: now store relese group mbid on Album model (#7)
    - Models: now bind import job to track files (#44)
    
    Bugfixes:
    
    - Library: fixen broken "play all albums" button on artist cards in Artist browsing view (#43)
  • 0.2.5
    0.2.5 (2017-12-15)
    ------------------
    
    Features:
    
    - Import: can now specify search template when querying import sources (#45)
    - Login form: now redirect to previous page after login (#2)
    - 404: a decent 404 template, at least (#48)
    
    Bugfixes:
    
    - Player: better handling of errors when fetching the audio file (#46)
    - Csrf: default CSRF_TRUSTED_ORIGINS to ALLOWED_HOSTS to avoid Csrf issues on admin (#49)
    
    Tech:
    
    - Django 2 compatibility, lot of packages upgrades (#47)
  • 0.2.6
    0.2.6 (2017-12-15)
    ------------------
    
    - Fixed broken Dockerfile
  • 0.3
    0.2.7 (Unreleased)
    ------------------
    
    - Shortcuts: can now use the ``f`` shortcut to toggle the currently playing track
      as a favorite (#53)
    - Shortcuts: avoid collisions between shortcuts by using the exact modifier (#53)
    - Player: Added looping controls and shortcuts (#52)
    - Player: Added shuffling controls and shortcuts (#52)
    - Favorites: can now modify the ordering of track list (#50)
    - Library: can now search/reorder results on artist browsing view (#50)
    - Upgraded celery to 4.1, added endpoint logic for fingerprinting audio files
    - Fixed #56: invalidate tokens on password change, also added change password form
    - Fixed #57: now refresh jwt token on page refresh
    - removed ugly dividers in batch import list
    - Fixed a few padding issues
    - Now persist/restore queue/radio/player state automatically
    - Removed old broken imports
    - Now force tests paths
    - Fixed #54: Now use pytest everywhere \o/
    - Now use vuex to manage state for favorites
    - Now use vuex to manage state for authentication
    - Now use vuex to manage state for player/queue/radios
  • 0.3.1
    0.3.1
    ------------------
    
    - Revamped all import logic, everything is more tested and consistend
    - Can now use Acoustid in file imports to automatically grab metadata from musicbrainz
    - Brand new file import wizard
  • 0.3.2
    0.3.2
    ------------------
    
    - Fixed an issue in the main dockerfile
  • 0.3.3
    0.3.4 (2018-01-07)
    ------------------
    
    - Users can now create their own dynamic radios (#51)
  • 0.3.4
    0.3.4 (2018-01-07)
    ------------------
    
    - Fixed wrong URL construction in ajax call
  • 0.3.5
    0.3.5 (2018-01-07)
    ------------------
    
    - Smarter BACKEND_URL in frontend
  • 0.4
    0.4 (2018-02-18)
    ----------------
    
    - Front: ambiant colors in player based on current track cover (#59)
    - Front: simplified front dev setup thanks to webpack proxy (#59)
    - Front: added some unittests for the store (#55)
    - Front: fixed broken login redirection when 401
    - Front: Removed autoplay on page reload
    - API: Added a /instance/settings endpoint
    - Front: load /instance/settings on page load
    - Added settings to report JS and Python error to a Sentry instance
      This is disabled by default, but feel free to enable it if you want
      to help us by sending your error reports :) (#8)
  • 0.5
    0.5 (2018-02-24)
    ----------------
    
    - Front: Now reset player colors when track has no cover (#46)
    - Front: play button now disabled for unplayable tracks
    - API: You can now enable or disable registration on the fly, via a preference (#58)
    - Front: can now signup via the web interface (#35)
    - Front: Fixed broken redirection on login
    - Front: Fixed broken error handling on settings and login form
    
    About page:
    
    There is a brand new about page on instances (/about), and instance
    owner can now provide a name, a short and a long description for their instance via the admin (/api/admin/dynamic_preferences/globalpreferencemodel/).
    
    Transcoding:
    
    Basic transcoding is now available to/from the following formats : ogg and mp3.
    
    *This is still an alpha feature at the moment, please report any bug.*
    
    This relies internally on FFMPEG and can put some load on your server.
    It's definitely recommended you setup some caching for the transcoded files
    at your webserver level. Check the the exemple nginx file at deploy/nginx.conf
    for an implementation.
    
    On the frontend, usage of transcoding should be transparent in the player.
    
    Music Requests:
    
    This release includes a new feature, music requests, which allows users
    to request music they'd like to see imported.
    Admins can browse those requests and mark them as completed when
    an import is made.
  • 0.5.1
    0.5.1 (2018-02-24)
    ------------------
    
    - Front: Fixed broken ajax call on radio builder (#69)
    - Front: Shuffle now restart next track from beginning (#70)
    - Front: volume slider should now have the same style everywhere (#72)