# Beta

Nodewood is currently in Beta. Many features are fully implemented, while some are in a state of flux. Please read on to decide if Nodewood is in a state that is compatible with your current or future plans.

# The State Of Nodewood

# The Good

The following features are fully-implemented. While they may change, grow, and improve over time, they aren't missing anything obvious that would disqualify them from releasing in a 1.0 state.

# Docker Development

Provided you have or can install Docker, you can spin up a Nodewood development environment in a single terminal window, without needing you to set up and configure PostgreSQL, Nginx, etc. and without conflicting with everything else installed on your machine.

# CLI Tool

The Nodewood CLI tool makes it easy to set up and upgrade a project, add new features and files from a template, migrate and rollback your database, and manage your Stripe configuration.

# User Authentication/Management

Users can create an account, log in, sign out, change their password, and update their profile. The user's gravatar image is currently used for their profile image. Users are logged in via a pretty standard JWT implementation, with both a global and per-user "version" field that you can use to invalidate all of a user's tokens or every user's token in the event of an account becoming compromised.

# Teams

Nodewood comes with team support and a simple and powerful permissions system. All users have a Role, and roles have multiple Permissions. When you need to restrict access to an action, you can check for the correct Permission, and any User that has a Role with that permission can access it.

The UI comes with a team management page as well, that any user with manage_teams can access and invite new team members, re-send invites, modify team member access, or remove team members from.

Additionally, Nodewood has been designed so that all users have a team, even when the Teams feature is disabled. This is transparent to the user in this case (their team is never shown and the Teams page is not available), but it makes it very easy to add teams to your project later, without needing to redesign huge swaths of your app or database.

# Support

Sending a support message is just a click away! If you have email configured, there's a dropdown in the user menu that opens up an easy form for users to fill out and emails you their support request.

# Subscriptions

Stripe's product/price model is fully implemented, allowing you to specify monthly/yearly/whateverly periods for the same "plan level" (Bronze, Silver, Gold, etc). You can synchronize your local config with Stripe via the Nodewood CLI Tool, and import your current config from Stripe using same. Users can subscribe to your plans and then be restricted from hitting certain API endpoints by requiring they have certain capabilities granted to them from their subscription. Users can change or cancel their subscription, with a simple yet unobtrusive "save" attempt made before committing.

# Forms/API Validation

Validation can be defined in one place and then used to validate form input and also the API endpoints that those forms feed into.

# Application Skeleton

The API back-end and UI front-end can both be started in watch/development mode from the Nodewood CLI Tool. A fairly standard Express back-end is in place that is easily extendable with your own own controllers, and a fairly standard Vue front-end with a neutral-tone UI is available for you to customize.

# The Bad

The following features are planned, but not yet present. I will be collecting developer feedback first, to make sure the right features are built first, and built correctly. If these features are critical to you or your project, you may wish to wait until they are implemented fully. In the meantime, please feel free to contact me to share your feedback on these features! If you have specific requirements for them, now is the time to let me know, since it is easier to influence development the earlier the requirements are known.

# Metrics

There are a variety of ways you can implement metrics, and a variety of considerations I will want to consult with developers before building this out. Things like: What common providers (if any) does it make sense to offer connections to? Is there any interest in saving events in a time-series database for full-featured queries, or are simple roll-ups sufficient? How do developers envision using collected metrics, and what design considerations have to be made to accommodate for that?

# User Impersonation

The User/Teams implementation needs to be a bit further along before this can be developed, as their are significant security and privacy considerations to take into account that rely on the underlying data model.

# The Ugly

The following features are implemented, but are in a rudimentary or partially-completed state.

# Admin Panel

The Admin Panel is present and available to any user with account_type set to admin. It is fairly limited at this stage, consisting of an empty Dashboard page and a simple User Management interface. Admin interfaces are typically fairly customized, so it has been deliberately left in a minimal state, but based on developer feedback, commonly-requested items will be added.

# Production Deploy

The current production deploy instructions cover only a manual deploy. They are sufficient to deploy a Nodewood application to production, but require some knowledge of and familiarity with Virtual Machine-based hosting. More automatic deploy options will be developed eventually, likely starting with Digital Ocean's App Platform.

# How To Report Issues

For most issues, you'll want to report them on the Nodewood Public Issues Tracker (opens new window). That way, the community has a shot at being able to help you if I haven't had time to review your report in-depth yet, and the community benefits from being able to search for similar problems. You'll want to sanitize any example code submitted so that your business logic doesn't contain any trade secrets, of course, but this is the preferred method of reporting an issue.

For issues of a more private nature, where you cannot properly sanitize your code sufficiently that you'd be willing to put it on the public Internet, you can submit your issue by email to help@nodewood.com. Please try first to submit it to the public issues tracker, however.

When submitting an issue, please include at least the following three things:

  1. What steps did you take?
  2. What did you expect to happen?
  3. What actually happened?

Additionally, any relevant environment information is appreciated, as well as as much of a code sample as you can provide.

Thanks again for your interest in the Nodewood beta!