Release Notes

These are our internal release notes, but why wouldn't we share something this important Slightly Smiling Face


2.7.1 - 26/10/2022

Use Go template in SFTP step's filename
Fix local environment config

2.7.0 - 11/10/2022

Dashboard: run CI on go 1.19
App: introduce mutex lock as pointer to avoid data races in all modules
App: data sending internal refactor for "Button" type
App: HTTP client has default timeout
App: new way of Javascript timeout handling (hoping for fewer leaking objects)
App: message queue refactoring q.Delete() calls
App: on error the queue item was stuck in certain cases
Dashboard: using our fork of otto javascript engine
App: Javascript step has includes(), startsWith() endsWith()
App: SFTP step creates the path if not exists
App: MySQL connections are kept per step and not per step running, resulting less connections open/close when running
App: Stop module: fix locking up
Dashboard: update branch to what's already on live dashboard server
Dashboard: compiler to always trim (+ trim project path from binary)
Dashboard: ES search improvements and code cleanup
Dashboard: faster dashboard stats query
Dashboard: Javascript tester will not crash the server (runs as separate process)
Dashboard: eventlog detail view search field
Dashboard: show running apps as LEDs on main dashboard page
Dashboard: fix multi-tab login handling (sessionStorage became single tab)

2.6.10 - 05/10/2022

fix SFTP input unconnected ids

2.6.9 - 05/10/2022

hotfix SFTP input

2.6.8 - 29/06/2022

Add regexp replace template function for templating

2.6.7 - 23/05/2022

Hotfix HTTP step not crashing on output

2.6.6 - 25/03/2022

App: don't fill disk with logs if can't send stats
Dash: removed unnnecessary log entry

2.6.5 - 09/02/2022

Dash: Fix OTA

2.6.4 - 09/03/2022

App: Go template string functions: contains, hasPrefix, hasSuffix
App: Add HTTP step: result body to error message
App: Fix queue not copying array payloads
App: Fix concurrent writing of map
Dash: Eventlog pagination will provide data ignoring timestamps

2.6.3 - 08/03/2022

App: Don't send payload with every event

2.6.2 - 10/02/2022

Dash: Add eventlog verbose errors

2.6.1 - 02/12/2021

App: Fix FTPs checking if archive folder exists
App: FTP to not delete main folder if glob is empty
App: HTTP step was breaking event flow
Dashboard : Audit log was not showing what app OTA-ed
Dashboard: Build screen now shows accurate active/inactive toggles
Dashboard: Drag and drop fixed for Firefox and Safari
Dashboard: Editor will resize to full width
Dashboard: Fix environment editor back button
Dashboard: Fix several functionalities showing 404
Dashboard: Fixed copying interfaces to empty groups
Dashboard: Group deletion
Dashboard: Loader instead of showing old data
Dashboard: New app button now resets app filtering
Dashboard: Remember selected app on refresh
Dashboard: Reordering interfaces in group now possible

2.6.0 - 25/11/2021

Dashboard: inviting users to your organisation
App: slack attachments
Dashboard: hints will show only once
Dashboard: dashboard cache expiry in 3 months
Dashboard: more user onboarding banners
App: HTTP step fix for accepted status codes
Dashboard: Fix OTA process intermittently failing
App: Fix FTPS file not deleting if duplicated

2.5.5 - 13/10/2021

App: new module: Slack
App: new module: User Reference
Dashboard: invite user basic functionality

2.5.4 - 11/10/2021

Dashboard: websocket + cookies fix

2.5.3 - 11/10/2021

App: fix data race in sync chan
App: queue naming include step names
Dashboard: Register with Google, nicer registration page
Dashboard: Log in with Google on mobile
Dashboard: fix countries list
Dashboard: new welcome banners, better handling no orgs/apps
Dashboard: welcome hints popup

2.5.2 - 07/10/2021

App: removed step sending

2.5.1 - 06/10/2021

App: queue system fix - copy payloads
Dashboard: backend tweaks

2.5.0 - 06/10/2021

