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.
- #1047: Update default ios sdk to 15
- #1048: Expose ghcIosAarch64 to projects
- #1046: Add support for aarch64-darwin and aarch64-linux (see supported platforms).
- #1025: Add
-c/--configoption toob repl - #1035: During deployment, chown configs after copying them to the server
- #1040: Batch hashing of static assets
- Update reflex-platform to 1.1.2.0
- Update reflex-platform to 1.1.0.0
- Update reflex-platform to version 1.0.1.0 with GHC 8.10 and updated nixpkgs
- Make GHC 8.10 the default. To continue using GHC 8.6.5, set the
__useNewerCompilerflag in default.nix tofalse.
- Make GHC 8.10 the default. To continue using GHC 8.6.5, set the
- Documentation
- building
- #1004: Fix closure compiler sometimes crashing. Similar to #956, but for when it tries to report errors. (see: closure-compiler#3720)
- #956: Squelch closure-compiler warnings. They are not very helpful and can cause issues (see: closure-compiler#3720)
- nix
- CLI
- #784: Hint for users to take advantage of
ob shell --no-interpretoption for thunks - #870: Host redirection added to
ob deploy. Readme updated with tutorial for new functionality. - #916: Add
check-known-hostsoption inob deploy init. - #931: Fix bug in
ob deploy initwheressh-keygenwas not found in nix store. - #934, #936: obelisk now always uses absolute paths when generating
.ghcifiles for REPL and IDE support. This is a BREAKING change for some old tools that could not handle absolute paths properly. However, due to the behavior of cross-volume relative paths on certain platforms, such as modern MacOS, we cannot guarantee proper operation of obelisk with relative paths. - #948: Obelisk now always invokes
bashinstead of the system-wide shell when it can. Some sub-programs, likeghcid, will still use the system-wide shell, which can cause subtle problems due to impurities. - #949: Obelisk now configures its output and error streams to transliterate unsupported characters to a known-good replacement character.
- #951: Add
ob run --portwhich allows the user to override the port on which the app is served, rather than always using the port configured in the route. This is compatible with the use of reverse proxies that do their own TLS termination, e.g.ngrok. - #974: Fail
ob runwhen invalid fields are present indefault-extensions/default-language, or when Cabal files are otherwise invalid.
- #784: Hint for users to take advantage of
- obelisk-route
- #915: Add
routeLinkAttrtoObelisk.Route.Frontend. This allows the creation of route links with additional, user-specified DOM attributes. - #918: Add GHC 8.10.7 support for
obelisk-route. - #952: Add a
Semigroupoidinstance for theEncodertype, compatible with its existingCategoryinstance. - #957:
ob deploywill now detect when the target machine needs to be rebooted after deployment, and automatically do so. This is necessary, for example, when the kernel has been updated.
- #915: Add
- Javascript FFI
- #844: Jsaddle FFI example extended in skeleton (example project which is installed by
ob init). Note the remark on minifier renaming inskeleton/static/lib.js - #903: Added support for
externs.js, a file which allows users to specify JavaScript identifiers which should be avoided by Closure Compiler during its minification step. See the FAQ.
- #844: Jsaddle FFI example extended in skeleton (example project which is installed by
- Static Assets
- #922: Serve
.wasmfiles with the correct MIME type. - #930: Add an error to
ob runwhenstaticis called with a path to a file that doesn't exist - #940: Automatically restart the server when configuration is updated via
ob deploy push. - #959: Add an error to
ob runwhenstaticFilePathis called with a path to a file that doesn't exist - #1011: Update default iOS SDK to 15.0
- #835: Rebuild static assets in fewer circumstances:
- Watch
frontend,backend,common, andstaticinstead of the project root to avoid spurious rebuilds when other files change - Don't call
nix show-derivationto decide whether to rebuild since it seems to do about as much work as a no-op nix-build - Add a debug message indicating which file changes triggered the static file rebuild
- Watch
- #922: Serve
- Update reflex-platform to v0.9.2.0
- This updated reflex-dom-core to 0.7, which removes the
jstype parameter fromPrerender(i.e.,Prerender js t mbecomesPrerender t m) and removesHasJSandHasJSContext. This resulted in changes to the following Obelisk modules:Obelisk.Configs:HasJSContextandHasJSare no longer derived.Obelisk.Frontend:ObeliskWidget js t route mno longer has thejstype parameter. It is nowObeliskWidget t route m.Obelisk.Route.Frontend: There are no longerHasJSContextorHasJSinstances forRoutedT,SetRouteT,RouteToUrlT.- Various functions that were constrained to
Prerender js t mhave been updated to with the constraintPrerender t m.
- This updated reflex-dom-core to 0.7, which removes the
- Update reflex-platform to v0.9.0.0
- Update reflex-platform to v0.8.0.3
- Update reflex-platform to v0.7.2.0
- Update reflex-platform to v0.7.1.0
- Fix bug #790 which prevented CSS file loading on ios
- Use TemplateHaskell to determine asset file paths
- Migration: All uses of
static @"some/path"become$(static "some/path"). Instead of requiringTypeApplicationsandDataKinds, modules callingstaticmust now enableTemplateHaskell. - Deprecation: Deprecate static asset modules generated via 'obelisk-asset-manifest-generate' in favor of modules generated via 'obelisk-asset-th-generate'. The new executable takes the same arguments as the old and should be a drop-in replacement. To preserve the old behavior, set
__deprecated.useObeliskAssetManifestGenerate = true;in your obelisk project configuration. - Feature: Files added to the static directory while
ob runis active no longer requireob runto be restarted
- Migration: All uses of
- Feature: When
staticFilesis a derivation, as opposed to a regular directory, produce a symlink to the result of that derivation atstatic.outand haveob runserve static assets from that symlink. This makes it possible for the static asset derivation to be rebuilt and the new results served without restartingob run. - Feature: Rebuild static asset derivations while
ob runis active as long as the change to the derivation is within the project folder.ob runnow displays a message ("Static assets rebuilt and symlinked to static.out") whenever static assets have been rebuilt and the new static assets are being served. - Feature: Add
staticFilePathtoObelisk.Generated.Static. Likestatic, this uses TH to generate a reference to a file. Unlikestatic, thisstaticFilePathgenerates a path on the filesystem instead of URL path. - Docs: Added documentation for obelisk-routes.
- #801: Remove errors and warning for local packages without a library component
- #812: Add support for
NoImplicitPreludeand other extensions disabled viaNo - Pinned version bumps:
- reflex-platform 0.7.0.0
- hnix 0.8.0
- #787: Set
immutablecache control directive when serving content-addressed static assets - Use iOS SDK 13.2
- (#810) Fix loading of
all.jsin fully compiled web apps.
- (Breaking change) Backport nixpkgs upgrades to ACME/Let's Encrypt handling so that HTTPS deployments continue to work flawlessly. If your deployment is having trouble renewing Let's Encrypt certificates, upgrade to this version.
- IMPORTANT: In order to use Let's Encrypt you must now accept their terms of service. To do that, add
terms.security.acme.acceptTerms = true;to theimport ./.obelisk/impl {section in yourdefault.nix. The new skeleton application may serve as an example.
- IMPORTANT: In order to use Let's Encrypt you must now accept their terms of service. To do that, add
- Update reflex-platform dependency to v0.6.0.0
- (#715) In
Obelisk.RoutedeprecateisoEncoderandprismEncoderin favor of more precisely namedviewEncoderandreviewEncoder(respectively) and improve documentation regarding contravariance ofreviewEncoder. - (#739) Improve
ob shellby allowing commands to be passed verbatim after a--argument. For example,ob shell 'run command'can now be writtenob shell -- run command. - (#735) Fix regression causing custom
Preludes to breakob run/ob watch/ob repl. - (#737) Fix bug causing custom
Preludes to breakob profile. - (#752) Fix the
obcommand-line tool to return non-zero exit code when underlying processes fail. - (#742, #57, #406) Enable
-dedupeand-DGHCJS_BROWSERin GHCJS builds to make JavaScript output considerably smaller leading to faster load/parse times and faster build times.- Migration: New Obelisk projects will automatically benefit from this change, but existing projects need to apply a change similar to this one.
- (#742) Update
reflex-platformwhich includes:- A new version of GHCJS where
-dedupeis fixed.
- A new version of GHCJS where
-
(#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.nixanddefault.nixis now a thin wrapper around that. -
(#665) Add
--interpretand--no-interpretoptions toob run/ob watch/ob repl/ob shell. These options allow you to pick which paths will be pre-compiled bynixwhen entering the shell/session and which won't. For exampleob run --no-interpret depwill ensure that any dependencies found in./depwill be built bynixbefore loading the rest of the project into theghcisession. The same configuration forob shellwill ensure that those packages are built and available in theghcpackage database inside the shell.NOTE:
ob shell's default behavior is now different. By default it now behaves likeob run/ob watch/ob replin that it does not pre-build any packages whose.cabalorpackage.yamlfiles are found in the project. To regain the previous behavior, useob shell --no-interpret . --interpret backend --interpret common --interpret frontendfrom the project root. -
(#695)
ob deploy initnow requires that your obelisk project be a cleangitcheckout with pushed changes. It has always required that your obelisk project be agitrepository, 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.packTextEncoderand generalizeObelisk.Route.unpackTextEncoderover anyData.Text.Lens.IsText. -
(#712) Update
reflex-platformto version 0.5.3.0. -
(#700) Ensure
ob inituses 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 its own.obelisk/impl. -
(#693) Fix a bug where some packages in
.attr-cachedirectories 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
obthe 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 androidto 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.runBackendWithto allow several customizations. (#668, #644) - Add
ob profilecommand to run Obelisk projects with profiling.ob profileworks likeob run, but instead of usingghci, it builds an executable that is built with profiling enabled. (#654) - Obelisk's
default.nixnow exposesmkAssetsfunction 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.FrontendwhererouteLink,routeLinkDynAttr, anddynRouteLinkwould 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 replwhere nested Obelisk projects would also be loaded into the session. These are now ignored. (#652) -
Improve behavior of
ob run/ob watch/ob replwhen 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.mkRouteToUrlsince it is easily written in terms ofObelisk.Route.renderObeliskRoute:mkRouteToUrl validFullEncoder (k :/ v) = renderObeliskRoute validFullEncoder (FullRoute_Frontend (ObeliskRoute_App k) :/ v) -
Add
Obelisk.Backend.renderAllJsPathto expose URL path toghcjs/all.js. (#545) -
Add argument to
serveDefaultObeliskApp,serveObeliskApp, andserveGhcjsAppto take the path toall.jsinstead 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 replsessions. Any.cabalor hpack package inside the current obelisk project will be loaded into the session. Forob run/ob watchthis means the session will automatically reload when you save a source file in any of those packages. Forob replit means that:rwill 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 hooglecommand to start a local Hoogle server for the project. (#628) ob thunk packwill now attempt to automatically detect if the thunk is a private or public repo. To avoid this detection, specify--privateor--publicmanually. (#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.fetchGitfor private repositories (when thegit.jsonfile specifies"private": true). (#594) - Add a new thunk loader for GitHub repositories that uses
builtins.fetchTarballfor public repositories to increase loader performance and usesfetchFromGitHubfor private repositories (when thegithub.jsonfile specifies"private": true). Note thatfetchFromGitHubrequires some Nix configuration for the Nix builder to access the repository. Ifob thunk packfails in this case, use-vto see Nix's helpful message. (#594) - Add
--public/--privateoptions toob thunk packto specify if a repository should be treated as a public or private. (#594) - Improve error messaging when a dependency doesn't have the expected
.cabalorpackage.yamlfile. (#597) - Improve the skeleton in small ways. (#593, #589)
- Fix
obcommands to again support running from any subdirectory of an obelisk project (#591) - Add
reflex-platform-funcargument to Obelisk'sdefault.nix. It defaults to its prior behavior of using the reflex-platform in indep. (#612)
- Change the structure of Obelisk routes to use a designated
FullRoutetype. 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_routeEncoderinBackendto usemkFullRouteEncoderinstead ofhandleEncoder. Specifically, the backend and frontend cases of the top-levelpathComponentEncoderbecome the second and third arguments ofmkFullRouteEncoderrespectively, 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
InLwithFullRoute_BackendandInRwithFullRoute_Frontend.
- Rewrite the implementation of
- Generalised
pathSegmentEncoder, addedpathFieldEncoder. - Added some
Prisms to the encoder library for manipulatingDSums. - Add
ob doccommand, 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-routefor single parameters in URL paths. - Bump reflex-platform so that obelisk now uses reflex-dom 0.5.2.0.
- Use a
--purenix shell inob runfor parity withob repland 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 runnow handlesghcierrors better, and includes a customghcidversion. As a result, you no longer need to have ghcid installed to useob run, as we provide one for you.obcommands now complain less on systems with umasks other than0022.- Ignore package environment files in
ob runandob 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/implin the project'sdefault.nix. - Add
COMPLETEpragma 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 shellcommand 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
MonadIOfromObeliskWidgetto 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-lookupis a new internal package which looks up all configs in a platform-specific way.obelisk-executable-frontendandobelisk-executable-backendprovide MTL-style monad classes (HasFrontendConfigsandHasBackendConfigs) which the frontend and backend, respectively, can use to look up configs. This replaces the oldgetfunction which ran inIO. - Add a flag to force thunk packing even if there are unpushed changes in the unpacked thunk.
- Use reflex-dom's
HydrationDomBuilderto "hydrate" statically rendered DOM served by the Obelisk backend (rather than re-creating DOM and replacing it all). - Add
HasCookiesandCookiesTto allowObeliskWidgets to access cookies during static and "hydrated" DOM rendering.