This project's release branch is master
. This log is written from the perspective of the release branch: when changes hit master
, they are considered released.
-
(#674, #711) Introduce a new thunk format to support accessing the thunk's source directly when packed. When packed, thunks have an additional file called
thunk.nix
anddefault.nix
is now a think wrapper around that. -
(#665) Add
--interpret
and--no-interpret
options toob run
/ob watch
/ob repl
/ob shell
. These options allow you to pick which paths will be pre-compiled bynix
when entering the shell/session and which won't. For exampleob run --no-interpret dep
will ensure that any dependencies found in./dep
will be built bynix
before loading the rest of the project into theghci
session. The same configuration forob shell
will ensure that those packages are built and available in theghc
package database inside the shell.NOTE:
ob shell
's default behavior is now different. By default it now behaves likeob run
/ob watch
/ob repl
in that it does not pre-build any packages whose.cabal
orpackage.yaml
files are found in the project. To regain the previous behavior, useob shell --no-interpret . --interpret backend --interpret common --interpret frontend
from the project root. -
(#695)
ob deploy init
now requires that your obelisk project be a cleangit
checkout with pushed changes. It has always required that your obelisk project be agit
repository, but it did not require that your local changes be committed and pushed. This new requirement is added to ensure users don't accidentally create a deployment pointing to an old version of the project. -
(#705) Add
Obelisk.Route.packTextEncoder
and generalizeObelisk.Route.unpackTextEncoder
over anyData.Text.Lens.IsText
. -
(#712) Update
reflex-platform
to version 0.5.3.0. -
(#700) Ensure
ob init
uses the thunk format of the target obelisk rather than the one currently running the init command. If a user had installed a version of obelisk with a new thunk format, a newly initialized skeleton of an older version would not be able to unpack it's own.obelisk/impl
. -
(#693) Fix a bug where some packages in
.attr-cache
directories would be incorrectly picked up and used instead of the correct ones when usingob run
/ob watch
/ob repl
. -
(#709) Fix a bug in obelisk's preprocessor causing it to incorrectly skip files in some circumstances.
-
(#663) Add experimental support for
ghcide
. See the README for more information. -
(#714) Miscellaneous improvements to CLI help and logging.
- Fix the version number for
ob
the command-line tool. (#679)
- Fully support HTTP Range requests on static assets to support Safari. (#664)
- Support non-EC2 deployments. (#658)
- Fix
ob deploy test android
to work. (#645) - Fix vulnerability where Android deployments would leave signing keys in the nix store which is world readable. (#645) (Thanks to kmicklas for the report.)
- Add
Obelisk.Backend.runBackendWith
to allow several customizations. (#668, #644) - Add
ob profile
command to run Obelisk projects with profiling.ob profile
works likeob run
, but instead of usingghci
, it builds an executable that is built with profiling enabled. (#654) - Obelisk's
default.nix
now exposesmkAssets
function which is used to construct the assets served by an Obelisk application. (#651) - Bump reflex-platform to v0.5.2.0. (#671)
-
Fix a bug in
Obelisk.Route.Frontend
whererouteLink
,routeLinkDynAttr
, anddynRouteLink
would not behave exactly like<a href="...">
when run by JavaScript. These functions now scroll to the top of the page when the link is clicked. (#540) -
Fix a bug in
ob run
/ob watch
/ob repl
where nested Obelisk projects would also be loaded into the session. These are now ignored. (#652) -
Improve behavior of
ob run
/ob watch
/ob repl
when multiple packages with the same name are encountered. Obelisk now issues a warning and tells you which one it will use. (#653) -
Removed
Obelisk.Backend.mkRouteToUrl
since it is easily written in terms ofObelisk.Route.renderObeliskRoute
:mkRouteToUrl validFullEncoder (k :/ v) = renderObeliskRoute validFullEncoder (FullRoute_Frontend (ObeliskRoute_App k) :/ v)
-
Add
Obelisk.Backend.renderAllJsPath
to expose URL path toghcjs/all.js
. (#545) -
Add argument to
serveDefaultObeliskApp
,serveObeliskApp
, andserveGhcjsApp
to take the path toall.js
instead of hard-coding it. (#545)
- Add
Obelisk.Route.(?/)
, a convenience function for constructing routes nested inMaybe
. (#457) - Add local unpacked packages to the
ob run
,ob watch
, andob repl
sessions. Any.cabal
or hpack package inside the current obelisk project will be loaded into the session. Forob run
/ob watch
this means the session will automatically reload when you save a source file in any of those packages. Forob repl
it means that:r
will reload changes to any of those packages. There are some edge cases where this integration is still rough. Report any issues you encounter. (#489) - Add
ob hoogle
command to start a local Hoogle server for the project. (#628) ob thunk pack
will now attempt to automatically detect if the thunk is a private or public repo. To avoid this detection, specify--private
or--public
manually. (#607)- Fix a bug in the plain git thunk loader for thunks marked as 'private' when the revision is not in the default branch. (#648)
- Improve handling of runtime nix dependencies. This may fix some issues encountered particularly by users on systems other than NixOS.
- Bump reflex-platform which, notably, bumps nixpkgs to 19.09. (#585)
- Add new thunk loader for Git repositories that supports
file://
Git remotes and supports private repositories viabuiltins.fetchGit
for private repositories (when thegit.json
file specifies"private": true
). (#594) - Add a new thunk loader for GitHub repositories that uses
builtins.fetchTarball
for public repositories to increase loader performance and usesfetchFromGitHub
for private repositories (when thegithub.json
file specifies"private": true
). Note thatfetchFromGitHub
requires some Nix configuration for the Nix builder to access the repository. Ifob thunk pack
fails in this case, use-v
to see Nix's helpful message. (#594) - Add
--public
/--private
options toob thunk pack
to specify if a repository should be treated as a public or private. (#594) - Improve error messaging when a dependency doesn't have the expected
.cabal
orpackage.yaml
file. (#597) - Improve the skeleton in small ways. (#593, #589)
- Fix
ob
commands to again support running from any subdirectory of an obelisk project (#591) - Add
reflex-platform-func
argument to Obelisk'sdefault.nix
. It defaults to it's prior behavior of using the reflex-platform in indep
. (#612)
- Change the structure of Obelisk routes to use a designated
FullRoute
type. This combines frontend and backend routes into one structure. This is a breaking change which requires Obelisk apps to take specific migrations. They are:- Rewrite the implementation of
_backend_routeEncoder
inBackend
to usemkFullRouteEncoder
instead ofhandleEncoder
. Specifically, the backend and frontend cases of the top-levelpathComponentEncoder
become the second and third arguments ofmkFullRouteEncoder
respectively, while the missing route becomes the first argument. An example of how to do this is available in a reflex-examples commit. - Replace type constructions of
InL
withFullRoute_Backend
andInR
withFullRoute_Frontend
.
- Rewrite the implementation of
- Generalised
pathSegmentEncoder
, addedpathFieldEncoder
. - Added some
Prism
s to the encoder library for manipulatingDSum
s. - Add
ob doc
command, which lists paths to haddock documentation for specified packages. - Bump reflex-platform so that obelisk now uses GHC 8.6.5 and the nixos-19.03 nixpkgs set.
- Add support in
obelisk-route
for single parameters in URL paths. - Bump reflex-platform so that obelisk now uses reflex-dom 0.5.2.0.
- Use a
--pure
nix shell inob run
for parity withob repl
and more resilience against "works on my machine". - Pin usages of
<nixpkgs>
in obelisk thunks, etc. to the nixpkgs used by the project's obelisk impl. - Backport ACMEv2 support in obelisk server to regain LetsEncrypt account creation.
- Enable HTTPS in
ob run
. ob run
now handlesghci
errors better, and includes a customghcid
version. As a result, you no longer need to have ghcid installed to useob run
, as we provide one for you.ob
commands now complain less on systems with umasks other than0022
.- Ignore package environment files in
ob run
andob repl
. - Add
Obelisk.Route.Frontend.routeLinkDynAttr
.
- Configs become ByteStrings.
- FrontendConfigsT has been changed into ConfigsT and configs are made available via getConfig/getConfigs
- The frontend will still only have access to configs that are placed in config/frontend and config/common, while the backend has access to the entire contents of the config directory via
Obelisk.ExecutableConfig.Lookup.getConfigs
.
- The frontend will still only have access to configs that are placed in config/frontend and config/common, while the backend has access to the entire contents of the config directory via
- The backend no longer runs in BackendConfigsT.
- Add tabulation package. See Data.Tabulation for details.
- Add encoders for
DMap
,HasFields
(cf. Data.Tabulation), and JSON. - Use IP address for nginx proxy pass instead of localhost
- Fix crashes of Android apps on 32-bit ARM devices.
- Provide a way to indicate acceptance of the Android SDK license by passing
config.android_sdk.accept_license = true;
in the arguments to the import of.obelisk/impl
in the project'sdefault.nix
. - Add
COMPLETE
pragma to(:/)
. Using this pattern synonym should no longer generate spurious warnings about non-exhaustive pattern matching. - Make asset path hashing strict (see
Obelisk.Asset.Gather
) - Add the
ob shell
command to enter a nix shell for an obelisk project - Allow skeleton's obelisk to be overridden. This changes the skeleton's default.nix interface: the arguments that it used to take are now part of the new "obelisk" argument.
- Removed
MonadIO
fromObeliskWidget
to prevent accidental IO during prerendering. If you need to do IO in a widget it should be on the right hand side of aprerender
. - Significantly changed the interface to the "executable config" packages.
obelisk-executable-config-lookup
is a new internal package which looks up all configs in a platform-specific way.obelisk-executable-frontend
andobelisk-executable-backend
provide MTL-style monad classes (HasFrontendConfigs
andHasBackendConfigs
) which the frontend and backend, respectively, can use to look up configs. This replaces the oldget
function which ran inIO
. - Add a flag to force thunk packing even if there are unpushed changes in the unpacked thunk.
- Use reflex-dom's
HydrationDomBuilder
to "hydrate" statically rendered DOM served by the Obelisk backend (rather than re-creating DOM and replacing it all). - Add
HasCookies
andCookiesT
to allowObeliskWidget
s to access cookies during static and "hydrated" DOM rendering.