App: Memory based queue system
App: Refactored dashboard communication
App: FTP Input: handle 0 size files, don't crash on connection issues
App: HTTP Step: fixed body readying
App: faster json processing
Dashboard: new frontend architecture
Dashboard: build screen new group management UI
Dashboard: eventlog will search in sql as well
Dashboard: refactored cashing of dashboard graphs
Dashboard: user list to display all users
Dashboard: alert to reload on new frontend versions
Dashboard: only save interface declaration on actual change
Dashboard: better editor hints on startup, input dropdown module descriptions
Dashboard: cron input explainer
Dashboard: show running apps LED on organisation dashboard
Dashboard: fix disappearing input frequency inputs
Dashboard: fix back button size (not full width anymore)

2.4.0 - 20/09/2021

Dashboard: Login with Google
Dashboard: check if S3 bucket already exists (reliability)
Dashboard: elasticsearch code optimisation (reliability)
App: send alert when any step has error (if on)
App: send alert if input is "down" (folder inaccessible, http poll error...)

2.3.3 - 17/09/2021

Dashboard: Editor has all versions, can click through them
Dashboard: Fix vault saving versions twice
Dashboard: display expired cached diagrams empty
Dashboard: show banner on organisation dashboard when no apps defined

2.3.2 - 16/09/2021

Codebase: fix tests

2.3.1 - 16/09/2021

Dashboard: build list (i) icon with last modifier and date info

2.3.0 - 16/09/2021

Dashboard: Dashboard page is faster, thanks to indexing and caching
Editor: text editors are resizable
Codebase: Vault tool to run batch jobs on every client/app/interface

2.2.7 - 13/09/2021

App: HTTP step: fix on stuck after 204 status result
App: HTTP Listen input sync handling fix
App: FTP connection handling errors, retry on failure
App: Removed unnecessary template field from Parser
App: SQL step data sending fix when not array result
Editor: tempate tester =<.config>= tag support
Editor: autofocus on search field when adding step
Editor: search based on title not module internal name
Editor: new step name based on title not internal name
Build: Fix added interface not showing in group without refresh
Dashboard: App and interface counts: do not count deleted ones
Dashboard: Fix login redirect to first organisation
App: Event log: S3 Data to be retreived from the indicated bucket

2.2.6 - 03/09/2021

App: Refactor FTP / FTPs Input to handle Archive and Errors folders

2.2.5 - 02/09/2021

App: Fix FTP step issues

2.2.4 - 02/09/2021

Dashboard: Use AWS S3 buckets to save payload data
App: Fix FTP input not renaming files

2.2.3 - 25/08/2021

App: HTTP steps to return status of last request
App: FTP(S) input handling Response step's codes (errors folder)
Dashboard: UI: Editors replaced by Monaco
Dashboard: Event log details render text better
Dashboard: Billing frontend for organisation dashboard
App: Alert (slack or/and email) on interface errors when configured
Dashboard: Build list: app interface groups
Dashboard: Event list selection showing current/last detail

2.2.2 - 16/08/2021

Codebase: fix frontend linting (internal, for CI to kick in)

2.2.1 - 16/08/2021

Dashboard: Billing backend
Dashboard: Registrations will expire
App: SQL module locking fix
App: App doesn't fully block up on one interface locking
Dashboard: Event log live mode turned off on filter change
Dashboard: Users list correctly showing on org dashboard
Dashboard: Editors changed from CodeMirror to Monaco
Dashboard: App groups backend
App: interface alerting fixed
Dashboard: Condition tester
Dashboard: Javascript and template tester fixes

2.2.0 - 29/07/2021

Dashboard: Switched to Elasticsearch: full text search in payloads
Dashboard: Event log backlinks to build
Dashboard: Event log detail view scroll behaviour fix
Dashboard: Colouring payload pills on event log detail view
Dashboard: Event log detail view now displays steps with step icons
Dashboard: Event log detail syntax highlight and full height
App: FTP poll input to read file correctly
Dashboard: Fixed version fetching for dirty builds
Dashboard: Invoicing preparations
Dashboard: New status page with real live info
Dashboard: Fix back arrows behaviour
App: Enforcing unique step labels by adding dots dynamically
App: JSON sending NaN issue fixed by using different JSON encoder
Dashboard: Show real IP in logs, switch to JSON logging for Kibana
Dashboard: Show selected row in eventlog by clipping the status icon
Dashboard: Fix dashboard timestamp issues for more accurate graphs
Dashboard: Fix event graph view
App: Loop and Jump steps fixes
App: SQL step: return last insert id and affected rows, report failed sql
Dashboard: Editor node is restarted when using too much memory
Dashboard: Ingest node a bit more silent into logs
App: SQL escaping {{sql .tag}} will encode null to NULL

