Note: I've included some initial questions to start and I'll update it as people ask me questions. 

Is Flexile a Relational Database?

Yes and no. Flexile is a relational database, but no technically Flexile isn't a fully relational database because it doesn't support all the various 'features' of a relational database such as cascading updates/deletes/etc and relationship enforcement. Flexile essentially supports only many-to-many kind of relationships to facilitate the Links between records. One-to-one and one-to-many kind of relationships aren't exactly supported, although you can technically 'mimic' those types of relationship by simply creating them. What I mean by this is that Flexile won't enforce any particular type of relationship. So you can create a one-to-one relationship by simply only adding 1 Link. If you add another Link it becomes a one-to-many. If the Record you linked to adds a separate Link of it's own the relationship becomes a many-to-many.

How is Flexile Different from a "Normal" relational Database

Flexile doesn't require (or give you the option) to manage the relationships between tables. That's done automatically for you when you make a Link between two records. This means there's no such thing as Cascading Updates or Cascading Deletes. Some power users may not like this, but Flexile is designed to keep things as simple as possible. To implement the "standard" features would require an entire system separate from the one Flexile currently uses, which would sky-rocket the apps complexity. Not only am I not willing to add that complexity as a use-case, but I definitely don't want to mantain that code.

This also means that each table has a "potential" many-to-many relationship with every table (including itself) in the database. I say "potential" because it really depends on what links you make, though no particular relationship type is enforced. Flexile wasn't designed to enforce the strict relational structure that's generally created with a normal relational database. If you need this strict structure, Flexile is definitely not for you. But I'd recommend taking a hard look at whether you really do need it. A lot of times Flexile will do just find in many scenarios. For those who are curious, yes, Flexile does use a SQL database for the back end. However Flexile doesn't rely (or use) any of the relational features of it's database. It could just as easy use a set of text files to store it's data. This was done intentionally, so I could switch out back ends if I find another one that does a better job.

As a side note, Flexile is also quite different from other database apps (as opposed to the database itself) in the way it displays data, especially when looking at a record list. While many database apps have an option/feature to create "Forms", which are essentially the equivalent of detail "Views" in Flexile, I'm not aware of any that allows the level of customization of the table list that Flexile allows....just saying. :)

Can Flexile Sync with the "cloud"?

No, not yet. The only 'cloud' Flexile currently supports is Backup/Restore to Dropbox/SugarSync/Box. This allows for a kind of manual syncing between devices but I'll be the first to admit it's cumbersome and not really intended for 'syncing'.

Just recently I started working on developing a cross-device sycning solution. It will be a proprietary solution and it will be subscription-based. This is, in fact, my long term "monetization strategy" for Flexile, so it's a pretty high priority (I do actually like money...).

Do you use Apple iCloud?

No, and I won't. First, Flexile isn't really compatible with iCloud. Apple's iCloud is great a certain things... and not so great at other things. It's actually pretty good at "Document-based syncing", that is: syncing individual files. Flexile, on the other hand, is a database.

Now Apple does support a form of database syncing, but only for apps that use their "Core Data" product, which Flexile does not (this is why Flexile isn't compatible). When I first started developing Flexile I did look at using Core Data but it turned out to be a poor match for the way I wanted Flexile to work.

There's one other reason I won't use iCloud. My long term goals include moving Flexile beyond Apple. For example, I'd really like to have a web-based interface for accessing your Flexile database. Eventually, I'd even like to move Flexile to other platforms (Android, Windows Phone, etc). This would be impossible if I used iCloud for syncing.

Flexile Crashes when I try to use Dropbox!

Quickfix: Delete Dropbox from Flexile and re-add it. As long as you're using 1.0.8 this problem shouldn't occur again. If it does, please let me know.


So, when I first started adding "Remote Services" (like Dropbox) to Flexile I thought it would be a good idea to store that information in Flexile's database so that you could back up this information. This turned out to be a bad idea. Dropbox (and other remote services) rely on a secret "key" to authorize Flexile. If you restore a database that has an old "key", Dropbox will crash whenever you try to use it.

In version 1.0.8 I removed Remote Service information from the database and placed it on the device itself (using Apple's internal settings API) so that it wouldn't be backed up anymore. This should fix the problem once you delete and re-add Dropbox from Flexile (if you're having the problem).