diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index b584fc585..99e85551e 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -8,7 +8,7 @@ by checking the relevant checkboxes):
 
 - [ ] The commits are consistent with our [contribution guidelines](../blob/master/CONTRIBUTING.md)
 - [ ] You've added tests (if possible) to cover your change(s)
-- [ ] All tests are passing (`make test`)
+- [ ] All tests are passing ([`eldev test`](https://github.com/doublep/eldev))
 - [ ] The new code is not generating bytecode or `M-x checkdoc` warnings
 - [ ] You've updated the [changelog](../blob/master/CHANGELOG.md) (if adding/changing user-visible functionality)
 - [ ] You've updated the readme (if adding/changing user-visible functionality)
diff --git a/.gitignore b/.gitignore
index 025b7c966..0a6cfad6a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,8 @@
 *\#*\#
 *.\#*
 *.elc
-.cask
-elpa*
+/Eldev-local
+/.eldev
+/dist
 /TAGS
 /project
diff --git a/.travis.yml b/.travis.yml
index 9a6849c3c..3323d2bd5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,18 +2,18 @@ sudo: false
 language: emacs-lisp
 dist: xenial
 env:
-  - EMACS_BINARY=emacs-25.1-travis MAKE_TEST=test
-  - EMACS_BINARY=emacs-25.2-travis MAKE_TEST=test
-  - EMACS_BINARY=emacs-26.3-travis-linux-xenial MAKE_TEST=test
-  - EMACS_BINARY=emacs-git-snapshot-travis-linux-xenial MAKE_TEST=test
+  - EMACS_BINARY=emacs-25.1-travis
+  - EMACS_BINARY=emacs-25.2-travis
+  - EMACS_BINARY=emacs-26.3-travis-linux-xenial
+  - EMACS_BINARY=emacs-git-snapshot-travis-linux-xenial
 matrix:
   allow_failures:
     - env: EMACS_BINARY=emacs-git-snapshot-travis
   fast_finish: true
 before_script:
-  - curl -fsSkL https://gist.github.com/rejeep/ebcd57c3af83b049833b/raw > x.sh && source ./x.sh
-  - evm install $EMACS_BINARY --use --skip
-  - make elpa
+  - curl -fsSL https://raw.github.com/doublep/eldev/master/webinstall/travis-eldev-and-evm > x.sh && source ./x.sh
+  - evm install $EMACS_BINARY --use
 script:
-  - emacs --version
-  - make $MAKE_TEST
+  - eldev -p -dtT test --expect 100
+  # Also require that byte-compilation produces no warnings.
+  - eldev -dtT compile --warnings-as-errors
diff --git a/Cask b/Cask
deleted file mode 100644
index 0b6a125b0..000000000
--- a/Cask
+++ /dev/null
@@ -1,7 +0,0 @@
-(source gnu)
-(source melpa)
-
-(package-file "projectile.el")
-
-(development
- (depends-on "buttercup"))
diff --git a/Eldev b/Eldev
new file mode 100644
index 000000000..c51ddaa95
--- /dev/null
+++ b/Eldev
@@ -0,0 +1 @@
+(eldev-use-package-archive 'melpa)
diff --git a/Makefile b/Makefile
deleted file mode 100644
index be36d1044..000000000
--- a/Makefile
+++ /dev/null
@@ -1,31 +0,0 @@
-CASK = cask
-export EMACS ?= emacs
-EMACSFLAGS =
-TESTFLAGS =
-
-SRCS = $(wildcard *.el)
-OBJS = $(SRCS:.el=.elc)
-
-.PHONY: compile test clean elpa
-
-all: compile
-
-elpa-$(EMACS):
-	$(CASK) install
-	$(CASK) update
-	touch $@
-
-elpa: elpa-$(EMACS)
-
-elpaclean:
-	rm -f elpa*
-	rm -rf .cask # Clean packages installed for development
-
-compile: elpa
-	$(CASK) build
-
-clean:
-	rm -f $(OBJS)
-
-test: elpa
-	$(CASK) exec buttercup -L .
diff --git a/doc/modules/ROOT/pages/contributing.adoc b/doc/modules/ROOT/pages/contributing.adoc
index 8b445d192..c7c32e27e 100644
--- a/doc/modules/ROOT/pages/contributing.adoc
+++ b/doc/modules/ROOT/pages/contributing.adoc
@@ -11,8 +11,9 @@ our issue reporting template (it's loaded automatically when you create a
 new GitHub issue).
 
 It's usually a good idea to try to reproduce (obscure) bugs in isolation. You
-can do this by cloning Projectile's GitHub repo and running `make run-projectile` inside
-it.  This will bring up Emacs with only the latest version of Projectile loaded. By
+can do this by cloning Projectile's GitHub repo and running `eldev emacs` inside
+it (you need to install [Eldev](https://github.com/doublep/eldev) tool first).
+This will bring up Emacs with only the latest version of Projectile loaded. By
 starting fresh, with the latest code, we can ensure that the problem at hand
 isn't already fixed or caused by interactions with other packages.
 
@@ -90,16 +91,23 @@ https://github.com/sponsors/bbatsov[GitHub Sponsors].
 [source,sh]
 ----
 $ cd /path/to/projectile
-$ make update
-$ make compile
-$ make test
+$ eldev test
 ----
 
-Run all tests with:
+If you need to make sure dependencies are at the latest version:
 
 [source,sh]
 ----
-$ make test
+$ eldev update
+----
+
+Run all tests with Projectile installed as an Emacs package
+(i.e. byte-compiled and all that; this won't affect your normal Emacs
+though):
+
+[source,sh]
+----
+$ eldev -p test
 ----
 
 Tests should run fine in `shell-mode` or `term-mode`. It's also possible to use kbd:[M-x] `compile` (or `helm-make`).
diff --git a/projectile.el b/projectile.el
index a0ddd78fc..873ea778b 100644
--- a/projectile.el
+++ b/projectile.el
@@ -59,12 +59,14 @@
 (declare-function make-term "term")
 (declare-function term-mode "term")
 (declare-function term-char-mode "term")
+(declare-function term-ansi-make-term "term")
 (declare-function eshell-search-path "esh-ext")
 (declare-function vc-dir "vc-dir")
 (declare-function vc-dir-busy "vc-dir")
 (declare-function string-trim "subr-x")
 (declare-function fileloop-continue "fileloop")
 (declare-function fileloop-initialize-replace "fileloop")
+(declare-function tramp-archive-file-name-p "tramp-archive")
 
 (declare-function ggtags-ensure-project "ext:ggtags")
 (declare-function ggtags-update-tags "ext:ggtags")
@@ -2809,7 +2811,7 @@ test/impl/other files as below:
 (projectile-register-project-type 'emacs-eldev (lambda () (or (projectile-verify-file "Eldev")
                                                               (projectile-verify-file "Eldev-local")))
                                   :project-file "Eldev"
-                                  :compile "eldev package"
+                                  :compile "eldev compile"
                                   :test "eldev test"
                                   :run "eldev emacs"
                                   :package "eldev package")
diff --git a/test/elpa.el b/test/elpa.el
deleted file mode 100644
index 359ebb9b3..000000000
--- a/test/elpa.el
+++ /dev/null
@@ -1,5 +0,0 @@
-(setq package-user-dir
-      (expand-file-name (format ".elpa/%s/elpa" emacs-version)))
-(package-initialize)
-(add-to-list 'load-path default-directory)
-
diff --git a/test/make-compile.el b/test/make-compile.el
deleted file mode 100644
index fb097a923..000000000
--- a/test/make-compile.el
+++ /dev/null
@@ -1,3 +0,0 @@
-(setq files '("projectile.el"))
-(setq byte-compile--use-old-handlers nil)
-(mapc #'byte-compile-file files)
diff --git a/test/make-update.el b/test/make-update.el
deleted file mode 100644
index f311da27b..000000000
--- a/test/make-update.el
+++ /dev/null
@@ -1,26 +0,0 @@
-(setq package-user-dir
-      (expand-file-name (format ".elpa/%s/elpa" emacs-version)))
-(message "installing in %s ...\n" package-user-dir)
-(package-initialize)
-(setq package-archives
-      '(("melpa" . "http://melpa.org/packages/")
-        ("gnu" . "http://elpa.gnu.org/packages/")))
-(package-refresh-contents)
-
-(defconst dev-packages
-  '(helm noflet ag))
-
-(dolist (package dev-packages)
-  (unless (package-installed-p package)
-    (ignore-errors
-     (package-install package))))
-
-(save-window-excursion
-  (package-list-packages t)
-  (condition-case nil
-      (progn
-        (package-menu-mark-upgrades)
-        (package-menu-execute t))
-    (error
-     (message "All packages up to date"))))
-
diff --git a/test/projectile-test.el b/test/projectile-test.el
index a4f4935e5..39ce1f8ca 100644
--- a/test/projectile-test.el
+++ b/test/projectile-test.el
@@ -32,13 +32,13 @@
 (message "Running tests on Emacs %s" emacs-version)
 
 ;; TODO: Revise this init logic
-(let* ((current-file (if load-in-progress load-file-name (buffer-file-name)))
-       (source-directory (locate-dominating-file current-file "Cask"))
-       ;; Do not load outdated byte code for tests
-       (load-prefer-newer t))
-  ;; Load the file under test
-  (load (expand-file-name "projectile" source-directory))
-  (setq projectile-test-path (expand-file-name "test" source-directory)))
+(defvar projectile-test-path (let* ((current-file (if load-in-progress load-file-name (buffer-file-name)))
+                                    (source-directory (locate-dominating-file current-file "Eldev"))
+                                    ;; Do not load outdated byte code for tests
+                                    (load-prefer-newer t))
+                               ;; Load the file under test
+                               (load (expand-file-name "projectile" source-directory))
+                               (expand-file-name "test" source-directory)))
 
 ;;; Test Utilities
 (defmacro projectile-test-with-sandbox (&rest body)
@@ -128,9 +128,9 @@ You'd normally combine this with `projectile-test-with-sandbox'."
 
 (describe "projectile-project-type"
   (it "detects the type of Projectile's project"
-    (expect (projectile-project-type) :to-equal 'emacs-cask))
+    (expect (projectile-project-type) :to-equal 'emacs-eldev))
   (it "caches the project type"
-    (expect (gethash (projectile-project-root) projectile-project-type-cache) :to-equal 'emacs-cask)))
+    (expect (gethash (projectile-project-root) projectile-project-type-cache) :to-equal 'emacs-eldev)))
 
 (describe "projectile-ignored-directory-p"
   (it "checks if directory should be ignored"