2.1.11 - 21/07/2021

App: fix FTP client step error handling
Dashboard: template tester copies template to test to editor
Dashboard: eventlog error messages are well formatted

2.1.10 - 15/07/2021

App: fix FTP client step error handling
Dashboard: show html docs links on steps as well
App: remove Parsing XML: from slog
App: remove slog from m2 stock module
App: try to limit number of open files a bit
App: http listen input sends data in correct format to dashboard
Dashboard: fix event_id paginated parts in mongodb
App: new logic for generating IDs

2.1.9 - 14/07/2021

App: New module: SQLite
Dashboard: Changed name of Sync Out to Response
Dashboard: More lightweight javascript tester
App: Fix crash on queue item save erroring
App: Fix sql module output issue

2.1.8 - 12/07/2021

Dashboard: fix indexer - app hash bug
Dashboard: introduced Javascript tester (JS Tester link above javascript code)
Dashboard: correct size calculation based on mongodb overhead

2.1.7 - 09/07/2021

App: new module: Status
Dashboard: event log records errors correctly
App: app messaging cleanup

2.1.6 - 09/07/2021

App: fix file input module: check for new files

2.1.5 - 09/07/2021

App: fix file input module not picking up file content

2.1.4 - 08/07/2021

App: error sending and displaying fixes for eventlog
App: javascript step: handling errors
Dashboard: minor tweak for font size in eventlog detail header
Dashboard: data microservice is more flexible with sent data

2.1.3 - 07/07/2021

App: http step: fix messaging of errors
Dashboard: eventlog will display errors and warnings consistently

2.1.2 - 07/07/2021

App: paginate: fix interface not done
Dashboard: show all pages in data detail view
App: send data only if we have something to send

2.1.1 - 07/07/2021

App: csv reader parser handling EOF gracefully
Dashboard: File module to check for empty files and warn about them
Dashboard: data node to find paginated content for detail view

2.1.0 - 07/07/2021

Dashboard: visibility improvements: reworked event details and data sending
App: stability improvements: less ways to crash an app
App: more accurate step counting
Dashboard: handling user permissions on dashboard
Dashboard: publish and download binary buttons will be able to report compilation problems
App: handle tick input code error without crashing / send error to server
Dashboard: event log: error message has a copy to clipboard button
App: simulator queue items can be edited
App: Parser handling EOF better
App: SQL poll step simulator output fix
App: Email step:  Mailgun  support (EU domain)

2.0.7 - 10/06/2021

App: App reconnects a bit more gracefully
Dashboard: Ingest node doesn't crash on non paginated package ids
Dashboard: MySQL server reconnect handling is more resilient and doesn't flood server
App: File input module can handle empty error and archive folders

2.0.6 - 28/05/2021

Dashboard: Live mode now uses ids instead of timestamp
Dashboard: Ability to see payloads from eventlog screen
App: Fix several ways to crash apps
Dashboard: Help button
Dashboard: Registration screen T&C
Dashboard: UI: switches are turning green when on

2.0.5 - 27/05/2021

Dashboard: Fix newsletter table declaration
Dashboard: Fix live mode in eventlog

2.0.4 - 27/05/2021

App: Fix data sending settings
Dashboard: Adapt pagination so it will send done to ingest node
Dashboard: Newsletter subscribers will be tracked
Dashboard: Help button goes to Slite
Dashboard: UI Background behaves better

2.0.3 - 27/05/2021

Dashboard: Fix build for indexer change

2.0.2 - 27/05/2021

Dashboard: Fix indexer not starting

2.0.1 - 27/05/2021

Dashboard: Report admin/build flags on log in
Dashboard: Fix  /user/client/usage/{clienthash}  endpoint declaration
Dashboard: Add admin permission to session on organisation creation
Codebade: Gitignore generated version.json file

2.0.0 - 26/05/2021

Dashboard: New UI design (Vuetify!)
App: Data sending refactored
Dashboard: Billing info based on steps and sizes (WIP)
Dashboard: New dashboard
Dashboard: Registration and user permissions control
Dashboard: Loop and If steps
Dashboard: Alerting via email or slack

1.17.25 - 18/02/2021

