All Projects → opvasger → Devtools

opvasger / Devtools

Licence: bsd-3-clause
Tools for developing Elm programs! 🔧

Programming Languages

elm
856 projects

Projects that are alternatives of or similar to Devtools

Redux Devtools Extension
Redux DevTools extension.
Stars: ✭ 13,236 (+17089.61%)
Mutual labels:  debug, devtools
Remote Redux Devtools
Redux DevTools remotely.
Stars: ✭ 1,774 (+2203.9%)
Mutual labels:  debug, devtools
Lightproxy
💎 Cross platform Web debugging proxy
Stars: ✭ 2,347 (+2948.05%)
Mutual labels:  debug, devtools
React Performance Observer
Get performance measurements from React Fiber
Stars: ✭ 207 (+168.83%)
Mutual labels:  debug, devtools
debug.js
Debugger of JavaScript, by JavaScript, for JavaScript
Stars: ✭ 19 (-75.32%)
Mutual labels:  devtools, debug
Redux Bug Reporter
🐛 A bug reporter and bug playback tool for redux. 🐛
Stars: ✭ 683 (+787.01%)
Mutual labels:  debug, devtools
Redux Remotedev
Redux DevTools for production (web and React Native) with a highly flexible API.
Stars: ✭ 265 (+244.16%)
Mutual labels:  debug, devtools
San Devtools
Browser developer tools extension for debugging San.
Stars: ✭ 51 (-33.77%)
Mutual labels:  debug, devtools
Ios Sdk
AppSpector is a debugging service for mobile apps
Stars: ✭ 56 (-27.27%)
Mutual labels:  debug
Daplink
Stars: ✭ 1,162 (+1409.09%)
Mutual labels:  debug
Grpcc
A gRPC cli interface for easy testing against gRPC servers
Stars: ✭ 1,078 (+1300%)
Mutual labels:  devtools
Gdbstub
A simple, dependency-free GDB stub that can be easily dropped in to your project.
Stars: ✭ 56 (-27.27%)
Mutual labels:  debug
Bugsnag Python
Official bugsnag error monitoring and error reporting for django, flask, tornado and other python apps.
Stars: ✭ 69 (-10.39%)
Mutual labels:  debug
Tracer
A powerful and customizable logging library for node.js
Stars: ✭ 1,081 (+1303.9%)
Mutual labels:  debug
Tsearch
⚠️ WIP ⚠️ Search TypeScript functions and methods by types
Stars: ✭ 72 (-6.49%)
Mutual labels:  devtools
Blab
A debugging tool
Stars: ✭ 69 (-10.39%)
Mutual labels:  debug
F19n Obtrusive Livetest
A sandboxed, extendable testing chrome extension and framework! It runs pre-defined and custom tests on each page that you visit.
Stars: ✭ 53 (-31.17%)
Mutual labels:  devtools
Whistle
HTTP, HTTP2, HTTPS, Websocket debugging proxy
Stars: ✭ 9,683 (+12475.32%)
Mutual labels:  debug
Calip
calip(er): all functions deserve to be measured and debugged at runtime
Stars: ✭ 71 (-7.79%)
Mutual labels:  debug
Npm Link Up
🔄 Link your NPM projects automatically, for sophisticated / modular local development.
Stars: ✭ 68 (-11.69%)
Mutual labels:  devtools

Elm DevTools

Tools for developing Elm programs!

Demo Gif

CI Build Badge NPM Version Badge Elm-package Version Badge

Goals

The overarching goal is to close the loop between writing Elm code and interacting with it. This concretely means:

  1. Code changes should be reflected immediately in a running instance of its application.
  2. Code changes should only break application-state if necessary, and if enabled, only partially.
  3. Application-states should be effortless to inspect, navigate, persist and share.
  4. Guidance from the compiler should be right in front of you when you make mistakes.
  5. The boilerplate necessary to enable the first four goals should be minimal, and if needed be, incremental.

I strongly believe that the optimal design and implementation of these goals will transform how we build our applications. Going through the loop of compiling code, reloading browser windows and getting the application into the right state costs seconds, but those seconds are spent at such a frequency that writing interactive applications is incredibly time-consuming. I hope it doesn't have to be.

Design

These devtools are based on the Elm architecture. Since programs are constructed using a few simple functions, they can be embedded and controlled, which also sets some limits for what these devtools can do.

Automatic Message Replay

Any previous state of an application can be recomputed using the initial state and a list of messages folded by an update-function. These state-transitions happen independently of their environment - no commands are sent during replay, only the state changes. This is very useful to:

  • Stop time to look at what happened.
  • Go to a previous point in time to try something else.
  • Reload without losing the state of your application.
  • Reload with code changes but only partial (or no) loss of application state.

Sessions

These devtools run in sessions. A session is essentially made up of:

  1. devtools settings and state.
  2. all messages that ever updated the debugged applications state.

Sessions keep track of what your doing during development. They persist through browser-reloads, code-changes, can be downloaded, sent, opened by collaborators, and submitted as bug-reports.

Support for Code-Changes

To reliably support code-changes in sessions, it is essential that interactions are recorded rather than states. Interactions are modeled in Elm applications with a single type, usually called Msg. Let's do an example:

type Msg = Increment | Decrement

update msg count = case msg of
    Increment -> count + 1
    Decrement -> count - 1

state = List.foldl update 0 [ Increment, Decrement, Increment ]

If you run this example, the value of state will be 1.

Refactor this into an application, and devtools would deal with changes to this code in different ways:

  • If Msg was given another constructor, called Reset which updates Reset -> 0, the value of state is still 1. Append-only changes are always compatible. Great.
  • If Msg had Decrement removed (or changed), one of three strategies (of your choice) could be used:
    1. Restart the application, as Decrement has no meaning in the program anymore. The value of state is now 0, and we've accomplished nothing. This is how most web-app development works.
    2. Filter Decrement out of the list and update accordingly. The value of state is now 2. This works better or worse depending on the coupling between the updates your messages perform. If you remove LogIn and expect ViewAccount to work, you will be dissapointed.
    3. Take messages until you reach the first Decrement and update using those. The value of state is now 1. This is really great, as it captures the remaining valid sequence of updates the application could do. If LogIn goes away, you'll never try to ViewAccount.
  • If update is changed, any sequence of messages will still be (generally) valid. Increment might do a + 2 instead, but messages still capture your interactions, so you can tweak update until it works as intended. You can tweak view and subscriptions in the same way.

By recording interactions rather than state, Elm applications can be written while running, and you will only ever have impared (but predictable) message-replay when you modify the definition of messages.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].