App: M2 Product: website ids are inserted and updated now

1.17.24 - 18/02/2021

App: M2 Product: Added flag to only insert name if new product created

1.17.23 - 15/02/2021

App: M2 Product: Changed PID to RID to fix attribute wrong insert query

1.17.22 - 12/02/2021

App: FTPS Input: updated sync handling, refactor

1.17.21 - 11/02/2021

App: Fix OTA and killing app (^C)
Dashboard: MongoDB / AWS DocumentDB support
App: FTPS Input: Fix module settings

1.17.20 - 03/02/2021

App: SQL step: fix losing data when multiple results and multiple waiting input packets
App: M2 Product: make product node compatible with M2 EE (CE will need work on)
App: M2 Price: fix several minor issues and if no website given use default store
App: M2 stock: update only warehouse manage_stock
App: FTP(s) input module sync in handling, error folder

1.17.19 - 28/01/2021

App: M2 stock: update only warehouse manage_stock
App: M2 price: index prices after setting
App: avoid stuck upgrades by lightweight stop
App: DataMapper: fix crashing datamapper on invalid payload

1.17.18 - 27/01/2021

App: M2 stock added set manage_stock functionality
Dashboard: Fixed Formatting Error and Fixed Failing Test

1.17.17 - 27/01/2021

App: M2 stock module fixed functionality
Dashboard: add updated_at to build list
Dashboard: update db on interface save

1.17.16 - 26/01/2021

App: M2 stock: fix SQL (removed ;)

1.17.15 - 26/01/2021

App: M2 Stock: adding product to website if stock is present
App: M2 Price: fix price updates
App: FTP poll: use remote FS commands instead of local ones

1.17.14 - 25/01/2021

App: M2 Price module: price update SQLs, fixed tests
App: M2 Product module: product updates using on duplicate SQLs

1.17.13 - 22/01/2021

FTP only mode in FTP poll input

1.17.12 - 22/01/2021

FTP poll input fixes
App: FTP poll input icon

1.17.11 - 18/01/2021

App: M2 Stock fix selecting old quantity

1.17.10 - 15/01/2021

App: M2 Stock new switch for incremental stock changes

1.17.9 - 14/01/2021

App: M2 Stock another small SQL fix

1.17.8 - 14/01/2021

App: M2 Stock simple SQL query fix for updates

1.17.7 - 14/01/2021

App: M2 Stock SQL query fixes

1.17.6 - 13/01/2021

Dashboard: fix editor missing update (run editor go generate an protoc)

1.17.5 - 12/01/2021

Codebase: fix release (last one was on the wrong branch)

1.17.4 - 12/01/2021

App: M2 stock module Advanced Inventory support

1.17.3 - 06/01/2021

App: added FTP(s) input step
App: fix SQL error handling

1.17.2 - 17/12/2020

App: fix jump step's locking behaviour
App: fix stopping with ^C and with OTA

1.17.1 - 16/12/2020

App: add TLS option to FTPS step
Dashboard: fix deletion-related SQL issues
Dashboard: fix editor and env editor vuex issues

1.17.0 - 16/12/2020

Dashboard: fix z-index of editor add step drawer
Dashboard: Rework app and interface deletions
Dashboard: Add indexer delete app and intf from vault + fix db funcs
Dashboard: clean up frontend pages folder a bit
Dashboard: refactor editor and move components around a bit
App: fix force refresh, add auto-save callbacks
App: ftp step using content with templates

1.16.8 - 09/12/2020

App: fixing emptyok

1.16.7 - 09/12/2020

Dashboard: change condition: or to and to fix empty ok check

1.16.6 - 09/12/2020

Dashboard: fixed status node for app deletion

1.16.5 - 09/12/2020

Dashboard: fixed status node behaviour, status list updates on the fly

1.16.4 - 08/12/2020

App: sql module: fix empty ok when is array set
App: send data module: add send all data option

1.16.3 - 01/12/2020

App: really fix stop debug command
Dashboard: removed stripe js from frontend until we need it

1.16.2 - 25/11/2020

App: fix stop debug command

1.16.1 - 25/11/2020

App: error handling in movepacket
Dashboard: deleting items from simulator
App: forward http status from sync out to http listen
App: sync out uses condition from now on
Dashboard: data node not to return with 401

1.16.0 - 23/11/2020

Dashboard: help bubbles with helpcenter snippets
Dashboard: build list: fix copying environments and interfaces
Dashboard: fixed debugging apps:v finding app and sending data back

1.15.12 - 16/11/2020

Dashboard: status list fixed
Dashboard: multi-line input in environment variables
Dashboard: fix deleting/renaming apps
App: debug enabled only when available, fix arguments

1.15.11 - 11/11/2020

Dashboard: fix create app button
App: make send input switch work in input modules
App: sql input module in simulator from pasted tab separated data
Dashboard: show empty apps in build list

1.15.10 - 09/11/2020

App: HTTP step: set ID for new packets
Dashboard: app node WIP
App: log read IDs from queue correctly

1.15.9 - 09/11/2020

App: fix app crash at NewQueue

1.15.8 - 09/11/2020

Dashboard: fix build list getting first interface hash
Dashboard: fix simulator deleting packet from modules
App: debug senddata and payload registry

1.15.7 - 09/11/2020

Dashboard: Editor Build List: fix app and interface renaming, interface ordering

1.15.6 - 09/11/2020

Dashboard: vault uses hashes

1.15.5 - 06/11/2020

App: queue naming fix: name queue after app binary to avoid clashing

1.15.4 - 05/11/2020

Codebase: fix last release

1.15.3 - 05/11/2020

Dashboard: fix mail sending database access

1.15.2 - 05/11/2020

App: fix stats sending

1.15.1 - 04/11/2020

App: add template processing to M2 Product config

1.15.0 - 04/11/2020

Dashboard: new registration page and email activation
Dashboard: add editor steps with drag and drop
App: fixes for M2 Stock and M2 Product module

1.14.0 - 03/11/2020

App: use persistent queue in apps
App: silent mode inputs (cron and http poll auth shouldn't spam ingest node)
App: M2 Stock and M2 Product modules
Dashboard: fix for / in names (not breaking vault anymore)
App: simulator payloads can be deleted one by one
App: send disk space stats to ingest node (WIP, needs processing on server side)
Dashboard: OTA visual feedback and error reporting

1.13.11 - 30/10/2020

App: fix http step again, deleting queue item after processing
App: silent mode in inputs: not sending events if true
App: clearer app debug messages for several modules
App: check if queue list is empty before accessing the first for pushing

1.13.10 - 30/10/2020

App: fix http step fix
App: M2 product module

1.13.9 - 29/10/2020

App: critical fix for http step moving packet too late
Codebase: fix CI name for staging

1.13.8 - 29/10/2020

App: fix condition for saving into queue
App: fix config values
Dashboard: add toast for simulator errors
Dashboard: new build method for build node

1.13.7 - 26/10/2020

Dashboard: fix header editor in http
Dashboard: fix simulator steps using environment variables

1.13.6 - 22/10/2020

Dashboard: hotfix for app deployment

1.13.5 - 19/10/2020

Dashboard: fix app input step's output queue

1.13.4 - 18/10/2020

Dashboard: fixed and simplified editor styling

1.13.3 - 16/10/2020

Dashboard: fix simulator
Dashboard: UI refinements in editor
Dashboard: status node

1.13.2 - 15/10/2020

Dashboard: fixed interface creation and deletion
Dashboard: fixed recipe selector

1.13.1 - 15/10/2020

Dashboard: fixed status node
Dashboard: recipe selector WIP
Dashboard: refined UI for editor

1.13.0 - 15/10/2020

Dashboard: refactor editor handlers
Dashboard: fixed client creation
Dashboard: small developer environment sql fix
build list UI tweaks
Dashboard: experimental Recipe UI
Dashboard: rename app (don't use on all builds)
App: started "send input/output" (WIP, needs module specific code)
Dashboard: fix password saving from user admin
Dashboard: status node fixes WIP
Dashboard: minor frontend packages cleanup
Dashboard: backend for data search
App: try panic recover techniques in apps
Dashboard: simulator fixes

1.12.0 - 12/10/2020

App: send data step with data mapper
Dashboard: release before send output (reverted to 7/10/20 state)

1.11.0 - 01/10/2020

Dashboard: Fixed most build list functionality, using hashes
Dashboard: Log in with email
App: HTTP step using Parser
App: SQL step simplified and tested
App: various small fixes
Dashboard: Data mapper in use

1.10.0 - 22/09/2020

Dashboard: Vuetify based frontend
Dashboard: login with email, no more usernames
Dashboard: fixed OTA workflow
App: queue system fixes
Dashboard: mongodb fixes
Dashboard: fix in user saving
Dashboard: fix build system again
App: memory allocation reporting
App: M2Stock module using datamapper
App: TLS option for http_listen input
App: fixed xml parsing
App: fixed template parser

1.9.1 - 07/09/2020

Dashboard: Fix ingest node, if mongodb is not defined don't panic
Dashboard: Added audit log to build endpoint

1.9.0 - 04/09/2020

App: new modules: m2stock, data sending (WIP)
Codebase: CI deploying master
Dashboard: data mapper concept
App: fixed javascript array
Dashboard: frontend refactored CoreUI
Dashboard: registration process (WIP)
Dashboard: mongodb data storage
App: events sending implemented
Dashboard: events dashboard
Dashboard: organisations list

1.8.1 - 01/03/2020

Dashboard: editor node works, static (generated) jsons
Dashboard: deleted user in backend

1.8.0 - 28/02/2020

Dashboard: Editor started working
Dashboard: Build node works
Dashboard: New frontend architecture with axios and vuex

1.7.1 - 31/01/2020

Dashboard: Reimplemented on CoreUI WIP (editor broken yet)
Dashboard: new logo
Dashboard: server architecture documentation

1.7.0 - 27/01/2020

Dashboard: reflect branding changes
App: refactoring modules to use readers
Dashboard: logging changes to reflect refactoring
Dashboard: indexing payloads for search
App: file (leveldb) based queue is back

1.6.5 - 19/11/2019

App: redirect back to page after session timeout login
App: save editor into browser local storage before redirecting to login
App: warn about user creation missing setup steps (WIP)

1.6.4 - 19/11/2019

App: Fix SQL module Fetch All (one payload as array) not to send many bundles

1.6.3 - 19/11/2019

App: revert to underscore.js

1.6.2 - 19/11/2019

App: Javascript to use lodash.js instead of underscore.js

1.6.1 - 18/11/2019

UI for resetting password WIP
Javascript module

1.6.0 - 13/11/2019

Dashboard: new editor, WIP
App: HTTP GET request, return is from out_sync
Dashboard: removed CoreUI, native dashboard

1.5.1 - 06/10/2019

Dashboard: click through charts to events
Dashboard: session stays active
Dashboard: chart tooltips

1.5.0 - 05/10/2019

Dashboard: new navbar theme
Dashboard: data and errors barchart
Dashboard: date filter on dashboard for charts and counts

1.4.0 - 04/10/2019

Dashboard: microservice architecture
Dashboard: store certain data in mysql instead of mongodb
Dashboard: server environment: grafana, prometheus
Dashboard: redis session handling

1.3.1 - 19/09/2019

Dashboard: show weekly numbers in dashboard (7 days rolling)

1.3.0 - 13/09/2019

App: removed bogus sync limit
App: M2 helper: set product status
App: Add option value into  eav_attribute_option_swatch  table - fixing swatch
App: better error messages in modules
App: fix SQL counter
App: sftp client error handling
App: Implement memory based queue system
App: Add template and rename template file to sftp_client step
Dashboard: Traefik based server setup
Dashboard: New editor in dashboard
Dashboard: Vault based authentication
Dashboard: Storing all client configuration in vault

1.2.0 - 26/02/2019

App: "Switch" step instead of condition
App: Lock queue to avoid write issues
App: Error handling in combine items step

1.1.1 - 21/02/2019

Dashboard: slack/email warning on broken LIM websocket

1.1.0 - 21/02/2019

App: handle empty dashboard templates better
App: pagination step based on reflect

1.0.1 - 21/02/2019

Dashboard: Logout functionality

1.0.0 - 20/02/2019

Dashboard: New dashboard design
App: Real-Time queue sizes of new LIM processes
Networking: Websocket+websocket communication (LIM->Dash->Browser)
Dashboard: Dark theme
Event log: Pagination even in search results

0.7.0 - 31/12/2018

New flow logic - experiments with flow based programming
Basic step modules (all output modules from POC)

0.6.0 - 31/12/2018

Change log for this POC (codebase will survive!)
Module structure
Experimental transformation module